diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 013a7d1e20..1b1a8f07c8 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,16 +1,16 @@ #CONTRIBUTING -##Reporting Issues +## Reporting Issues See [this page](http://tgstation13.org/wiki/Reporting_Issues) for a guide and format to issue reports. -##Introduction +## Introduction Hello and welcome to /tg/station's contributing page. You are here because you are curious or interested in contributing. Thanks for being interested. Everyone is free to contribute to this project as long as they follow the simple guidelines and specifications below, because at /tg/station, we have a goal to increase code maintainability and to do that we are going to need all pull requests to hold up to those specifications. This is in order for all of us to benefit, instead of having to fix the same bug more than once because of duplicated code. But first we want to make it clear how you can contribute, if contributing is a new experience for you, and what powers the team has over your pull request so you do not get any surprises when submitting pull requests, and it is closed for a reason you did not anticipate. -##Getting Started +## Getting Started At /tg/station we do not have a list of goals and features to add, we instead allow freedom for contributors to suggest and create their ideas for the game. That does not mean we aren't determined to squash bugs, which unfortunately pop up a lot due to the deep complexity of the game. Here are some useful getting started guides, if you want to contribute or if you want to know what challenges you can tackle with zero knowledge about the game's code structure. If you want to contribute the first thing you'll need to do is [set up Git](http://tgstation13.org/wiki/Setting_up_git) so you can download the source code. @@ -21,7 +21,7 @@ There is an open list of approachable issues for [your inspiration here](https:/ You can of course, as always, ask for help at [#coderbus](irc://irc.rizon.net/coderbus) on irc.rizon.net. We are just here to have fun and help so do not expect professional support please. -##Meet the Team +## Meet the Team **Project Leads** @@ -37,14 +37,14 @@ Maintainers are quality control. If a proposed pull request does not meet the me Maintainers can revert your changes if they feel they are not worth maintaining or if they did not live up to the quality specifications. -##Specification +## Specification As mentioned before, you are expected to follow these specifications in order to make everyone's lives easier, it will also save you and us time, with having to make the changes and us having to tell you what to change. Thank you for reading this section. -###Object Oriented code +### Object Oriented code As BYOND's Dream Maker is an object oriented language, code must be object oriented when possible in order to be more flexible when adding content to it. If you are unfamiliar with this concept, it is highly recommended you look it up. -###All Byond paths must contain the full path. +### All Byond paths must contain the full path. (ie: absolute pathing) Byond will allow you nest almost any type keyword into a block, such as: @@ -98,16 +98,16 @@ The previous code made compliant: code ``` -###No overriding type safety checks. +### No overriding type safety checks. The use of the : operator to override type safety checks is not allowed. You must cast the variable to the proper type. -###Type paths must began with a / +### Type paths must began with a / eg: `/datum/thing` not `datum/thing` -###Datum type paths must began with "datum" +### Datum type paths must began with "datum" In byond this is optional, but omitting it makes finding definitions harder. -###Do not use text/string based type paths +### Do not use text/string based type paths It is rarely allowed to put type paths in a text format, as there are no compile errors if the type path no longer exists. Here is an example: ```C++ @@ -118,22 +118,22 @@ var/path_type = /obj/item/weapon/baseball_bat var/path_type = "/obj/item/weapon/baseball_bat" ``` -###Tabs not spaces +### Tabs not spaces You must use tabs to indent your code, NOT SPACES. (You may use spaces to align something, but you should tab to the block level first, then add the remaining spaces) -###No Hacky code +### No Hacky code Hacky code, such as adding specific checks, is highly discouraged and only allowed when there is ***no*** other option. (Protip: 'I couldn't immediately think of a proper way so thus there must be no other option' is not gonna cut it here ) You can avoid hacky code by using object oriented methodologies, such as overriding a function (called procs in DM) or sectioning code into functions and then overriding them as required. -###No duplicated code. +### No duplicated code. Copying code from one place to another maybe suitable for small short time projects but /tg/station focuses on the long term and thus discourages this. Instead you can use object orientation, or simply placing repeated code in a function, to obey this specification easily. -###Startup/Runtime tradeoffs with lists and the "hidden" init proc +### Startup/Runtime tradeoffs with lists and the "hidden" init proc First, read the comments in this byond thread, starting here:http://www.byond.com/forum/?post=2086980&page=2#comment19776775 There are two key points here: @@ -144,19 +144,19 @@ There are two key points here: Remember, this tradeoff makes sense in many cases but not all, you should think carefully about your implementation before deciding if this is an appropriate thing to do -###Prefer `Initialize` over `New` for atoms +### Prefer `Initialize` over `New` for atoms Our game controller is pretty good at handling long operations and lag. But, it can't control what happens when the map is loaded, which calls `New` for all atoms on the map. If you're creating a new atom, use the `Initialize` proc to do what you would normally do in `New`. This cuts down on the number of proc calls needed when the world is loaded. See here for details on `Initialize`: https://github.com/tgstation/tgstation/blob/master/code/game/atoms.dm#L49 -###No magic numbers or strings +### No magic numbers or strings Make these #defines with a name that more clearly states what it's for. -###Control statements: +### Control statements: (if,while,for,etc) * All control statements must not contain code on the same line as the statement (`if (blah) return`) * All control statements comparing a variable to a number should use the formula of `thing` `operator` `number`, not the reverse (eg: `if (count <= 10)` not `if (10 >= count)`) -###Use early return. +### Use early return. Do not enclose a proc in an if block when returning on a condition is more feasible This is bad: ```` @@ -179,7 +179,7 @@ This is good: ```` This prevents nesting levels from getting deeper then they need to be. -###Develop Secure Code +### Develop Secure Code * Player input must always be escaped safely, we recommend you use stripped_input in all cases where you would use input. Essentially, just always treat input from players as inherently malicious and design with that use case in mind @@ -193,14 +193,14 @@ This prevents nesting levels from getting deeper then they need to be. * Where you have code that can cause large scale modification and *FUN* make sure you start it out locked behind one of the default admin roles - use common sense to determine which role fits the level of damage a function could do -###Files +### Files * Because runtime errors do not give the full path, try to avoid having files with the same name across folders. * File names should not be mixed case, or contain spaces or any character that would require escaping in a uri. * Files and path accessed and referenced by code above simply being #included should be strictly lowercase to avoid issues on filesystems where case matters. -###Other Notes +### Other Notes * Code should be modular where possible, if you are working on a new class then it is best if you put it in a new file. * Bloated code may be necessary to add a certain feature, which means there has to be a judgement over whether the feature is worth having or not. You can help make this decision easier by making sure your code is modular. @@ -209,7 +209,7 @@ This prevents nesting levels from getting deeper then they need to be. * Do not divide when you can easily convert it to a multiplication. (ie `4/2` should be done as `4*0.5`) -####Enforced not enforced +#### Enforced not enforced The following different coding styles are not only not enforced, but it is generally frowned upon to change them over from one to the other for little reason: * English/British spelling on var/proc names @@ -217,7 +217,7 @@ The following different coding styles are not only not enforced, but it is gener * Spaces after control statements * if() if () nobody cares. -####Operators and spaces: +#### Operators and spaces: (this is not strictly enforced, but more a guideline for readability's sake) * Operators that should be separated by spaces @@ -232,7 +232,7 @@ The following different coding styles are not only not enforced, but it is gener Math operators like +, -, /, *, etc are up in the air, just choose which version looks more readable. -###Dream Maker Quirks/Tricks: +### 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```). @@ -276,7 +276,7 @@ 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 +## 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. @@ -297,7 +297,7 @@ Do not add any of the following in a Pull Request or risk getting the PR closed: * National Socialist Party of Germany content, National Socialist Party of Germany related content, or National Socialist Party of Germany references * Code where one line of code is split across mutiple lines (except for multiple, separate strings and comments and in those cases existing longer lines must not be split up) -##A word on git +## A word on git Yes we know that the files have a tonne of mixed windows and linux line endings, attempts to fix this have been met with less than stellar success and as such we have decided to give up caring until such a time as it matters. Therefore EOF settings of main repo are forbidden territory one must avoid wandering into diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index ffb65dcd34..f67f095a4f 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -7,6 +7,7 @@ add: Added new things add: Added more things del: Removed old things tweak: tweaked a few things +balance: rebalanced something fix: fixed a few things wip: added a few works in progress soundadd: added a new sound thingy diff --git a/README.md b/README.md index 96a2ae464a..3f0de8c771 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ + ##Citadel Station 13
Based and maintained from /tg/station.
@@ -16,7 +17,7 @@ Based and maintained from /tg/station.
**Code:** https://github.com/Citadel-Station-13/Citadel-Station-13
**Discord:** [Here](https://discord.gg/3gJ9pnM).
-##DOWNLOADING +## DOWNLOADING There are a number of ways to download the source code. Some are described here, an alternative all-inclusive guide is also located at http://www.tgstation13.org/wiki/Downloading_the_source_code @@ -34,7 +35,7 @@ code tab of https://github.com/tgstation/tgstation (note: this will use a lot of bandwidth if you wish to update and is a lot of hassle if you want to make any changes at all, so it's not recommended.) -##INSTALLATION +## INSTALLATION First-time installation should be fairly straightforward. First, you'll need BYOND installed. You can get it from http://www.byond.com/. Once you've done @@ -81,7 +82,7 @@ specified in the config.txt, and set the Security box to 'Safe'. Then press GO and the server should start up and be ready to join. It is also recommended that you set up the SQL backend (see below). -##UPDATING +## UPDATING To update an existing installation, first back up your /config and /data folders as these store your server configuration, player preferences and banlist. @@ -92,7 +93,7 @@ install, overwriting when prompted except if we've specified otherwise, and recompile the game. Once you start the server up again, you should be running the new version. -##MAPS +## MAPS Citadel Station maintains their own map, but frequently uses /tg/station's currently maintained maps as well. @@ -111,7 +112,7 @@ If you are hosting a server, and want randomly picked maps to be played each rou Anytime you want to make changes to a map it's imperative you use the [Map Merging tools](http://tgstation13.org/wiki/Map_Merger) -##AWAY MISSIONS +## AWAY MISSIONS /tg/station supports loading away missions however they are disabled by default. @@ -119,35 +120,33 @@ Map files for away missions are located in the _maps/RandomZLevels directory. Ea To enable an away mission open `config/awaymissionconfig.txt` and uncomment one of the .dmm lines by removing the #. If more than one away mission is uncommented then the away mission loader will randomly select one the enabled ones to load. -##SQL SETUP +## SQL SETUP The SQL backend requires a MySQL server. SQL is required for the library, stats tracking, admin notes, and job-only bans, among other features, mostly related to server administration. Your server details go in /config/dbconfig.txt, and the SQL schema is in /SQL/tgstation_schema.sql and /SQL/tgstation_schema_prefix.sql depending on if you want table prefixes. More detailed setup instructions are located here: http://www.tgstation13.org/wiki/Downloading_the_source_code#Setting_up_the_database -##IRC BOT SETUP +## IRC BOT SETUP Included in the repository is a python3 compatible IRC bot capable of relaying adminhelps to a specified IRC channel/server, see the /bot folder for more -##CONTRIBUTING +## CONTRIBUTING -Please see [CONTRIBUTING.md](CONTRIBUTING.md) +Please see [CONTRIBUTING.md](.github/CONTRIBUTING.md) -##LICENSE +## LICENSE -All code after commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 at 4:38 PM PST (https://github.com/tgstation/tgstation/commit/333c566b88108de218d882840e61928a9b759d8f) is licensed under GNU AGPL v3 (http://www.gnu.org/licenses/agpl-3.0.html). +All code after [commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 at 4:38 PM PST](https://github.com/tgstation/tgstation/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/tgstation/commit/333c566b88108de218d882840e61928a9b759d8f) is licensed under GNU GPL v3 (https://www.gnu.org/licenses/gpl-3.0.html). +All code before [commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 at 4:38 PM PST](https://github.com/tgstation/tgstation/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. tgui clientside is licensed as a subproject under the MIT license. Font Awesome font files, used by tgui, are licensed under the SIL Open Font License v1.1 -tgui assets are licensed under a Creative Commons Attribution-ShareAlike 4.0 International License -(http://creativecommons.org/licenses/by-sa/4.0/). +tgui assets are licensed under a [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). See tgui/LICENSE.md for the MIT license. See tgui/assets/fonts/SIL-OFL-1.1-LICENSE.md for the SIL Open Font License. -All assets including icons and sound are under a Creative Commons 3.0 BY-SA -license (http://creativecommons.org/licenses/by-sa/3.0/) unless otherwise indicated. +All assets including icons and sound are under a [Creative Commons 3.0 BY-SA license](http://creativecommons.org/licenses/by-sa/3.0/) unless otherwise indicated. diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_prisoner_crash.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_prisoner_crash.dmm deleted file mode 100644 index 5b2c8fc4bc..0000000000 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_prisoner_crash.dmm +++ /dev/null @@ -1,593 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/closed/mineral/volcanic/lava_land_surface, -/area/lavaland/surface/outdoors) -"b" = ( -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) -"c" = ( -/obj/item/weapon/shard, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) -"d" = ( -/obj/item/weapon/shard{ - icon_state = "medium" - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) -"e" = ( -/turf/closed/wall/mineral/plastitanium{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface - }, -/area/lavaland/surface/outdoors) -"f" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 8; - icon_state = "propulsion" - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) -"g" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 8; - icon_state = "propulsion" - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered) -"h" = ( -/turf/closed/wall/mineral/plastitanium{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface - }, -/area/ruin/unpowered) -"i" = ( -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/lava/smooth; - initial_gas_mix = "o2=14;n2=23;TEMP=300" - }, -/area/lavaland/surface/outdoors) -"j" = ( -/obj/item/weapon/pickaxe, -/obj/item/weapon/pickaxe, -/obj/item/weapon/pickaxe, -/obj/item/weapon/pickaxe, -/obj/item/device/flashlight/lantern, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/unpowered) -"k" = ( -/obj/effect/mob_spawn/human/prisoner_transport, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/unpowered) -"l" = ( -/obj/item/weapon/shard, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/unpowered) -"m" = ( -/obj/effect/mob_spawn/human/nanotrasensoldier, -/obj/effect/decal/cleanable/blood, -/obj/item/device/flashlight/seclite, -/obj/effect/light_emitter, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/unpowered) -"n" = ( -/obj/item/weapon/gun/ballistic/automatic/pistol/m1911, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/unpowered) -"o" = ( -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/unpowered) -"p" = ( -/obj/machinery/door/airlock/titanium, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/unpowered) -"q" = ( -/obj/item/weapon/shard, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/lava/smooth; - initial_gas_mix = "o2=14;n2=23;TEMP=300" - }, -/area/lavaland/surface/outdoors) -"r" = ( -/obj/machinery/door/airlock/titanium, -/turf/open/floor/plasteel/shuttle/red{ - baseturf = /turf/open/floor/plating/lava/smooth; - initial_gas_mix = "o2=16;n2=23" - }, -/area/ruin/unpowered) -"s" = ( -/obj/effect/mob_spawn/human/nanotrasensoldier, -/obj/item/weapon/gun/ballistic/automatic/pistol/m1911, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/unpowered) -"t" = ( -/obj/structure/closet/crate/internals, -/obj/item/weapon/crowbar/large, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/unpowered) -"u" = ( -/obj/structure/lattice, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) -"v" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) -"w" = ( -/obj/item/weapon/shard{ - icon_state = "small" - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) -"x" = ( -/obj/item/weapon/gun/ballistic/automatic/pistol/m1911, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) -"y" = ( -/obj/effect/mob_spawn/human/nanotrasensoldier, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) -"z" = ( -/obj/effect/decal/cleanable/blood, -/obj/item/device/flashlight/seclite, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) - -(1,1,1) = {" -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(2,1,1) = {" -b -a -b -b -b -a -a -b -b -b -b -b -b -b -b -b -b -b -a -b -"} -(3,1,1) = {" -b -b -c -b -b -a -a -b -b -b -b -b -b -b -b -b -b -b -b -a -"} -(4,1,1) = {" -b -b -b -b -b -b -a -b -b -g -h -g -h -g -b -b -b -w -b -b -"} -(5,1,1) = {" -b -b -a -a -a -b -b -b -b -h -h -h -h -h -b -b -b -x -b -b -"} -(6,1,1) = {" -b -b -a -a -a -b -b -e -f -h -j -m -t -h -f -e -b -b -y -b -"} -(7,1,1) = {" -b -b -b -b -b -b -b -b -e -h -k -n -k -h -e -b -b -v -z -b -"} -(8,1,1) = {" -a -b -b -b -b -b -b -a -a -h -k -o -k -h -b -b -v -v -b -b -"} -(9,1,1) = {" -b -b -b -d -b -b -b -a -a -h -k -o -k -h -b -b -v -v -b -b -"} -(10,1,1) = {" -b -b -b -b -b -b -b -a -a -h -k -o -k -h -b -b -b -b -a -a -"} -(11,1,1) = {" -a -b -b -b -b -b -b -a -a -h -h -p -h -h -b -b -b -b -a -a -"} -(12,1,1) = {" -a -b -b -b -b -b -b -b -b -e -i -i -i -u -b -b -b -b -a -a -"} -(13,1,1) = {" -b -b -b -a -b -b -b -a -b -i -i -q -i -u -b -b -b -c -a -a -"} -(14,1,1) = {" -b -a -a -b -b -a -a -a -a -i -i -i -i -i -b -b -b -b -a -a -"} -(15,1,1) = {" -b -b -b -a -a -a -a -a -a -h -h -p -e -e -b -b -b -b -a -a -"} -(16,1,1) = {" -b -b -b -a -a -a -a -a -a -h -l -s -a -e -b -b -b -b -a -a -"} -(17,1,1) = {" -b -b -b -a -a -a -a -a -a -e -a -a -a -e -b -b -b -b -a -a -"} -(18,1,1) = {" -b -b -b -b -b -a -a -a -a -a -a -a -e -a -a -b -a -a -a -a -"} -(19,1,1) = {" -b -b -b -b -b -a -a -a -a -a -a -a -a -b -b -b -a -a -a -a -"} -(20,1,1) = {" -b -b -b -b -b -a -a -a -a -a -a -a -a -b -b -b -b -b -a -a -"} diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm index 32c417fb65..8993318f00 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm @@ -51,12 +51,7 @@ /obj/structure/alien/weeds{ icon_state = "weeds1" }, -/obj/structure/alien/weeds{ - desc = "A large mottled egg."; - obj_integrity = 100; - icon_state = "egg_hatched"; - name = "egg" - }, +/obj/structure/alien/egg/burst, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/awaycontent/a5{ always_unpowered = 1; @@ -139,12 +134,7 @@ /obj/structure/alien/weeds{ icon_state = "weeds2" }, -/obj/structure/alien/weeds{ - desc = "A large mottled egg."; - obj_integrity = 100; - icon_state = "egg_hatched"; - name = "egg" - }, +/obj/structure/alien/egg/burst, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/awaycontent/a5{ always_unpowered = 1; @@ -334,12 +324,7 @@ }) "x" = ( /obj/structure/alien/weeds, -/obj/structure/alien/weeds{ - desc = "A large mottled egg."; - obj_integrity = 100; - icon_state = "egg_hatched"; - name = "egg" - }, +/obj/structure/alien/egg/burst, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/awaycontent/a5{ always_unpowered = 1; @@ -405,12 +390,7 @@ /obj/structure/alien/weeds{ icon_state = "weeds1" }, -/obj/structure/alien/weeds{ - desc = "A large mottled egg."; - obj_integrity = 100; - icon_state = "egg_hatched"; - name = "egg" - }, +/obj/structure/alien/egg/burst, /obj/effect/decal/cleanable/blood/gibs, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/awaycontent/a5{ @@ -424,12 +404,7 @@ }) "C" = ( /obj/structure/alien/weeds, -/obj/structure/alien/weeds{ - desc = "A large mottled egg."; - obj_integrity = 100; - icon_state = "egg_hatched"; - name = "egg" - }, +/obj/structure/alien/egg/burst, /obj/effect/decal/cleanable/blood, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/awaycontent/a5{ diff --git a/_maps/RandomZLevels/Cabin.dmm b/_maps/RandomZLevels/Cabin.dmm index f48bcfc317..c489b28422 100644 --- a/_maps/RandomZLevels/Cabin.dmm +++ b/_maps/RandomZLevels/Cabin.dmm @@ -778,9 +778,7 @@ /turf/open/floor/plasteel/freezer, /area/awaymission/cabin) "cH" = ( -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/wood, /area/awaymission/cabin) "cI" = ( @@ -974,12 +972,7 @@ /turf/open/floor/plating/snowed/temperatre, /area/awaymission/snowforest) "dt" = ( -/obj/effect/landmark/mapGenerator/snowy{ - endTurfX = 159; - endTurfY = 157; - startTurfX = 37; - startTurfY = 35 - }, +/obj/effect/landmark/mapGenerator/snowy, /turf/open/floor/plating/asteroid/snow/temperatre, /area/awaymission/snowforest) "du" = ( diff --git a/_maps/RandomZLevels/caves.dmm b/_maps/RandomZLevels/caves.dmm index 19b2c6579b..91bbcdf026 100644 --- a/_maps/RandomZLevels/caves.dmm +++ b/_maps/RandomZLevels/caves.dmm @@ -1175,9 +1175,7 @@ }, /area/awaymission/BMPship) "cz" = ( -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plating/asteroid/basalt{ initial_gas_mix = "n2=23;o2=14" }, @@ -1337,9 +1335,7 @@ name = "\improper BMP Asteroid Level 2" }) "cR" = ( -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" @@ -1635,9 +1631,7 @@ "dw" = ( /obj/structure/bed, /obj/item/weapon/bedsheet, -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/basalt }, @@ -1718,9 +1712,7 @@ "dH" = ( /obj/structure/bed, /obj/item/weapon/bedsheet, -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/basalt }, @@ -1833,9 +1825,7 @@ /obj/structure/bed, /obj/item/weapon/bedsheet, /obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/basalt }, @@ -1874,9 +1864,7 @@ /area/awaymission/northblock) "ed" = ( /obj/structure/bed, -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" @@ -2082,9 +2070,7 @@ }, /area/awaymission/BMPship) "eE" = ( -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/basalt }, @@ -2151,9 +2137,7 @@ }, /area/awaymission/listeningpost) "eO" = ( -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/basalt }, @@ -2630,9 +2614,7 @@ }, /area/awaymission/BMPship) "fU" = ( -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plasteel/elevatorshaft{ name = "elevator flooring"; initial_gas_mix = "n2=23;o2=14" @@ -2768,9 +2750,7 @@ }, /area/awaymission/BMPship) "gk" = ( -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plating/asteroid/basalt{ initial_gas_mix = "n2=23;o2=14" }, diff --git a/_maps/RandomZLevels/challenge.dmm b/_maps/RandomZLevels/challenge.dmm index 6f125ecfee..71e6232137 100644 --- a/_maps/RandomZLevels/challenge.dmm +++ b/_maps/RandomZLevels/challenge.dmm @@ -43,9 +43,7 @@ /turf/open/floor/plasteel/airless, /area/awaymission/challenge/start) "aj" = ( -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plasteel/airless{ icon_state = "damaged3" }, @@ -57,9 +55,7 @@ }, /area/awaymission/challenge/start) "al" = ( -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plasteel/airless, /area/awaymission/challenge/start) "am" = ( diff --git a/_maps/RandomZLevels/moonoutpost19.dmm b/_maps/RandomZLevels/moonoutpost19.dmm index 2ad6bc5eb5..9c681caa3e 100644 --- a/_maps/RandomZLevels/moonoutpost19.dmm +++ b/_maps/RandomZLevels/moonoutpost19.dmm @@ -9085,9 +9085,7 @@ name = "MO19 Arrivals" }) "ms" = ( -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/mineral/titanium/blue, /area/awaycontent/a1{ has_gravity = 1; @@ -9097,9 +9095,7 @@ /obj/structure/chair{ dir = 8 }, -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/mineral/titanium/blue, /area/awaycontent/a1{ has_gravity = 1; @@ -9269,9 +9265,7 @@ name = "MO19 Arrivals" }) "mI" = ( -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/mineral/titanium/yellow, /area/awaycontent/a1{ has_gravity = 1; @@ -9284,9 +9278,7 @@ icon_state = "beacon"; name = "tracking beacon" }, -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/mineral/titanium/yellow, /area/awaycontent/a1{ has_gravity = 1; diff --git a/_maps/RandomZLevels/research.dmm b/_maps/RandomZLevels/research.dmm index 123561932b..283bb53322 100644 --- a/_maps/RandomZLevels/research.dmm +++ b/_maps/RandomZLevels/research.dmm @@ -614,9 +614,7 @@ /turf/open/floor/plasteel/black, /area/awaymission/research/interior/gateway) "bR" = ( -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plasteel/black, /area/awaymission/research/interior/gateway) "bS" = ( @@ -686,9 +684,7 @@ /area/awaymission/research/interior/gateway) "bZ" = ( /obj/machinery/gateway, -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/black, /area/awaymission/research/interior/gateway) @@ -774,9 +770,7 @@ /area/awaymission/research/interior/gateway) "cj" = ( /obj/structure/window/reinforced, -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plasteel/black, /area/awaymission/research/interior/gateway) "ck" = ( @@ -785,9 +779,7 @@ icon_state = "right"; dir = 2 }, -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plasteel/black, /area/awaymission/research/interior/gateway) "cl" = ( @@ -3299,9 +3291,7 @@ icon_state = "toilet00"; dir = 8 }, -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /obj/machinery/light/small{ dir = 4 }, @@ -3746,9 +3736,7 @@ "jU" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/blue, -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/wood, /area/awaymission/research/interior/dorm) "jV" = ( @@ -4489,9 +4477,7 @@ "lT" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/patriot, -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/wood, /area/awaymission/research/interior/dorm) "lU" = ( diff --git a/_maps/RandomZLevels/snowdin.dmm b/_maps/RandomZLevels/snowdin.dmm index ef33d0f935..8810ffa44d 100644 --- a/_maps/RandomZLevels/snowdin.dmm +++ b/_maps/RandomZLevels/snowdin.dmm @@ -579,18 +579,14 @@ }, /area/awaymission/snowdin/base) "bw" = ( -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) "bx" = ( -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -608,9 +604,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 @@ -710,9 +704,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 @@ -724,9 +716,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /obj/structure/cable{ d1 = 1; d2 = 8; @@ -739,9 +729,7 @@ /area/awaymission/snowdin/base) "bK" = ( /obj/item/trash/pistachios, -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 @@ -753,9 +741,7 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 @@ -780,9 +766,7 @@ "bP" = ( /obj/structure/bed, /obj/item/weapon/bedsheet, -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/snow }, @@ -1164,9 +1148,7 @@ }, /area/awaymission/snowdin/igloo) "cU" = ( -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plating{ temperature = 220 }, @@ -2021,9 +2003,7 @@ }, /area/awaymission/snowdin/post) "ft" = ( -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/snow }, @@ -4222,9 +4202,7 @@ "lf" = ( /obj/structure/bed, /obj/item/weapon/bedsheet, -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/snow }, @@ -4442,9 +4420,7 @@ icon_state = "tube1"; dir = 4 }, -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/snow }, diff --git a/_maps/RandomZLevels/spacebattle.dmm b/_maps/RandomZLevels/spacebattle.dmm index df0ed07de0..d9e218d057 100644 --- a/_maps/RandomZLevels/spacebattle.dmm +++ b/_maps/RandomZLevels/spacebattle.dmm @@ -828,9 +828,7 @@ }, /area/awaymission/spacebattle/cruiser) "cO" = ( -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plasteel, /area/awaymission/spacebattle/cruiser) "cP" = ( @@ -1053,9 +1051,7 @@ }, /area/awaymission/spacebattle/cruiser) "dA" = ( -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plasteel/red/side{ dir = 1 }, @@ -1747,9 +1743,7 @@ /turf/open/floor/plating/airless, /area/awaymission/spacebattle/cruiser) "fI" = ( -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plasteel/cafeteria{ dir = 2 }, @@ -2331,9 +2325,7 @@ /area/awaymission/spacebattle/cruiser) "hC" = ( /obj/structure/chair, -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plasteel/bar, /area/awaymission/spacebattle/cruiser) "hD" = ( @@ -2928,9 +2920,7 @@ /obj/structure/chair{ dir = 8 }, -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plasteel/bar, /area/awaymission/spacebattle/cruiser) "jD" = ( diff --git a/_maps/RandomZLevels/undergroundoutpost45.dmm b/_maps/RandomZLevels/undergroundoutpost45.dmm index a9bfeab8cf..db8cfe012c 100644 --- a/_maps/RandomZLevels/undergroundoutpost45.dmm +++ b/_maps/RandomZLevels/undergroundoutpost45.dmm @@ -250,9 +250,7 @@ name = "UO45 Central Hall" }) "ax" = ( -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plasteel{ heat_capacity = 1e+006 }, @@ -265,9 +263,7 @@ icon_state = "comfychair"; dir = 4 }, -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plasteel/grimy{ heat_capacity = 1e+006 }, @@ -282,9 +278,7 @@ icon_state = "beacon"; name = "tracking beacon" }, -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plasteel/neutral/side{ dir = 4; heat_capacity = 1e+006 @@ -309,9 +303,7 @@ scrub_N2O = 0; scrub_Toxins = 0 }, -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plasteel/neutral/side{ dir = 4; heat_capacity = 1e+006 @@ -498,9 +490,7 @@ name = "UO45 Central Hall" }) "aT" = ( -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plasteel/grimy{ heat_capacity = 1e+006 }, diff --git a/_maps/RandomZLevels/wildwest.dmm b/_maps/RandomZLevels/wildwest.dmm index afc9addebb..93a2bf679a 100644 --- a/_maps/RandomZLevels/wildwest.dmm +++ b/_maps/RandomZLevels/wildwest.dmm @@ -2165,9 +2165,7 @@ }, /area/awaymission/wwrefine) "gV" = ( -/obj/effect/landmark{ - name = "awaystart" - }, +/obj/effect/landmark/awaystart, /turf/open/floor/plating/ironsand{ icon_state = "ironsand1" }, diff --git a/_maps/cerestation.dm b/_maps/cerestation.dm new file mode 100644 index 0000000000..9345072d05 --- /dev/null +++ b/_maps/cerestation.dm @@ -0,0 +1 @@ +#define FORCE_MAP "_maps/cerestation.json" \ No newline at end of file diff --git a/_maps/cerestation.json b/_maps/cerestation.json new file mode 100644 index 0000000000..e4c6b52f89 --- /dev/null +++ b/_maps/cerestation.json @@ -0,0 +1,7 @@ +{ + "map_name": "CereStation", + "map_path": "map_files/Cerestation", + "map_file": "cerestation.dmm", + "minetype": "lavaland", + "transition_config": "default" +} \ No newline at end of file diff --git a/_maps/loadallmaps.dm b/_maps/loadallmaps.dm index fe32643025..22359d164f 100644 --- a/_maps/loadallmaps.dm +++ b/_maps/loadallmaps.dm @@ -2,8 +2,10 @@ #include "map_files\debug\runtimestation.dmm" #include "map_files\Deltastation\DeltaStation2.dmm" #include "map_files\MetaStation\MetaStation.dmm" +#include "map_files\OmegaStation\OmegaStation.dmm" #include "map_files\PubbyStation\PubbyStation.dmm" #include "map_files\TgStation\tgstation.2.1.3.dmm" +#include "map_files\Cerestation\cerestation.dmm" #include "map_files\CitadelStation\CitadelStation-1.2.1.dmm" #include "map_files\generic\Centcomm.dmm" diff --git a/_maps/map_files/Cerestation/cerestation.dmm b/_maps/map_files/Cerestation/cerestation.dmm new file mode 100644 index 0000000000..f556c646d6 --- /dev/null +++ b/_maps/map_files/Cerestation/cerestation.dmm @@ -0,0 +1,151280 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aaa" = ( +/turf/open/space, +/area/space) +"aab" = ( +/turf/open/floor/plating/asteroid/airless, +/area/space) +"aac" = ( +/turf/closed/mineral/random/low_chance, +/area/space) +"aad" = ( +/turf/closed/mineral, +/area/space) +"aae" = ( +/turf/closed/mineral/random/labormineral, +/area/mine/unexplored{ + name = "AI Asteroid" + }) +"aaf" = ( +/turf/closed/mineral, +/area/mine/unexplored{ + name = "AI Asteroid" + }) +"aag" = ( +/obj/effect/landmark/carpspawn, +/turf/open/space, +/area/space) +"aah" = ( +/turf/open/space, +/obj/machinery/porta_turret/syndicate{ + dir = 9 + }, +/turf/closed/wall/mineral/plastitanium{ + dir = 8; + icon_state = "diagonalWall3" + }, +/area/shuttle/syndicate) +"aai" = ( +/turf/closed/wall/mineral/plastitanium, +/area/shuttle/syndicate) +"aaj" = ( +/obj/structure/grille, +/obj/machinery/door/poddoor/shutters{ + id = "syndieshutters"; + name = "blast shutters" + }, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating, +/area/shuttle/syndicate) +"aak" = ( +/turf/open/space, +/obj/machinery/porta_turret/syndicate{ + dir = 5 + }, +/turf/closed/wall/mineral/plastitanium{ + dir = 1; + icon_state = "diagonalWall3" + }, +/area/shuttle/syndicate) +"aal" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"aam" = ( +/obj/structure/table, +/obj/machinery/microwave, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"aan" = ( +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"aao" = ( +/obj/structure/table, +/obj/item/device/flashlight/lamp{ + pixel_x = 4; + pixel_y = 1 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"aap" = ( +/obj/machinery/computer/shuttle/syndicate, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"aaq" = ( +/obj/structure/table, +/obj/machinery/button/door{ + id = "syndieshutters"; + name = "remote shutter control"; + req_access_txt = "150" + }, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"aar" = ( +/obj/structure/frame/computer, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"aas" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/donkpockets{ + pixel_x = 3; + pixel_y = 3 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"aat" = ( +/obj/structure/chair/comfy/beige{ + dir = 1; + icon_state = "comfychair" + }, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"aau" = ( +/obj/machinery/porta_turret/ai{ + dir = 4 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"aav" = ( +/obj/machinery/camera/motion{ + c_tag = "AI Core North-West" + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"aaw" = ( +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"aax" = ( +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"aay" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/porta_turret/ai{ + dir = 4 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"aaz" = ( +/obj/machinery/camera/motion{ + c_tag = "AI Core North-East" + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"aaA" = ( +/obj/structure/table, +/obj/item/stack/sheet/glass{ + amount = 10 + }, +/obj/item/device/multitool, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"aaB" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"aaC" = ( +/obj/item/device/radio/intercom{ + desc = "Talk through this. Evilly"; + freerange = 1; + frequency = 1213; + name = "Syndicate Intercom"; + pixel_y = -32; + subspace_transmission = 1; + syndie = 1 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"aaD" = ( +/obj/structure/closet/syndicate/personal, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"aaE" = ( +/obj/item/weapon/twohanded/required/kirbyplants{ + icon_state = "plant-09" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"aaF" = ( +/obj/machinery/ai_slipper{ + uses = 10 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"aaG" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"aaH" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"aaI" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/airalarm{ + dir = 1; + icon_state = "alarm0"; + pixel_y = -22 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"aaJ" = ( +/obj/machinery/power/terminal, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"aaK" = ( +/obj/machinery/power/apc{ + dir = 2; + name = "AI Core APC"; + pixel_y = -24 + }, +/obj/structure/cable{ + icon_state = "0-2"; + d2 = 2 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"aaL" = ( +/obj/machinery/ai_status_display{ + pixel_x = 32 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"aaM" = ( +/turf/open/space, +/turf/closed/wall/mineral/plastitanium{ + icon_state = "diagonalWall3" + }, +/area/shuttle/syndicate) +"aaN" = ( +/obj/machinery/door/window{ + name = "Cockpit"; + req_access_txt = "150" + }, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"aaO" = ( +/turf/open/space, +/turf/closed/wall/mineral/plastitanium{ + dir = 4; + icon_state = "diagonalWall3" + }, +/area/shuttle/syndicate) +"aaP" = ( +/turf/closed/wall, +/area/space) +"aaQ" = ( +/turf/closed/wall, +/area/maintenance/disposal{ + name = "Northen External Waste Belt" + }) +"aaR" = ( +/obj/structure/window/reinforced/fulltile, +/obj/structure/grille, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "Northen External Waste Belt" + }) +"aaS" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"aaT" = ( +/obj/machinery/door/window/southright{ + req_access_txt = "65" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"aaU" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"aaV" = ( +/obj/machinery/power/smes{ + charge = 5e+006 + }, +/obj/structure/cable{ + icon_state = "0-4"; + d2 = 4 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"aaW" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"aaX" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"aaY" = ( +/obj/structure/table, +/obj/item/stack/cable_coil, +/obj/item/weapon/crowbar/red, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"aaZ" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/zipties{ + pixel_x = 1; + pixel_y = 2 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"aba" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plating, +/area/space) +"abb" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/space) +"abc" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall, +/area/space) +"abd" = ( +/obj/machinery/disposal/deliveryChute{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/space) +"abe" = ( +/obj/structure/disposaloutlet{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/maintenance/disposal{ + name = "Northen External Waste Belt" + }) +"abf" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall, +/area/maintenance/disposal{ + name = "Northen External Waste Belt" + }) +"abg" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/deliveryChute{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "Northen External Waste Belt" + }) +"abh" = ( +/obj/machinery/conveyor/auto{ + icon_state = "conveyor0"; + dir = 8 + }, +/obj/structure/sign/poster/random{ + name = "random contraband poster"; + pixel_x = 0; + pixel_y = 32; + random_basetype = /obj/structure/sign/poster/contraband + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "Northen External Waste Belt" + }) +"abi" = ( +/obj/machinery/conveyor/auto{ + icon_state = "conveyor0"; + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "Northen External Waste Belt" + }) +"abj" = ( +/obj/machinery/conveyor/auto{ + icon_state = "conveyor0"; + dir = 8 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "Northen External Waste Belt" + }) +"abk" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/machinery/conveyor/auto{ + dir = 6; + icon_state = "conveyor0"; + verted = -1 + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "Northen External Waste Belt" + }) +"abl" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"abm" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"abn" = ( +/obj/effect/landmark/tripai, +/obj/item/device/radio/intercom{ + anyai = 1; + broadcasting = 0; + freerange = 1; + frequency = 1447; + name = "Private Channel"; + pixel_x = 0; + pixel_y = -25 + }, +/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 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"abo" = ( +/obj/effect/landmark/tripai, +/obj/item/device/radio/intercom{ + anyai = 1; + broadcasting = 0; + freerange = 1; + frequency = 1447; + name = "Private Channel"; + pixel_x = 0; + pixel_y = -25 + }, +/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 = 28 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"abp" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"abq" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"abr" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/space) +"abs" = ( +/turf/open/floor/plating, +/area/space) +"abt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "Northen External Waste Belt" + }) +"abu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/disposal{ + name = "Northen External Waste Belt" + }) +"abv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "Northen External Waste Belt" + }) +"abw" = ( +/obj/machinery/conveyor/auto{ + icon_state = "conveyor0"; + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "Northen External Waste Belt" + }) +"abx" = ( +/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 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"aby" = ( +/obj/machinery/holopad, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"abz" = ( +/obj/item/device/radio/intercom{ + anyai = 1; + broadcasting = 0; + freerange = 1; + frequency = 1447; + name = "Private Channel"; + pixel_x = 27; + pixel_y = -9 + }, +/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 = 25 + }, +/obj/machinery/turretid{ + name = "AI Chamber turret control"; + pixel_x = 24; + pixel_y = 5 + }, +/obj/machinery/flasher{ + id = "AI"; + pixel_x = -11; + pixel_y = 24 + }, +/obj/machinery/requests_console{ + department = "AI"; + departmentType = 5; + pixel_x = -28; + pixel_y = 28 + }, +/obj/effect/landmark/start/ai, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"abA" = ( +/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/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"abB" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 4 + }, +/turf/closed/wall/mineral/plastitanium, +/area/shuttle/syndicate) +"abC" = ( +/obj/structure/lattice, +/turf/open/space, +/area/space) +"abD" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/space) +"abE" = ( +/turf/open/floor/plating/asteroid/airless, +/area/mine/unexplored{ + name = "Command Asteroid" + }) +"abF" = ( +/turf/closed/wall/rust, +/area/maintenance/disposal{ + name = "Northen External Waste Belt" + }) +"abG" = ( +/obj/machinery/light/small, +/obj/structure/table, +/obj/item/weapon/storage/toolbox/emergency, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/disposal{ + name = "Northen External Waste Belt" + }) +"abH" = ( +/obj/structure/rack, +/obj/item/clothing/mask/breath, +/obj/item/weapon/tank/internals/emergency_oxygen, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/disposal{ + name = "Northen External Waste Belt" + }) +"abI" = ( +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 2; + name = "Northen External Waste Belt APC"; + pixel_y = -24 + }, +/obj/effect/turf_decal/stripes/end{ + tag = "icon-warn_end (NORTH)"; + icon_state = "warn_end"; + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "Northen External Waste Belt" + }) +"abJ" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/disposal{ + name = "Northen External Waste Belt" + }) +"abK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/disposal{ + name = "Northen External Waste Belt" + }) +"abL" = ( +/obj/structure/disposalpipe/trunk, +/obj/structure/disposaloutlet{ + icon_state = "outlet"; + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "Northen External Waste Belt" + }) +"abM" = ( +/obj/machinery/porta_turret/ai{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"abN" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"abO" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"abP" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"abQ" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"abR" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"abS" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + on = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"abT" = ( +/obj/machinery/suit_storage_unit/syndicate, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"abU" = ( +/obj/structure/closet/syndicate/nuclear, +/obj/item/weapon/pickaxe/mini, +/obj/item/weapon/pickaxe/mini, +/obj/item/weapon/pickaxe/mini, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"abV" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall, +/area/space) +"abW" = ( +/turf/closed/mineral, +/area/mine/unexplored{ + name = "Command Asteroid" + }) +"abX" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 2 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "Northen External Waste Belt" + }) +"abY" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall, +/area/maintenance/disposal{ + name = "Northen External Waste Belt" + }) +"abZ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"aca" = ( +/obj/item/weapon/twohanded/required/kirbyplants{ + icon_state = "plant-09" + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"acb" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/porta_turret/ai{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"acc" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"acd" = ( +/obj/machinery/suit_storage_unit/syndicate, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"ace" = ( +/obj/structure/chair/stool{ + pixel_y = 8 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"acf" = ( +/obj/structure/table, +/obj/item/device/aicard, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"acg" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"ach" = ( +/obj/machinery/door/poddoor{ + id = "smindicate"; + name = "outer blast door" + }, +/obj/machinery/button/door{ + id = "smindicate"; + name = "external door control"; + pixel_x = -26; + pixel_y = 0; + req_access_txt = "150" + }, +/obj/docking_port/mobile{ + dheight = 9; + dir = 2; + dwidth = 5; + height = 24; + id = "syndicate"; + name = "syndicate infiltrator"; + port_angle = 0; + roundstart_move = "syndicate_away"; + width = 18 + }, +/obj/docking_port/stationary{ + dheight = 9; + dir = 2; + dwidth = 5; + height = 24; + id = "syndicate_nw"; + name = "northwest of station"; + turf_type = /turf/open/space; + width = 18 + }, +/turf/open/floor/plating, +/area/shuttle/syndicate) +"aci" = ( +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; + icon_state = "space"; + layer = 4; + name = "EXTERNAL AIRLOCK"; + pixel_x = 0 + }, +/turf/closed/wall/mineral/plastitanium, +/area/shuttle/syndicate) +"acj" = ( +/obj/structure/disposaloutlet, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/space) +"ack" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "Northen External Waste Belt" + }) +"acl" = ( +/obj/machinery/disposal/deliveryChute, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/maintenance/disposal{ + name = "Northen External Waste Belt" + }) +"acm" = ( +/obj/docking_port/stationary{ + dheight = 9; + dir = 2; + dwidth = 5; + height = 24; + id = "syndicate_n"; + name = "north of station"; + turf_type = /turf/open/space; + width = 18 + }, +/turf/open/space, +/area/space) +"acn" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"aco" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"acp" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"acq" = ( +/obj/structure/table, +/obj/item/weapon/c4{ + pixel_x = 2; + pixel_y = -5 + }, +/obj/item/weapon/c4{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/weapon/c4{ + pixel_x = 2; + pixel_y = -3 + }, +/obj/item/weapon/c4{ + pixel_x = -2; + pixel_y = -1 + }, +/obj/item/weapon/c4{ + pixel_x = 3; + pixel_y = 3 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"acr" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating, +/area/shuttle/syndicate) +"acs" = ( +/obj/machinery/door/window{ + name = "Ready Room"; + req_access_txt = "150" + }, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"act" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 1 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "Northen External Waste Belt" + }) +"acu" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"acv" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"acw" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/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 = 2; + icon = 'icons/mob/robots.dmi'; + icon_state = "robot_old"; + name = "Cyborg Statue"; + pixel_x = 0; + pixel_y = 0 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"acx" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"acy" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"acz" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"acA" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/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 = 2; + icon = 'icons/mob/robots.dmi'; + icon_state = "robot_old"; + name = "Cyborg Statue"; + pixel_x = 0; + pixel_y = 0 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"acB" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"acC" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9; + pixel_y = 0 + }, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"acD" = ( +/obj/docking_port/stationary{ + dheight = 9; + dir = 2; + dwidth = 5; + height = 24; + id = "syndicate_ne"; + name = "northeast of station"; + turf_type = /turf/open/space; + width = 18 + }, +/turf/open/space, +/area/space) +"acE" = ( +/obj/machinery/door/window{ + dir = 4; + name = "EVA Storage"; + req_access_txt = "150" + }, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"acF" = ( +/obj/machinery/door/airlock/external{ + req_access_txt = "150" + }, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"acG" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"acH" = ( +/turf/closed/mineral/random/labormineral, +/area/mine/unexplored{ + name = "Command Asteroid" + }) +"acI" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/space, +/area/space) +"acJ" = ( +/obj/effect/landmark/start/cyborg, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"acK" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/holopad, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"acL" = ( +/obj/machinery/camera/motion{ + c_tag = "AI Core South-East"; + dir = 1; + network = list("MiniSat") + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"acM" = ( +/obj/machinery/door/window{ + base_state = "right"; + dir = 4; + icon_state = "right"; + name = "EVA Storage"; + req_access_txt = "150" + }, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"acN" = ( +/turf/open/space, +/turf/closed/wall/mineral/plastitanium{ + dir = 1; + icon_state = "diagonalWall3" + }, +/area/shuttle/syndicate) +"acO" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"acP" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"acQ" = ( +/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 + }, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"acR" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"acS" = ( +/obj/machinery/door/airlock/hatch{ + name = "AI Core Hallway"; + req_one_access_txt = "65" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/ai_monitored/turret_protected/ai) +"acT" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"acU" = ( +/obj/machinery/sleeper/syndie{ + dir = 4 + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"acV" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"acW" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"acX" = ( +/obj/structure/tank_dispenser/oxygen, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"acY" = ( +/obj/structure/table, +/obj/item/stack/medical/ointment, +/obj/item/stack/medical/bruise_pack, +/obj/structure/extinguisher_cabinet{ + pixel_x = -5; + pixel_y = 30 + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"acZ" = ( +/obj/structure/table, +/obj/item/weapon/stock_parts/cell/high{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/weapon/stock_parts/cell/high, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"ada" = ( +/obj/structure/table, +/obj/item/weapon/screwdriver{ + pixel_y = 9 + }, +/obj/item/device/assembly/voice{ + pixel_y = 3 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"adb" = ( +/obj/structure/table, +/obj/item/weapon/wrench, +/obj/item/device/assembly/infra, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"adc" = ( +/obj/structure/table, +/obj/item/device/assembly/signaler, +/obj/item/device/assembly/signaler, +/obj/item/device/assembly/prox_sensor{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/device/assembly/prox_sensor{ + pixel_x = -8; + pixel_y = 4 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"add" = ( +/obj/structure/table, +/obj/item/weapon/weldingtool/largetank{ + pixel_y = 3 + }, +/obj/item/device/multitool, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"ade" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"adf" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/disposaloutlet, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"adg" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"adh" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"adi" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"adj" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/ai_monitored/turret_protected/ai) +"adk" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"adl" = ( +/obj/machinery/ai_status_display{ + pixel_x = 32 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"adm" = ( +/obj/structure/bed/roller, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"adn" = ( +/obj/structure/sign/bluecross_2, +/turf/closed/wall/mineral/plastitanium, +/area/shuttle/syndicate) +"ado" = ( +/obj/structure/table, +/obj/item/weapon/storage/toolbox/syndicate, +/obj/item/weapon/crowbar/red, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"adp" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"adq" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"adr" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/window/brigdoor/southleft{ + name = "Armory Delievery Chute"; + req_access_txt = "3" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"ads" = ( +/turf/closed/wall, +/area/mine/unexplored{ + name = "Command Asteroid" + }) +"adt" = ( +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"adu" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"adv" = ( +/obj/machinery/telecomms/processor/preset_three, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"adw" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/computer) +"adx" = ( +/obj/effect/decal/remains/human, +/obj/effect/landmark/revenantspawn, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"ady" = ( +/obj/machinery/porta_turret/ai{ + dir = 4; + installation = /obj/item/weapon/gun/energy/e_gun + }, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"adz" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/ai_monitored/turret_protected/ai) +"adA" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"adB" = ( +/obj/machinery/porta_turret/ai{ + dir = 4; + installation = /obj/item/weapon/gun/energy/e_gun + }, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"adC" = ( +/obj/machinery/door/window{ + dir = 4; + name = "Infirmary"; + req_access_txt = "150" + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"adD" = ( +/obj/machinery/door/window/westright{ + name = "Tool Storage"; + req_access_txt = "150" + }, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"adE" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"adF" = ( +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/machinery/camera/motion{ + c_tag = "Armory North" + }, +/turf/open/floor/plasteel/darkred/side{ + icon_state = "darkred"; + dir = 9; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"adG" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "Armory APC"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plasteel/darkred/side{ + icon_state = "darkred"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"adH" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/darkred/side{ + icon_state = "darkred"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"adI" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plasteel/darkred/side{ + icon_state = "darkred"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"adJ" = ( +/obj/item/weapon/grenade/barrier{ + pixel_x = 4 + }, +/obj/item/weapon/grenade/barrier, +/obj/item/weapon/grenade/barrier{ + pixel_x = -4 + }, +/obj/structure/table, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"adK" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/firingpins{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/item/weapon/storage/box/firingpins{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/item/key/security, +/obj/item/key/security, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"adL" = ( +/obj/machinery/flasher/portable, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/delivery{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"adM" = ( +/obj/machinery/flasher/portable, +/turf/open/floor/plasteel/delivery{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"adN" = ( +/obj/machinery/telecomms/server/presets/engineering, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"adO" = ( +/obj/machinery/telecomms/bus/preset_four, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"adP" = ( +/obj/machinery/telecomms/bus/preset_three, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"adQ" = ( +/obj/machinery/telecomms/server/presets/security, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"adR" = ( +/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/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"adS" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/computer) +"adT" = ( +/obj/machinery/computer/message_monitor, +/obj/machinery/camera{ + c_tag = "Telecomms Control Room 2"; + dir = 6; + icon_state = "camera" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/computer) +"adU" = ( +/obj/machinery/announcement_system, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/computer) +"adV" = ( +/obj/machinery/camera{ + c_tag = "AI Hallway"; + dir = 5; + icon_state = "camera"; + tag = "icon-camera (NORTHEAST)" + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"adW" = ( +/obj/machinery/door/window{ + base_state = "right"; + dir = 4; + icon_state = "right"; + name = "Infirmary"; + req_access_txt = "150" + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"adX" = ( +/obj/machinery/door/window{ + dir = 8; + name = "Tool Storage"; + req_access_txt = "150" + }, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"adY" = ( +/obj/machinery/recharge_station, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"adZ" = ( +/turf/closed/mineral, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aea" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel/darkred/side{ + icon_state = "darkred"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"aeb" = ( +/obj/structure/rack, +/obj/item/weapon/gun/energy/laser{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/weapon/gun/energy/laser, +/obj/item/weapon/gun/energy/laser{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 8 + }, +/area/ai_monitored/security/armory) +"aec" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"aed" = ( +/obj/structure/rack, +/obj/item/weapon/gun/energy/ionrifle, +/obj/item/weapon/gun/energy/temperature/security, +/obj/item/clothing/suit/armor/laserproof{ + pixel_x = 0 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 8 + }, +/area/ai_monitored/security/armory) +"aee" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"aef" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"aeg" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/suit_storage_unit/hos, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"aeh" = ( +/turf/open/floor/plating/asteroid/airless, +/area/mine/unexplored{ + name = "AI Asteroid" + }) +"aei" = ( +/obj/machinery/telecomms/server/presets/common, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"aej" = ( +/obj/machinery/telecomms/processor/preset_four, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"aek" = ( +/obj/machinery/telecomms/receiver/preset_right, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"ael" = ( +/obj/machinery/telecomms/server/presets/command, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"aem" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"aen" = ( +/obj/structure/chair/office/dark{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/computer) +"aeo" = ( +/obj/machinery/computer/telecomms/server{ + network = "tcommsat" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/computer) +"aep" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/holopad, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/ai_monitored/turret_protected/ai) +"aeq" = ( +/obj/item/weapon/coin/antagtoken, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"aer" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 5 + }, +/turf/closed/wall/mineral/plastitanium, +/area/shuttle/syndicate) +"aes" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/table, +/obj/item/bodypart/r_arm/robot, +/obj/item/bodypart/l_arm/robot, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"aet" = ( +/obj/machinery/door/window{ + dir = 1; + name = "Surgery"; + req_access_txt = "150" + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"aeu" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"aev" = ( +/obj/structure/table, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/weapon/storage/firstaid/brute, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = -3; + pixel_y = -3 + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"aew" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/weapon/storage/firstaid/fire, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = -3; + pixel_y = -3 + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"aex" = ( +/obj/structure/table, +/obj/item/device/sbeacondrop/bomb{ + pixel_y = 5 + }, +/obj/item/device/sbeacondrop/bomb, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"aey" = ( +/obj/structure/table, +/obj/item/weapon/grenade/syndieminibomb{ + pixel_x = 4; + pixel_y = 2 + }, +/obj/item/weapon/grenade/syndieminibomb{ + pixel_x = -1 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"aez" = ( +/turf/closed/mineral/random/labormineral, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aeA" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/closet/crate, +/obj/item/weapon/pickaxe/mini, +/obj/item/weapon/pickaxe/mini, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aeB" = ( +/turf/open/floor/plasteel/darkred/side{ + icon_state = "darkred"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"aeC" = ( +/obj/structure/rack, +/obj/item/weapon/gun/energy/e_gun{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/weapon/gun/energy/e_gun, +/obj/item/weapon/gun/energy/e_gun{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/machinery/atmospherics/components/unary/vent_pump{ + on = 1 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 8 + }, +/area/ai_monitored/security/armory) +"aeD" = ( +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"aeE" = ( +/obj/structure/rack, +/obj/item/clothing/suit/armor/riot{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/clothing/suit/armor/riot, +/obj/item/clothing/suit/armor/riot{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/clothing/head/helmet/riot{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/clothing/head/helmet/riot, +/obj/item/clothing/head/helmet/riot{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/weapon/shield/riot{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/weapon/shield/riot, +/obj/item/weapon/shield/riot{ + pixel_x = 0; + pixel_y = 1; + pixel_x = 3; + pixel_y = -3 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 8 + }, +/area/ai_monitored/security/armory) +"aeF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"aeG" = ( +/obj/machinery/suit_storage_unit/security, +/obj/structure/window/reinforced, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"aeH" = ( +/obj/machinery/blackbox_recorder, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"aeI" = ( +/obj/machinery/telecomms/broadcaster/preset_right, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"aeJ" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"aeK" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"aeL" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"aeM" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/computer) +"aeN" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"aeO" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/ai_monitored/turret_protected/ai) +"aeP" = ( +/obj/structure/table, +/obj/item/weapon/surgicaldrill, +/obj/item/weapon/circular_saw, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"aeQ" = ( +/obj/structure/sink{ + dir = 4; + icon_state = "sink"; + pixel_x = 11; + pixel_y = 0 + }, +/obj/structure/mirror{ + pixel_x = 30 + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"aeR" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/circuit, +/area/shuttle/syndicate) +"aeS" = ( +/obj/machinery/nuclearbomb/syndicate, +/obj/machinery/door/window{ + dir = 1; + name = "Secure Storage"; + req_access_txt = "150" + }, +/turf/open/floor/circuit, +/area/shuttle/syndicate) +"aeT" = ( +/obj/machinery/telecomms/allinone{ + intercept = 1 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"aeU" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aeV" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aeW" = ( +/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aeX" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aeY" = ( +/obj/structure/rack, +/obj/item/weapon/gun/energy/e_gun/advtaser{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/weapon/gun/energy/e_gun/advtaser, +/obj/item/weapon/gun/energy/e_gun/advtaser{ + pixel_x = 3; + pixel_y = -3 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 8 + }, +/area/ai_monitored/security/armory) +"aeZ" = ( +/obj/structure/rack, +/obj/item/clothing/suit/armor/bulletproof{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/clothing/suit/armor/bulletproof{ + pixel_y = 0 + }, +/obj/item/clothing/suit/armor/bulletproof{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/clothing/head/helmet/alt{ + layer = 3.00001; + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/clothing/head/helmet/alt{ + layer = 3.00001 + }, +/obj/item/clothing/head/helmet/alt{ + layer = 3.00001; + pixel_x = 3; + pixel_y = -3 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 8 + }, +/area/ai_monitored/security/armory) +"afa" = ( +/mob/living/simple_animal/bot/secbot/beepsky{ + desc = "It's Officer Gunsky, the most rootin'-tootin'-point-and shootin' security bot on this side of the galaxy!"; + name = "Officer Gunsky" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"afb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/holopad, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"afc" = ( +/obj/structure/closet/secure_closet/lethalshots, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"afd" = ( +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"afe" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"aff" = ( +/obj/machinery/door/airlock/glass_command{ + name = "Control Room"; + req_access_txt = "19; 61" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/computer) +"afg" = ( +/obj/structure/table, +/obj/item/weapon/cautery, +/obj/item/weapon/scalpel, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"afh" = ( +/obj/structure/table/optable, +/obj/item/weapon/surgical_drapes, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"afi" = ( +/obj/structure/table, +/obj/item/weapon/retractor, +/obj/item/weapon/hemostat, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"afj" = ( +/turf/open/space, +/area/shuttle/syndicate) +"afk" = ( +/obj/structure/shuttle/engine/heater, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/floor/plating, +/area/shuttle/syndicate) +"afl" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"afm" = ( +/obj/structure/table, +/obj/item/stack/sheet/metal{ + amount = 50 + }, +/obj/item/stack/sheet/glass{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"afn" = ( +/obj/structure/rack, +/obj/item/clothing/suit/space/syndicate/black/red, +/obj/item/clothing/head/helmet/space/syndicate/black/red, +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"afo" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"afp" = ( +/obj/machinery/light/small, +/turf/open/floor/plating/asteroid, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"afq" = ( +/turf/open/floor/plating/asteroid, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"afr" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"afs" = ( +/obj/structure/rack, +/obj/item/weapon/gun/ballistic/shotgun/riot{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/weapon/gun/ballistic/shotgun/riot, +/obj/item/weapon/gun/ballistic/shotgun/riot{ + pixel_x = 3; + pixel_y = -3 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 8 + }, +/area/ai_monitored/security/armory) +"aft" = ( +/obj/structure/rack, +/obj/item/weapon/gun/energy/e_gun/dragnet, +/obj/item/weapon/gun/energy/e_gun/dragnet, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 8 + }, +/area/ai_monitored/security/armory) +"afu" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"afv" = ( +/obj/machinery/suit_storage_unit/security, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"afw" = ( +/turf/closed/wall, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"afx" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 2 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"afy" = ( +/obj/structure/disposaloutlet{ + icon_state = "outlet"; + dir = 1 + }, +/obj/structure/disposalpipe/trunk, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/plating/airless, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"afz" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/machinery/ntnet_relay, +/obj/machinery/camera{ + c_tag = "Telecoms Server Room"; + dir = 4; + network = list("SS13") + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"afA" = ( +/obj/machinery/power/smes{ + charge = 5e+006 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"afB" = ( +/obj/machinery/telecomms/hub/preset, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"afC" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"afD" = ( +/obj/machinery/door/airlock/glass_engineering{ + cyclelinkeddir = 4; + name = "Server Room"; + req_access_txt = "61" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/tcommsat/computer) +"afE" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/tcommsat/computer) +"afF" = ( +/obj/machinery/door/airlock/glass_engineering{ + cyclelinkeddir = 8; + name = "Server Room"; + req_access_txt = "61" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/tcommsat/computer) +"afG" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/components/unary/vent_pump{ + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/computer) +"afH" = ( +/obj/structure/shuttle/engine/propulsion{ + icon_state = "propulsion_l" + }, +/turf/open/floor/plating, +/area/shuttle/syndicate) +"afI" = ( +/obj/structure/shuttle/engine/propulsion, +/turf/open/floor/plating, +/area/shuttle/syndicate) +"afJ" = ( +/obj/structure/shuttle/engine/propulsion{ + icon_state = "propulsion_r" + }, +/turf/open/floor/plating, +/area/shuttle/syndicate) +"afK" = ( +/obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating/asteroid, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"afL" = ( +/obj/machinery/vending/sustenance, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"afM" = ( +/obj/structure/rack, +/obj/item/weapon/storage/box/rubbershot{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/weapon/storage/box/rubbershot{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/weapon/storage/box/rubbershot, +/obj/item/weapon/storage/box/rubbershot, +/obj/item/weapon/storage/box/rubbershot{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/weapon/storage/box/rubbershot{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/structure/window/reinforced, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 8 + }, +/area/ai_monitored/security/armory) +"afN" = ( +/obj/structure/rack, +/obj/item/weapon/storage/box/teargas{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/weapon/storage/box/handcuffs, +/obj/item/weapon/storage/box/flashbangs{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/structure/window/reinforced, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 8 + }, +/area/ai_monitored/security/armory) +"afO" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"afP" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/vehicle/secway, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"afQ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"afR" = ( +/turf/closed/mineral/random/labormineral, +/area/security/transfer) +"afS" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"afT" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"afU" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"afV" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"afW" = ( +/obj/structure/window/reinforced/fulltile, +/obj/structure/grille, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"afX" = ( +/obj/machinery/holopad, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"afY" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/item/weapon/twohanded/required/kirbyplants{ + tag = "icon-plant-22"; + icon_state = "plant-22" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/computer) +"afZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/computer) +"aga" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Telecomms Control Room"; + dir = 6; + icon_state = "camera" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/computer) +"agb" = ( +/obj/structure/table, +/obj/item/weapon/paper_bin, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/computer) +"agc" = ( +/obj/structure/table, +/obj/item/weapon/folder/blue, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/computer) +"agd" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/computer) +"age" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"agf" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"agg" = ( +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, +/obj/machinery/turretid{ + name = "AI Chamber turret control"; + pixel_x = 0; + pixel_y = 24 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"agh" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"agi" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"agj" = ( +/obj/item/weapon/twohanded/required/kirbyplants{ + icon_state = "plant-09" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"agk" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"agl" = ( +/turf/open/space, +/obj/machinery/porta_turret/syndicate{ + dir = 6 + }, +/turf/closed/wall/mineral/plastitanium{ + dir = 4; + icon_state = "diagonalWall3" + }, +/area/shuttle/syndicate) +"agm" = ( +/turf/open/space, +/obj/machinery/porta_turret/syndicate{ + dir = 10 + }, +/turf/closed/wall/mineral/plastitanium{ + icon_state = "diagonalWall3" + }, +/area/shuttle/syndicate) +"agn" = ( +/obj/machinery/hydroponics/soil, +/obj/structure/sign/poster/official/do_not_question{ + pixel_y = 32 + }, +/turf/open/floor/plating/asteroid, +/area/security/prison) +"ago" = ( +/obj/machinery/hydroponics/soil, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/plating/asteroid, +/area/security/prison) +"agp" = ( +/obj/machinery/hydroponics/soil, +/obj/item/seeds/random, +/turf/open/floor/plating/asteroid, +/area/security/prison) +"agq" = ( +/obj/structure/toilet, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"agr" = ( +/turf/open/floor/plasteel/darkred/side{ + icon_state = "darkred"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"ags" = ( +/turf/open/floor/plasteel/darkred/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"agt" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/darkred/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"agu" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/darkred/corner{ + icon_state = "darkredcorners"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"agv" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/darkred/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"agw" = ( +/obj/machinery/light, +/obj/vehicle/secway, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"agx" = ( +/obj/machinery/flasher/portable, +/obj/machinery/camera/motion{ + c_tag = "Armory South"; + dir = 1; + network = list("SS1`3") + }, +/turf/open/floor/plasteel/delivery{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"agy" = ( +/turf/closed/mineral, +/area/security/transfer) +"agz" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/transfer) +"agA" = ( +/turf/open/floor/plating/asteroid, +/area/security/transfer) +"agB" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 1 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"agC" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/cobweb, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"agD" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/reagent_dispensers/watertank/high, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"agE" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/reagent_dispensers/fueltank, +/obj/item/weapon/weldingtool, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"agF" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 8; + icon_state = "pipe-j2s"; + name = "disposal pipe - Custodials"; + sortType = 22 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"agG" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 8; + icon_state = "pipe-j2s"; + name = "disposal pipe - CE Office"; + sortType = 5 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"agH" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 8; + icon_state = "pipe-j2s"; + name = "disposal pipe - RD Office"; + sortType = 13 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"agI" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 8; + icon_state = "pipe-j2s"; + name = "disposal pipe - QM Office"; + sortType = 3 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"agJ" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 8; + icon_state = "pipe-j2s"; + name = "disposal pipe - CMO Office"; + sortType = 10 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"agK" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 8; + icon_state = "pipe-j2s"; + name = "disposal pipe - HoS Office"; + sortType = 8 + }, +/obj/structure/girder, +/obj/structure/grille, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"agL" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 8; + icon_state = "pipe-j2s"; + name = "disposal pipe - HoP Office"; + sortType = 15 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/rack, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"agM" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/table, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"agN" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/closet/crate, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"agO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/closet, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"agP" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"agQ" = ( +/obj/machinery/disposal/deliveryChute{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"agR" = ( +/obj/structure/disposaloutlet{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"agS" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/deliveryChute{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"agT" = ( +/obj/machinery/conveyor/auto{ + icon_state = "conveyor0"; + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"agU" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/machinery/conveyor/auto{ + dir = 6; + icon_state = "conveyor0"; + verted = -1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"agV" = ( +/obj/machinery/message_server, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"agW" = ( +/obj/machinery/telecomms/broadcaster/preset_left, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"agX" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/computer) +"agY" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/holopad, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/computer) +"agZ" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/computer) +"aha" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/computer) +"ahb" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/computer) +"ahc" = ( +/obj/machinery/door/airlock/engineering{ + name = "Telecommunications"; + req_access_txt = "61" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/computer) +"ahd" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"ahe" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/mob/living/simple_animal/bot/secbot/pingsky, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"ahf" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"ahg" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "AI Asteroid Hallway 4"; + dir = 1; + icon_state = "camera"; + network = list("SS13") + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"ahh" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"ahi" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/obj/machinery/ai_status_display{ + pixel_x = 32 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"ahj" = ( +/obj/structure/sink{ + icon_state = "sink"; + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/obj/item/seeds/ambrosia, +/obj/machinery/flasher{ + id = "PermaCell"; + pixel_x = -24; + pixel_y = 0 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ahk" = ( +/obj/item/weapon/cultivator, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ahl" = ( +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ahm" = ( +/obj/machinery/door/airlock{ + name = "Bathroom" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ahn" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"aho" = ( +/obj/machinery/door/airlock/glass_security{ + name = "Armory"; + req_access_txt = "3" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/darkred/side{ + icon_state = "darkred"; + dir = 5; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"ahp" = ( +/obj/machinery/door/airlock/glass_security{ + name = "Armory"; + req_access_txt = "3" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/darkred/side{ + icon_state = "darkred"; + dir = 9; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"ahq" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating/asteroid, +/area/security/transfer) +"ahr" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ahs" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aht" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ahu" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/girder, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ahv" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/grille, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ahw" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ahx" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/structure/grille/broken, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ahy" = ( +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ahz" = ( +/obj/structure/disposalpipe/junction, +/obj/effect/landmark/blobstart, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ahA" = ( +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j2"; + dir = 2 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ahB" = ( +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 8 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ahC" = ( +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 8 + }, +/obj/structure/girder, +/obj/structure/grille, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ahD" = ( +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 1 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ahE" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/structure/closet/crate, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ahF" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ahG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ahH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/plating, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ahI" = ( +/obj/machinery/conveyor/auto{ + icon_state = "conveyor0"; + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ahJ" = ( +/obj/machinery/telecomms/server/presets/supply, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"ahK" = ( +/obj/machinery/telecomms/bus/preset_two, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"ahL" = ( +/obj/machinery/telecomms/receiver/preset_left, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"ahM" = ( +/obj/machinery/telecomms/server/presets/medical, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"ahN" = ( +/obj/structure/chair/office/dark, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/computer) +"ahO" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1; + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/computer) +"ahP" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/computer) +"ahQ" = ( +/obj/machinery/door/airlock/hatch{ + name = "AI Core"; + req_one_access_txt = "65" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"ahR" = ( +/obj/machinery/door/airlock/hatch{ + name = "AI Core"; + req_one_access_txt = "65" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"ahS" = ( +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"ahT" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "AI Asteroid" + }) +"ahU" = ( +/obj/machinery/computer/arcade, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ahV" = ( +/turf/open/floor/plasteel/airless/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ahW" = ( +/obj/machinery/holopad, +/obj/item/weapon/reagent_containers/glass/bucket, +/turf/open/floor/plasteel/airless/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ahX" = ( +/obj/structure/table, +/obj/item/weapon/paper_bin, +/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 = 0; + pixel_y = 24; + prison_radio = 1 + }, +/obj/machinery/camera{ + c_tag = "Brig Long-Term Cells" + }, +/obj/item/seeds/potato, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ahY" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ahZ" = ( +/obj/structure/table, +/obj/machinery/computer/libraryconsole/bookmanagement, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/structure/sign/poster/official/obey{ + pixel_y = 32 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aia" = ( +/turf/open/floor/plating/asteroid, +/area/mine/unexplored{ + name = "Asteroid" + }) +"aib" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/asteroid, +/area/mine/unexplored{ + name = "Asteroid" + }) +"aic" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/darkred/side{ + icon_state = "darkred"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"aid" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/darkred/side{ + icon_state = "darkred"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"aie" = ( +/obj/effect/landmark/blobstart, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/transfer) +"aif" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating/asteroid, +/area/security/transfer) +"aig" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/transfer) +"aih" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aii" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aij" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/item/weapon/wrench, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aik" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/grille/broken, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ail" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/sign/poster/random{ + name = "random contraband poster"; + pixel_x = 0; + pixel_y = -32; + random_basetype = /obj/structure/sign/poster/contraband + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aim" = ( +/obj/structure/closet/emcloset, +/obj/structure/sign/poster/random{ + name = "random contraband poster"; + pixel_x = -32; + pixel_y = 0; + random_basetype = /obj/structure/sign/poster/contraband + }, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ain" = ( +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aio" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aip" = ( +/obj/machinery/telecomms/server/presets/service, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"aiq" = ( +/obj/machinery/telecomms/processor/preset_two, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"air" = ( +/obj/machinery/telecomms/processor/preset_one, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"ais" = ( +/obj/machinery/telecomms/server/presets/science, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"ait" = ( +/obj/machinery/computer/telecomms/monitor{ + network = "tcommsat" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/computer) +"aiu" = ( +/obj/structure/table, +/obj/item/device/radio/off, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/computer) +"aiv" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/machinery/light, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/computer) +"aiw" = ( +/obj/machinery/power/apc{ + dir = 2; + name = "Telecoms Control Room APC"; + pixel_y = -24 + }, +/obj/structure/cable, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/computer) +"aix" = ( +/obj/structure/rack{ + dir = 8; + layer = 2.9 + }, +/obj/item/weapon/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = -1 + }, +/obj/item/device/multitool, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/computer) +"aiy" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/structure/sign/map/left/ceres{ + pixel_x = -32 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"aiz" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"aiA" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/ai_status_display{ + pixel_x = 32 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"aiB" = ( +/obj/machinery/recharge_station, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/landmark/start/cyborg, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"aiC" = ( +/obj/structure/chair/stool, +/obj/structure/sign/poster/official/work_for_a_future{ + pixel_x = -32 + }, +/turf/open/floor/plasteel/airless/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aiD" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aiE" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/chair/stool, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aiF" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/airless/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aiG" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aiH" = ( +/obj/structure/chair/stool, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aiI" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aiJ" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aiK" = ( +/obj/machinery/door/airlock/glass_security{ + name = "Armory"; + req_access_txt = "3" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/darkred/side{ + icon_state = "darkred"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aiL" = ( +/obj/machinery/door/airlock/glass_security{ + name = "Armory"; + req_access_txt = "3" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/darkred/side{ + icon_state = "darkred"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aiM" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aiN" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aiO" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/transfer) +"aiP" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/transfer) +"aiQ" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "Security Transfer Range APC"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/transfer) +"aiR" = ( +/obj/structure/rack, +/obj/item/weapon/pickaxe/mini, +/turf/open/floor/plating/asteroid, +/area/security/transfer) +"aiS" = ( +/obj/structure/girder, +/turf/open/floor/plating/asteroid, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aiT" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/grille, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aiU" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aiV" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aiW" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aiX" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aiY" = ( +/obj/structure/table, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aiZ" = ( +/turf/open/floor/plating, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aja" = ( +/obj/machinery/conveyor/auto{ + icon_state = "conveyor0"; + dir = 9 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ajb" = ( +/obj/machinery/conveyor/auto{ + icon_state = "conveyor0"; + dir = 8 + }, +/obj/structure/plasticflaps, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ajc" = ( +/obj/machinery/conveyor/auto{ + dir = 6; + icon_state = "conveyor0"; + verted = -1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ajd" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aje" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"ajf" = ( +/obj/machinery/telecomms/bus/preset_one, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"ajg" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/camera{ + c_tag = "AI Asteroid Hallway 3"; + dir = 4; + icon_state = "camera" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"ajh" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"aji" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"ajj" = ( +/turf/closed/wall, +/area/quartermaster/sorting) +"ajk" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"ajl" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"ajm" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"ajn" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"ajo" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ajp" = ( +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ajq" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ajr" = ( +/obj/structure/table, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ajs" = ( +/obj/structure/table, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ajt" = ( +/obj/structure/closet/crate, +/turf/open/floor/plating/asteroid, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aju" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ajv" = ( +/obj/machinery/camera{ + c_tag = "Prison Screen Monitor"; + dir = 4; + network = list("Prison") + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ajw" = ( +/obj/structure/table, +/turf/open/floor/plasteel/airless/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ajx" = ( +/obj/structure/table, +/obj/item/weapon/storage/pill_bottle/dice, +/turf/open/floor/plasteel/airless/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ajy" = ( +/obj/structure/chair/stool, +/turf/open/floor/plasteel/airless/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ajz" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/airless/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ajA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/airless/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ajB" = ( +/obj/structure/closet/secure_closet/brig, +/turf/open/floor/plasteel/darkred{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ajC" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plasteel/darkred{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ajD" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/sign/nanotrasen{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/darkred/side{ + icon_state = "darkred"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ajE" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ajF" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ajG" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/camera{ + c_tag = "Brig Prison Lockers" + }, +/obj/structure/sign/nanotrasen{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/darkred/side{ + icon_state = "darkred"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ajH" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plasteel/darkred{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ajI" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/transfer) +"ajJ" = ( +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/transfer) +"ajK" = ( +/obj/structure/rack, +/obj/item/weapon/shovel, +/turf/open/floor/plating/asteroid, +/area/security/transfer) +"ajL" = ( +/obj/structure/rack, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ajM" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/maintenance{ + name = "Fore Asteroid Maintenance Access"; + req_access_txt = "12" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ajN" = ( +/obj/structure/table, +/obj/item/weapon/storage/toolbox/emergency, +/turf/open/floor/plating, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ajO" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ajP" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ajQ" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/plating, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ajR" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/disposaloutlet{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ajS" = ( +/obj/structure/disposaloutlet{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/airless, +/area/mine/unexplored{ + name = "AI Asteroid" + }) +"ajT" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"ajU" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/tcommsat/server) +"ajV" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "AI Asteroid" + }) +"ajW" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"ajX" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"ajY" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"ajZ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"aka" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "AI Asteroid" + }) +"akb" = ( +/obj/machinery/disposal/deliveryChute{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/airless, +/area/mine/unexplored{ + name = "AI Asteroid" + }) +"akc" = ( +/obj/structure/disposaloutlet{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/quartermaster/sorting) +"akd" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"ake" = ( +/obj/machinery/conveyor{ + dir = 5; + icon_state = "conveyor0"; + id = "CargoWaste"; + verted = -1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"akf" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "CargoWaste" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"akg" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "CargoWaste" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"akh" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/disposaloutlet{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"aki" = ( +/obj/structure/disposalpipe/wrapsortjunction{ + icon_state = "pipe-j1s"; + dir = 8 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"akj" = ( +/obj/machinery/disposal/deliveryChute{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/quartermaster/sorting) +"akk" = ( +/obj/structure/disposaloutlet{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/space) +"akl" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/sign/poster/contraband/kss13{ + pixel_x = -32 + }, +/turf/open/floor/plating, +/area/space) +"akm" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/item/weapon/bedsheet, +/obj/structure/sign/poster/contraband/communist_state{ + pixel_y = 32 + }, +/obj/effect/landmark/revenantspawn, +/turf/open/floor/plating, +/area/space) +"akn" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/item/clothing/head/ushanka, +/turf/open/floor/plating, +/area/space) +"ako" = ( +/obj/item/trash/can, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"akp" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"akq" = ( +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"akr" = ( +/obj/structure/chair/stool, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aks" = ( +/obj/structure/bed, +/turf/open/floor/plasteel/airless/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"akt" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aku" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/poddoor/preopen{ + id = "permatoggle"; + name = "prisoner transfer door" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"akv" = ( +/obj/structure/closet/secure_closet/brig, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/darkred{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"akw" = ( +/turf/open/floor/plasteel/darkred{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"akx" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/darkred/side{ + icon_state = "darkred"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aky" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"akz" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/darkred/side{ + icon_state = "darkred"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"akA" = ( +/obj/structure/closet/secure_closet/brig, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/open/floor/plasteel/darkred{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"akB" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/transfer) +"akC" = ( +/obj/machinery/light/small, +/turf/open/floor/plating/asteroid, +/area/security/transfer) +"akD" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating/asteroid, +/area/security/transfer) +"akE" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 1 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"akF" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"akG" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "Command Asteroid" + }) +"akH" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Fore Asteroid Maintenance Access"; + req_access_txt = "12" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"akI" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"akJ" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"akK" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"akL" = ( +/obj/machinery/door/airlock/maintenance{ + name = "External Maintenance Access"; + req_access_txt = "12" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"akM" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"akN" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump{ + on = 1 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"akO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"akP" = ( +/obj/machinery/door/airlock/maintenance{ + name = "External Maintenance Access"; + req_access_txt = "12" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"akQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"akR" = ( +/turf/open/floor/plating/asteroid/airless, +/area/mine/unexplored{ + name = "Cargo Asteroid" + }) +"akS" = ( +/obj/machinery/conveyor{ + dir = 9; + icon_state = "conveyor0"; + id = "CargoWaste"; + verted = -1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"akT" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "CargoWaste" + }, +/obj/machinery/recycler, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"akU" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "CargoWaste" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"akV" = ( +/obj/machinery/mineral/stacking_machine{ + input_dir = 8; + output_dir = 2 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"akW" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/machinery/mineral/stacking_unit_console{ + dir = 2; + machinedir = 8 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"akX" = ( +/obj/item/trash/candy, +/turf/open/floor/plating, +/area/space) +"akY" = ( +/obj/effect/decal/remains/human, +/obj/effect/landmark/xeno_spawn, +/turf/open/floor/plating, +/area/space) +"akZ" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/glowshroom/single, +/turf/open/floor/plating, +/area/space) +"ala" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"alb" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"alc" = ( +/obj/structure/barricade/wooden, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ald" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 8 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ale" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"alf" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"alg" = ( +/obj/machinery/biogenerator, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"alh" = ( +/obj/machinery/seed_extractor, +/turf/open/floor/plasteel/airless/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ali" = ( +/obj/structure/bed, +/obj/machinery/flasher{ + id = "PermaCell"; + pixel_x = 0; + pixel_y = -24 + }, +/turf/open/floor/plasteel/airless/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"alj" = ( +/obj/structure/bed, +/obj/machinery/light, +/turf/open/floor/plasteel/airless/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"alk" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/airless/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"all" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/transfer) +"alm" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/transfer) +"aln" = ( +/obj/structure/mineral_door/iron{ + name = "Transfer Center" + }, +/turf/open/floor/plating/asteroid, +/area/security/transfer) +"alo" = ( +/obj/structure/closet/crate, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"alp" = ( +/obj/structure/curtain, +/obj/machinery/shower{ + pixel_y = 24 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"alq" = ( +/obj/structure/curtain, +/obj/machinery/shower{ + pixel_y = 24 + }, +/obj/item/weapon/bikehorn/rubberducky, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"alr" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 1 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"als" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"alt" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"alu" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"alv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9; + pixel_y = 0 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"alw" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/landmark/blobstart, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"alx" = ( +/turf/closed/mineral, +/area/mine/unexplored{ + name = "Cargo Asteroid" + }) +"aly" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"alz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/landmark/blobstart, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"alA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/conveyor_switch{ + id = "CargoWaste" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"alB" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"alC" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"alD" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"alE" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"alF" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "Cargo Asteroid" + }) +"alG" = ( +/obj/item/trash/can, +/turf/open/floor/plating, +/area/space) +"alH" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"alI" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"alJ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/airlock/glass_security{ + name = "Long-Term Holding Cell"; + req_access_txt = "2" + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"alK" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/security{ + name = "Inmate Transfer Facility"; + req_access_txt = "2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/transfer) +"alL" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/item/weapon/ore/glass, +/turf/open/floor/plating/asteroid, +/area/security/transfer) +"alM" = ( +/obj/item/weapon/shovel, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/transfer) +"alN" = ( +/obj/item/weapon/ore/glass, +/turf/open/floor/plating/asteroid, +/area/security/transfer) +"alO" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"alP" = ( +/obj/structure/rack, +/obj/item/weapon/pickaxe/emergency, +/obj/item/weapon/shovel, +/obj/item/weapon/storage/bag/ore, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"alQ" = ( +/obj/structure/grille, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"alR" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating/asteroid, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"alS" = ( +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"alT" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"alU" = ( +/obj/structure/table/wood, +/obj/item/weapon/paper_bin, +/obj/item/weapon/stamp/captain, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"alV" = ( +/obj/structure/table/wood, +/obj/item/device/modular_computer/laptop/preset/civillian, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"alW" = ( +/obj/machinery/light_switch{ + pixel_y = 25 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"alX" = ( +/obj/item/weapon/storage/secure/safe{ + pixel_y = 32 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"alY" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"alZ" = ( +/obj/structure/sink{ + icon_state = "sink"; + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/obj/structure/mirror{ + pixel_x = -32 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"ama" = ( +/obj/item/weapon/soap/deluxe, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"amb" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"amc" = ( +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"amd" = ( +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"ame" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"amf" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"amg" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"amh" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"ami" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Cargo Disposals"; + dir = 1; + icon_state = "camera"; + network = list("SS13","QM") + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"amj" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"amk" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"aml" = ( +/obj/machinery/airalarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, +/obj/structure/table, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"amm" = ( +/obj/structure/bed, +/obj/machinery/camera{ + c_tag = "Brig Cell 4"; + dir = 4; + network = list("SS13") + }, +/obj/item/weapon/bedsheet, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"amn" = ( +/obj/machinery/flasher{ + id = "Cell 4"; + pixel_x = 0; + pixel_y = 24 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"amo" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"amp" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"amq" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/camera{ + c_tag = "Brig Cells North 1" + }, +/obj/machinery/button/flasher{ + id = "PermaCell"; + name = "Perma Flash"; + pixel_x = 0; + pixel_y = 32 + }, +/obj/machinery/button/door{ + id = "permatoggle"; + name = "Perma Exchange"; + pixel_y = 24 + }, +/obj/machinery/computer/security/telescreen{ + desc = "Used to watch criminial scum without fear of a rogue water puddle and prison shank."; + name = "Prison Monitor"; + network = list("Prison"); + pixel_x = -32; + pixel_y = 32 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"amr" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ams" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"amt" = ( +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"amu" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"amv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 6; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"amw" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/holopad, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"amx" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"amy" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"amz" = ( +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"amA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"amB" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/camera{ + c_tag = "Brig Cells North 2" + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = 32 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"amC" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"amD" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"amE" = ( +/obj/machinery/flasher{ + id = "Cell 8"; + pixel_x = 0; + pixel_y = 24 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"amF" = ( +/obj/structure/bed, +/obj/machinery/camera{ + c_tag = "Brig Cell 8"; + dir = 9; + icon_state = "camera"; + network = list("SS13"); + tag = "icon-camera (NORTHWEST)" + }, +/obj/item/weapon/bedsheet, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"amG" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless; + icon_plating = "asteroid_dug"; + icon_state = "asteroid_dug"; + name = "ditch" + }, +/area/security/transfer) +"amH" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"amI" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"amJ" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"amK" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"amL" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/item/device/assembly/mousetrap/armed, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"amM" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"amN" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"amO" = ( +/obj/structure/table/wood, +/obj/item/device/flashlight/lamp, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"amP" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"amQ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"amR" = ( +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"amS" = ( +/obj/machinery/door/airlock{ + name = "Bathroom" + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"amT" = ( +/obj/machinery/light/small, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"amU" = ( +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"amV" = ( +/obj/machinery/door/airlock{ + id_tag = "bc" + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"amW" = ( +/obj/machinery/button/door{ + id = "bc"; + name = "Privacy Bolts"; + normaldoorcontrol = 1; + pixel_x = 24 + }, +/obj/structure/toilet{ + icon_state = "toilet00"; + dir = 8 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"amX" = ( +/obj/machinery/camera/motion{ + c_tag = "Bridge Escape Pod External"; + dir = 8 + }, +/turf/open/space, +/area/space) +"amY" = ( +/obj/machinery/power/apc{ + dir = 2; + name = "AI Asteroid APC"; + pixel_y = -24 + }, +/obj/structure/cable{ + icon_state = "0-4"; + d2 = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"amZ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"ana" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/camera{ + c_tag = "AI Asteroid Hallway 2"; + dir = 4; + icon_state = "camera" + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"anb" = ( +/obj/machinery/holopad, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"anc" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"and" = ( +/turf/closed/mineral/random/labormineral, +/area/mine/unexplored{ + name = "Cargo Asteroid" + }) +"ane" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Disposals"; + req_access_txt = "12;31" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"anf" = ( +/obj/structure/table, +/obj/item/weapon/storage/box, +/obj/item/weapon/storage/box, +/obj/item/weapon/storage/box, +/obj/item/weapon/storage/box, +/obj/item/weapon/storage/box, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"ang" = ( +/obj/structure/table, +/obj/item/device/destTagger, +/obj/item/stack/packageWrap, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"anh" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"ani" = ( +/obj/machinery/light, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"anj" = ( +/obj/structure/filingcabinet/chestdrawer, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"ank" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"anl" = ( +/obj/machinery/disposal/deliveryChute, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/space) +"anm" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/holopad, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ann" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ano" = ( +/obj/machinery/door/window/brigdoor/westleft{ + id = "Cell 4"; + name = "Cell Door 4"; + req_access_txt = "1" + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"anp" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"anq" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/red/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"anr" = ( +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ans" = ( +/turf/open/floor/plasteel/red{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ant" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/red/corner{ + icon_state = "redcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"anu" = ( +/obj/machinery/door/window/brigdoor/eastleft{ + id = "Cell 8"; + name = "Cell Door 8"; + req_access_txt = "1" + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"anv" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"anw" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/holopad, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"anx" = ( +/obj/effect/decal/remains/human, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless; + icon_plating = "asteroid_dug"; + icon_state = "asteroid_dug"; + name = "ditch" + }, +/area/security/transfer) +"any" = ( +/obj/structure/disposalpipe/sortjunction{ + name = "disposal pipe - Custodials"; + sortType = 22 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"anz" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"anA" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"anB" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"anC" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"anD" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "Captain's Private Quarters APC"; + pixel_x = 23; + pixel_y = 2 + }, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"anE" = ( +/obj/structure/table/wood, +/obj/item/weapon/pinpointer, +/obj/item/weapon/disk/nuclear, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"anF" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + on = 1 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"anG" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/captain, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"anH" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"anI" = ( +/obj/docking_port/stationary/random{ + dir = 1; + id = "pod_asteroid1"; + name = "asteroid" + }, +/turf/open/space, +/area/space) +"anJ" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 2 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"anK" = ( +/obj/machinery/ai_status_display{ + pixel_x = 32 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"anL" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 2 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"anM" = ( +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "Disposals APC"; + pixel_x = 0; + pixel_y = 24 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"anN" = ( +/obj/structure/closet/firecloset/full, +/turf/open/floor/plating/asteroid, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"anO" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"anP" = ( +/obj/machinery/door/airlock/glass_mining{ + name = "Disposals"; + req_access_txt = "31" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"anQ" = ( +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 1 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"anR" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"anS" = ( +/obj/structure/lattice/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/space, +/area/space) +"anT" = ( +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j2"; + dir = 8 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"anU" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"anV" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"anW" = ( +/obj/structure/rack, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"anX" = ( +/obj/structure/rack, +/obj/item/weapon/shovel, +/obj/item/clothing/glasses/material/mining, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"anY" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"anZ" = ( +/obj/structure/closet/crate, +/obj/item/device/flashlight/lantern, +/obj/item/device/flashlight/lantern, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"aoa" = ( +/obj/structure/closet/secure_closet/brig{ + id = "Cell 4"; + name = "Cell 4 Locker" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aob" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aoc" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aod" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aoe" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aof" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aog" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"aoh" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/door/poddoor/preopen{ + id = "prisonbreak"; + name = "emergency prisoner containment blast door" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"aoi" = ( +/obj/machinery/door/airlock/glass_security{ + name = "Brig Control"; + req_access_txt = "3" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plasteel/red{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"aoj" = ( +/obj/machinery/door/airlock/glass_security{ + name = "Brig Control"; + req_access_txt = "3" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/red{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"aok" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/door/poddoor/preopen{ + id = "prisonbreak"; + name = "emergency prisoner containment blast door" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"aol" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aom" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aon" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aoo" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aop" = ( +/obj/structure/closet/secure_closet/brig{ + id = "Cell 8"; + name = "Cell 8 Locker" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aoq" = ( +/obj/structure/closet/firecloset/full, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aor" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aos" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/grille, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aot" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aou" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aov" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aow" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aox" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aoy" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating/asteroid, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aoz" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"aoA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"aoB" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/captain, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/landmark/start/captain, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"aoC" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"aoD" = ( +/obj/machinery/suit_storage_unit/captain, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"aoE" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/holopad, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"aoF" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Captain's Desk"; + departmentType = 5; + name = "Captain RC"; + pixel_x = 0; + pixel_y = 30 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"aoG" = ( +/obj/machinery/door/window/eastright{ + name = "Captain's Desk"; + req_access_txt = "20" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/keycard_auth{ + pixel_y = 24 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"aoH" = ( +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"aoI" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"aoJ" = ( +/obj/structure/table/wood, +/obj/item/weapon/storage/lockbox/medal, +/obj/machinery/camera{ + c_tag = "Captain's Office" + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"aoK" = ( +/obj/structure/table/wood, +/obj/item/weapon/book/manual/wiki/security_space_law, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"aoL" = ( +/obj/structure/displaycase/captain, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"aoM" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/pod_1) +"aoN" = ( +/obj/structure/grille, +/obj/structure/window/shuttle, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/shuttle/pod_1) +"aoO" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"aoP" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"aoQ" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating/asteroid, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aoR" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aoS" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aoT" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "Cargo APC"; + pixel_x = 23; + pixel_y = 2 + }, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aoU" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aoV" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aoW" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aoX" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aoY" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aoZ" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/supply) +"apa" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"apb" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"apc" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"apd" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"ape" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"apf" = ( +/obj/machinery/door/poddoor/shutters{ + id = "MiningWarehouse" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"apg" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"aph" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"api" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"apj" = ( +/obj/structure/closet/crate, +/obj/item/weapon/ore/slag, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"apk" = ( +/obj/machinery/door_timer{ + id = "Cell 4"; + name = "Cell 4"; + pixel_x = -32; + pixel_y = 0 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"apl" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"apm" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "Brig Control APC"; + pixel_x = -25; + pixel_y = 1 + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"apn" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"apo" = ( +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"app" = ( +/obj/structure/rack, +/obj/item/clothing/mask/gas/sechailer{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/clothing/mask/gas/sechailer, +/obj/item/clothing/mask/gas/sechailer{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/machinery/button/door{ + id = "prisonbreak"; + name = "Cell Block Breach Emergency Lockdown"; + pixel_x = 24 + }, +/obj/machinery/button/door{ + id = "frontbrig"; + name = "External Brig Emergency Blastdoors"; + pixel_x = 24; + pixel_y = -8 + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"apq" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"apr" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aps" = ( +/obj/machinery/door_timer{ + id = "Cell 8"; + name = "Cell 8"; + pixel_x = 32; + pixel_y = 0 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"apt" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"apu" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"apv" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"apw" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"apx" = ( +/obj/structure/grille, +/turf/open/floor/plating/asteroid, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"apy" = ( +/obj/structure/dresser, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"apz" = ( +/obj/structure/closet/secure_closet/captains, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"apA" = ( +/obj/machinery/light/small, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"apB" = ( +/obj/machinery/door/airlock/command{ + name = "Captain's Quarters"; + req_access = null; + req_access_txt = "20" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"apC" = ( +/obj/structure/chair/office/dark, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"apD" = ( +/obj/structure/table/wood, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/item/weapon/melee/chainofcommand, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"apE" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"apF" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"apG" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"apH" = ( +/mob/living/simple_animal/pet/fox/Renault, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"apI" = ( +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"apJ" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/computer/shuttle/pod{ + pixel_x = -32; + pixel_y = 0; + possible_destinations = "pod_asteroid1"; + shuttleId = "pod1" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/pod_1) +"apK" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"apL" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"apM" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"apN" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"apO" = ( +/obj/structure/grille/broken, +/turf/open/floor/plating/asteroid, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"apP" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"apQ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"apR" = ( +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/supply) +"apS" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"apT" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 2; + on = 1 + }, +/obj/effect/landmark/xeno_spawn, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"apU" = ( +/obj/structure/closet/crate{ + icon_state = "crateopen"; + opened = 1 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"apV" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"apW" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/ore_box, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"apX" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "Cell Block APC"; + pixel_x = 23; + pixel_y = 2 + }, +/obj/structure/cable/orange, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"apY" = ( +/obj/structure/bed, +/obj/machinery/camera{ + c_tag = "Brig Cell 3"; + dir = 4; + network = list("SS13") + }, +/obj/item/weapon/bedsheet, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"apZ" = ( +/obj/machinery/flasher{ + id = "Cell 3"; + pixel_x = 0; + pixel_y = 24 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aqa" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aqb" = ( +/obj/structure/table, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = 0 + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"aqc" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"aqd" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"aqe" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"aqf" = ( +/obj/structure/table, +/obj/machinery/recharger, +/obj/machinery/newscaster/security_unit{ + pixel_x = 32 + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"aqg" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aqh" = ( +/obj/machinery/flasher{ + id = "Cell 7"; + pixel_x = 0; + pixel_y = 24 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aqi" = ( +/obj/structure/bed, +/obj/machinery/camera{ + c_tag = "Brig Cell 7"; + dir = 9; + icon_state = "camera"; + network = list("SS13") + }, +/obj/item/weapon/bedsheet, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aqj" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aqk" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/item/device/assembly/mousetrap/armed, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aql" = ( +/obj/machinery/power/apc{ + dir = 2; + name = "Dorm APC"; + pixel_y = -24 + }, +/obj/structure/cable/orange, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aqm" = ( +/obj/structure/closet/crate, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aqn" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"aqo" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/blue, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"aqp" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/orange, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"aqq" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = -32; + random_basetype = /obj/structure/sign/poster/official + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"aqr" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/purple, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"aqs" = ( +/obj/machinery/camera/motion{ + c_tag = "Bridge Maintenance Eastl"; + dir = 8 + }, +/turf/open/floor/plating/asteroid, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aqt" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"aqu" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"aqv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"aqw" = ( +/obj/structure/table/wood, +/obj/structure/window/reinforced, +/obj/item/weapon/hand_tele, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"aqx" = ( +/obj/structure/window/reinforced, +/obj/machinery/computer/card, +/obj/item/weapon/card/id/captains_spare, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"aqy" = ( +/obj/structure/window/reinforced, +/obj/machinery/computer/communications, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"aqz" = ( +/obj/structure/table/wood, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/structure/window/reinforced, +/obj/machinery/recharger, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"aqA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"aqB" = ( +/obj/structure/chair/comfy/brown{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"aqC" = ( +/obj/structure/table/wood, +/obj/item/weapon/storage/photo_album, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"aqD" = ( +/obj/structure/table/wood, +/obj/item/toy/figure/captain, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"aqE" = ( +/obj/structure/chair/comfy/brown{ + dir = 8 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"aqF" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/item/weapon/storage/pod{ + pixel_x = -24 + }, +/obj/item/device/radio/intercom{ + pixel_x = 32 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/pod_1) +"aqG" = ( +/obj/structure/girder, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aqH" = ( +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/asteroid, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aqI" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/space, +/area/space) +"aqJ" = ( +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"aqK" = ( +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"aqL" = ( +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/AIsatextFP{ + name = "AI Satellite Service" + }) +"aqM" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/open/space, +/area/space) +"aqN" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/item/device/assembly/mousetrap/armed, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aqO" = ( +/obj/machinery/camera{ + c_tag = "Cargo Western Loading Bay 2"; + dir = 5; + icon_state = "camera"; + network = list("SS13","QM") + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aqP" = ( +/obj/machinery/computer/cargo, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aqQ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aqR" = ( +/obj/machinery/door/airlock/mining{ + req_access_txt = "48" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"aqS" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"aqT" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"aqU" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"aqV" = ( +/obj/machinery/door/window/brigdoor/westleft{ + id = "Cell 3"; + name = "Cell Door 3"; + req_access_txt = "1" + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aqW" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/door/poddoor/preopen{ + id = "prisonbreak"; + name = "emergency prisoner containment blast door" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"aqX" = ( +/obj/machinery/computer/prisoner, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"aqY" = ( +/obj/structure/chair/office/light{ + dir = 8 + }, +/obj/effect/landmark/start/warden, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"aqZ" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/holopad, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"ara" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"arb" = ( +/obj/structure/chair/office/light{ + dir = 4 + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"arc" = ( +/obj/machinery/computer/crew, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"ard" = ( +/obj/machinery/door/window/brigdoor/eastleft{ + id = "Cell 7"; + name = "Cell Door 7"; + req_one_access_txt = "1" + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"are" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"arf" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"arg" = ( +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"arh" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/blue, +/obj/structure/window, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"ari" = ( +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = -32; + random_basetype = /obj/structure/sign/poster/official + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"arj" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/orange, +/obj/structure/window, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"ark" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/purple, +/obj/structure/window, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"arl" = ( +/obj/machinery/camera{ + c_tag = "Fore Asteroid Maintenance APCs 2"; + dir = 5; + icon_state = "camera" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"arm" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"arn" = ( +/obj/machinery/computer/arcade, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"aro" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"arp" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/machinery/holopad, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"arq" = ( +/obj/structure/chair/comfy/brown{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"arr" = ( +/obj/structure/table/wood, +/obj/item/weapon/folder/red{ + pixel_x = 8; + pixel_y = 6 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"ars" = ( +/obj/structure/table/wood, +/obj/item/device/camera, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"art" = ( +/obj/structure/shuttle/engine/propulsion/burst, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/shuttle/pod_1) +"aru" = ( +/obj/machinery/door/airlock/shuttle{ + name = "Escape Pod Airlock" + }, +/obj/docking_port/mobile/pod{ + dir = 1; + id = "pod1"; + name = "escape pod 1"; + port_angle = 90 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/shuttle/pod_1) +"arv" = ( +/obj/structure/closet/crate, +/obj/item/weapon/pickaxe/mini, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"arw" = ( +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/space) +"arx" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"ary" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/engine, +/area/space) +"arz" = ( +/turf/open/floor/engine, +/area/space) +"arA" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/turf/open/floor/engine, +/area/space) +"arB" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/grille, +/turf/open/space, +/area/space) +"arC" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/storage) +"arD" = ( +/obj/machinery/requests_console{ + department = "Cargo Bay"; + departmentType = 2; + name = "Cargo RC"; + pixel_x = -30; + pixel_y = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"arE" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"arF" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"arG" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"arH" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad" + }, +/obj/machinery/door/poddoor{ + id = "QMLoaddoor2"; + name = "supply dock loading door" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"arI" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"arJ" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad" + }, +/obj/machinery/door/poddoor{ + id = "QMLoaddoor2"; + name = "supply dock loading door" + }, +/turf/open/floor/plating, +/area/shuttle/supply) +"arK" = ( +/obj/machinery/door/airlock/shuttle{ + name = "Supply Shuttle Airlock"; + req_access_txt = "31" + }, +/turf/open/floor/plating, +/area/shuttle/supply) +"arL" = ( +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 8; + name = "Supply Dock Airlock"; + req_access_txt = "31" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"arM" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"arN" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"arO" = ( +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"arP" = ( +/obj/machinery/requests_console{ + department = "Cargo Bay"; + departmentType = 2; + name = "Cargo RC"; + pixel_x = 30; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/camera{ + c_tag = "Cargo Eastern Loading Bay 1"; + dir = 8; + icon_state = "camera"; + network = list("SS13","QM") + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"arQ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"arR" = ( +/obj/machinery/button/door{ + id = "MiningWarehouse"; + name = "Mining Warehouse Shutters"; + pixel_x = 0; + pixel_y = -24 + }, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"arS" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"arT" = ( +/obj/structure/closet/secure_closet/brig{ + id = "Cell 3"; + name = "Cell 3 Locker" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"arU" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/holopad, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"arV" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/door/poddoor/preopen{ + id = "prisonbreak"; + name = "emergency prisoner containment blast door" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"arW" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/filingcabinet/chestdrawer/wheeled, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"arX" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"arY" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"arZ" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"asa" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/door/poddoor/preopen{ + id = "prisonbreak"; + name = "emergency prisoner containment blast door" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"asb" = ( +/obj/structure/closet/secure_closet/brig{ + id = "Cell 7"; + name = "Cell 7 Locker" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"asc" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"asd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/machinery/camera{ + c_tag = "Dorm Commons North"; + dir = 4; + icon_state = "camera" + }, +/obj/item/weapon/twohanded/required/kirbyplants{ + icon_state = "plant-22" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"ase" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"asf" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"asg" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = 32 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"ash" = ( +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"asi" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"asj" = ( +/obj/machinery/light_switch{ + pixel_x = -25 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (SOUTHEAST)"; + icon_state = "neutral"; + dir = 6; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"ask" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (SOUTHEAST)"; + icon_state = "neutral"; + dir = 6; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"asl" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (SOUTHWEST)"; + icon_state = "neutral"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"asm" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (SOUTHWEST)"; + icon_state = "neutral"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"asn" = ( +/obj/machinery/airalarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (SOUTHWEST)"; + icon_state = "neutral"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"aso" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/cmo{ + name = "Chief Medical Officer's Private Quarters" + }) +"asp" = ( +/obj/machinery/vending/cigarette{ + extended_inventory = 1 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"asq" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"asr" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"ass" = ( +/obj/structure/table/wood, +/obj/item/weapon/folder/blue, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"ast" = ( +/obj/structure/table/wood, +/obj/item/device/camera_film, +/obj/item/device/camera_film, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"asu" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"asv" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 4; + name = "Command Escape Pod" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"asw" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/chief{ + name = "Chief Engineer's Private Quarters" + }) +"asx" = ( +/obj/structure/closet/crate, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/storage) +"asy" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/storage) +"asz" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/storage) +"asA" = ( +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = -28; + pixel_y = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"asB" = ( +/obj/machinery/conveyor_switch{ + id = "QMLoad" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"asC" = ( +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 8; + name = "Supply Dock Airlock"; + req_access_txt = "31" + }, +/obj/machinery/door/poddoor{ + id = "QMLoaddoor2"; + name = "supply dock loading door" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"asD" = ( +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 4; + name = "Supply Dock Airlock"; + req_access_txt = "31" + }, +/obj/machinery/door/poddoor{ + id = "QMLoaddoor2"; + name = "supply dock loading door" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"asE" = ( +/obj/machinery/door/airlock/shuttle{ + name = "Supply Shuttle Airlock"; + req_access_txt = "31" + }, +/obj/machinery/door/poddoor{ + id = "QMLoaddoor2"; + name = "supply dock loading door" + }, +/turf/open/floor/plating, +/area/shuttle/supply) +"asF" = ( +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 4; + name = "Supply Dock Airlock"; + req_access_txt = "31" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"asG" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"asH" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"asI" = ( +/obj/machinery/door/poddoor/shutters{ + id = "MiningWarehouse" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"asJ" = ( +/obj/machinery/door/airlock/mining{ + req_access_txt = "48" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"asK" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/mining) +"asL" = ( +/obj/structure/grille, +/obj/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/mining) +"asM" = ( +/obj/machinery/iv_drip, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"asN" = ( +/obj/structure/bed/roller, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"asO" = ( +/obj/structure/table, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/clothing/neck/stethoscope, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"asP" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/toxin, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"asQ" = ( +/obj/machinery/door_timer{ + id = "Cell 3"; + name = "Cell 3"; + pixel_x = -32; + pixel_y = 0 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"asR" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange, +/obj/machinery/door/poddoor/preopen{ + id = "prisonbreak"; + name = "emergency prisoner containment blast door" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"asS" = ( +/obj/machinery/computer/secure_data, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"asT" = ( +/obj/structure/chair/office/light{ + dir = 8 + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"asU" = ( +/obj/machinery/computer/security, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"asV" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/holopad, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"asW" = ( +/obj/machinery/door_timer{ + id = "Cell 7"; + name = "Cell 7"; + pixel_x = 32; + pixel_y = 0 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"asX" = ( +/obj/structure/table, +/obj/item/device/flashlight/lamp, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"asY" = ( +/obj/structure/closet, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/sign/poster/random{ + name = "random contraband poster"; + pixel_x = 32; + pixel_y = 0; + random_basetype = /obj/structure/sign/poster/contraband + }, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"asZ" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ata" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"atb" = ( +/obj/structure/chair/stool, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"atc" = ( +/obj/structure/table/wood, +/obj/item/toy/dummy, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"atd" = ( +/obj/structure/table/wood, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"ate" = ( +/obj/structure/chair/stool, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"atf" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"atg" = ( +/obj/machinery/door/airlock{ + name = "Female Sleeping Quarters" + }, +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (EAST)"; + icon_state = "neutral"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"ath" = ( +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"ati" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"atj" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"atk" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/grille, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"atl" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/cmo, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/obj/item/weapon/storage/secure/safe{ + pixel_x = -28 + }, +/obj/effect/landmark/start/chief_medical_officer, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/cmo{ + name = "Chief Medical Officer's Private Quarters" + }) +"atm" = ( +/obj/machinery/light_switch{ + pixel_y = 25 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/cmo{ + name = "Chief Medical Officer's Private Quarters" + }) +"atn" = ( +/obj/structure/table/wood, +/obj/item/device/modular_computer/laptop/preset/civillian, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/cmo{ + name = "Chief Medical Officer's Private Quarters" + }) +"ato" = ( +/obj/structure/table/wood, +/obj/item/weapon/paper_bin, +/obj/item/weapon/stamp/cmo, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/cmo{ + name = "Chief Medical Officer's Private Quarters" + }) +"atp" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/cmo{ + name = "Chief Medical Officer's Private Quarters" + }) +"atq" = ( +/obj/machinery/vending/boozeomat, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"atr" = ( +/obj/machinery/light, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"ats" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"att" = ( +/obj/machinery/light_switch{ + pixel_y = -24 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"atu" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"atv" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"atw" = ( +/obj/structure/table/wood, +/obj/item/weapon/paper_bin, +/obj/item/weapon/stamp/ce, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/chief{ + name = "Chief Engineer's Private Quarters" + }) +"atx" = ( +/obj/structure/table/wood, +/obj/item/device/modular_computer/laptop/preset/civillian, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/chief{ + name = "Chief Engineer's Private Quarters" + }) +"aty" = ( +/obj/machinery/light_switch{ + pixel_y = 25 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/chief{ + name = "Chief Engineer's Private Quarters" + }) +"atz" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/ce, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/obj/structure/sign/poster/contraband/power{ + pixel_x = 32 + }, +/obj/effect/landmark/start/chief_engineer, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/chief{ + name = "Chief Engineer's Private Quarters" + }) +"atA" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "Chief Engineer's Private Quarters APC"; + pixel_x = -23; + pixel_y = 2 + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/chief{ + name = "Chief Engineer's Private Quarters" + }) +"atB" = ( +/obj/structure/sign/poster/random{ + name = "random contraband poster"; + pixel_x = -32; + pixel_y = 0; + random_basetype = /obj/structure/sign/poster/contraband + }, +/obj/structure/closet/crate, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/storage) +"atC" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/storage) +"atD" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/storage) +"atE" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/obj/machinery/newscaster{ + pixel_x = -28 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"atF" = ( +/obj/machinery/holopad, +/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/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"atG" = ( +/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/open/floor/mineral/titanium/blue, +/area/shuttle/supply) +"atH" = ( +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"atI" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/newscaster{ + pixel_x = 28 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"atJ" = ( +/obj/structure/closet/secure_closet/miner, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"atK" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + on = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"atL" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"atM" = ( +/obj/structure/rack, +/obj/item/weapon/shovel, +/obj/item/weapon/pickaxe, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/machinery/button/door{ + id = "MiningWarehouse"; + name = "Mining Warehouse Shutters"; + pixel_x = 0; + pixel_y = 24 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"atN" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"atO" = ( +/obj/structure/table, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/mining) +"atP" = ( +/obj/machinery/computer/shuttle/mining, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/mining) +"atQ" = ( +/obj/structure/table, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/mining) +"atR" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"atS" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"atT" = ( +/obj/structure/closet/crate/freezer/blood, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"atU" = ( +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"atV" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/regular, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"atW" = ( +/obj/structure/bed, +/obj/machinery/camera{ + c_tag = "Brig Cell 2"; + dir = 4; + network = list("SS13") + }, +/obj/item/weapon/bedsheet, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"atX" = ( +/obj/machinery/flasher{ + id = "Cell 2"; + pixel_x = 0; + pixel_y = 24 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"atY" = ( +/obj/structure/table, +/obj/item/key/security, +/obj/item/clothing/glasses/sunglasses, +/obj/item/clothing/ears/earmuffs, +/obj/item/weapon/book/manual/wiki/security_space_law, +/obj/machinery/camera{ + c_tag = "Brig Control Center"; + dir = 4; + icon_state = "camera" + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"atZ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"aua" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"aub" = ( +/obj/structure/table, +/obj/machinery/light, +/obj/machinery/recharger, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"auc" = ( +/obj/machinery/flasher{ + id = "Cell 6"; + pixel_x = 0; + pixel_y = 24 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aud" = ( +/obj/structure/bed, +/obj/machinery/camera{ + c_tag = "Brig Cell 6"; + dir = 9; + icon_state = "camera"; + network = list("SS13") + }, +/obj/item/weapon/bedsheet, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aue" = ( +/obj/structure/table, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"auf" = ( +/obj/structure/chair/stool, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aug" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"auh" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1; + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aui" = ( +/obj/structure/table/wood, +/obj/item/device/paicard, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"auj" = ( +/obj/structure/table/wood, +/obj/item/weapon/storage/firstaid/brute, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"auk" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aul" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"aum" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (NORTHEAST)"; + icon_state = "neutral"; + dir = 5; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"aun" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (NORTHEAST)"; + icon_state = "neutral"; + dir = 5; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"auo" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (NORTHEAST)"; + icon_state = "neutral"; + dir = 5; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"aup" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (NORTHWEST)"; + icon_state = "neutral"; + dir = 9; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"auq" = ( +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "Female Sleeping Quarters APC"; + pixel_x = -25; + pixel_y = 1 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"aur" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/item/device/assembly/mousetrap/armed, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aus" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aut" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1 + }, +/obj/machinery/keycard_auth{ + pixel_x = -24 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/cmo{ + name = "Chief Medical Officer's Private Quarters" + }) +"auu" = ( +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/cmo{ + name = "Chief Medical Officer's Private Quarters" + }) +"auv" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/cmo{ + name = "Chief Medical Officer's Private Quarters" + }) +"auw" = ( +/obj/structure/table/wood, +/obj/item/device/flashlight/lamp, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/cmo{ + name = "Chief Medical Officer's Private Quarters" + }) +"aux" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"auy" = ( +/obj/machinery/door/airlock/command{ + name = "Captain's Office"; + req_access = null; + req_access_txt = "20" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"auz" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"auA" = ( +/obj/structure/table/wood, +/obj/item/device/flashlight/lamp, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/chief{ + name = "Chief Engineer's Private Quarters" + }) +"auB" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/chief{ + name = "Chief Engineer's Private Quarters" + }) +"auC" = ( +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/chief{ + name = "Chief Engineer's Private Quarters" + }) +"auD" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1 + }, +/obj/item/weapon/storage/secure/safe{ + pixel_x = 32 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/chief{ + name = "Chief Engineer's Private Quarters" + }) +"auE" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/item/device/assembly/mousetrap/armed, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"auF" = ( +/obj/structure/closet/crate/medical, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/storage) +"auG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/storage) +"auH" = ( +/obj/machinery/door/poddoor/shutters{ + id = "CargoWarehouse" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/storage) +"auI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"auJ" = ( +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 8; + name = "Supply Dock Airlock"; + req_access_txt = "31" + }, +/obj/machinery/door/poddoor{ + id = "QMLoaddoor"; + name = "supply dock loading door" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"auK" = ( +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 4; + name = "Supply Dock Airlock"; + req_access_txt = "31" + }, +/obj/machinery/door/poddoor{ + id = "QMLoaddoor"; + name = "supply dock loading door" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"auL" = ( +/obj/machinery/door/airlock/shuttle{ + name = "Supply Shuttle Airlock"; + req_access_txt = "31" + }, +/obj/machinery/door/poddoor{ + id = "QMLoaddoor"; + name = "supply dock loading door" + }, +/turf/open/floor/plating, +/area/shuttle/supply) +"auM" = ( +/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 = "Cargo Bay"; + width = 12 + }, +/turf/open/floor/plating, +/area/shuttle/supply) +"auN" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"auO" = ( +/obj/effect/landmark/start/shaft_miner, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"auP" = ( +/obj/machinery/computer/security/mining{ + network = list("MINE","AuxBase") + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"auQ" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"auR" = ( +/obj/structure/closet/crate, +/obj/item/weapon/ore/silver, +/obj/item/weapon/ore/silver, +/obj/item/weapon/ore/silver, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"auS" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"auT" = ( +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/mining) +"auU" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/mining) +"auV" = ( +/obj/machinery/gulag_teleporter, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"auW" = ( +/obj/machinery/computer/gulag_teleporter_computer, +/obj/machinery/camera{ + c_tag = "Labor Shuttle Dock North" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"auX" = ( +/obj/machinery/computer/security{ + name = "Labor Camp Monitoring"; + network = list("Labor") + }, +/obj/structure/sign/securearea{ + pixel_x = 32; + pixel_y = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"auY" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/asteroid/line, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"auZ" = ( +/obj/effect/turf_decal/stripes/asteroid/line, +/turf/open/floor/plating/asteroid, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ava" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"avb" = ( +/obj/machinery/door/window/brigdoor/westleft{ + id = "Cell 2"; + name = "Cell Door 2"; + req_access_txt = "1" + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"avc" = ( +/obj/structure/closet/secure_closet/warden{ + pixel_x = 0 + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = -28; + pixel_y = 0 + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"avd" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"ave" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24 + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"avf" = ( +/obj/machinery/door/window/brigdoor/eastleft{ + id = "Cell 6"; + name = "Cell Door 6"; + req_access_txt = "1" + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"avg" = ( +/obj/structure/rack, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"avh" = ( +/obj/effect/turf_decal/stripes/asteroid/line, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"avi" = ( +/obj/structure/girder, +/obj/item/stack/sheet/metal, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"avj" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"avk" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Fore Asteroid Maintenance Access"; + req_access_txt = "12" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"avl" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"avm" = ( +/obj/structure/table/wood, +/obj/item/weapon/storage/pill_bottle/dice, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"avn" = ( +/obj/structure/table/wood, +/obj/item/device/instrument/guitar, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"avo" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = 32; + random_basetype = /obj/structure/sign/poster/official + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"avp" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/yellow, +/obj/structure/window{ + tag = "icon-window (NORTH)"; + icon_state = "window"; + dir = 1 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"avq" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/green, +/obj/structure/window{ + tag = "icon-window (NORTH)"; + icon_state = "window"; + dir = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"avr" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/red, +/obj/structure/window{ + tag = "icon-window (NORTH)"; + icon_state = "window"; + dir = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"avs" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Chief Medical Officer's Desk"; + departmentType = 5; + name = "Chief Medical Officer RC"; + pixel_x = -30; + pixel_y = 0 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/cmo{ + name = "Chief Medical Officer's Private Quarters" + }) +"avt" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/cmo{ + name = "Chief Medical Officer's Private Quarters" + }) +"avu" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/cmo{ + name = "Chief Medical Officer's Private Quarters" + }) +"avv" = ( +/obj/structure/table/wood, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTH)"; + icon_state = "darkblue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"avw" = ( +/obj/structure/table/wood, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/obj/item/weapon/storage/fancy/donut_box, +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTH)"; + icon_state = "darkblue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"avx" = ( +/obj/structure/table/wood, +/obj/machinery/vending/wallmed{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTH)"; + icon_state = "darkblue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"avy" = ( +/obj/structure/noticeboard{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/darkblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5; + tag = "icon-darkblue (NORTHEAST)" + }, +/area/bridge) +"avz" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/door/window{ + dir = 8; + icon_state = "right"; + name = "Bridge Desk"; + opacity = 1; + req_access_txt = "0"; + req_one_access_txt = "19;41"; + tag = "icon-right (WEST)" + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"avA" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"avB" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"avC" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/button/door{ + id = "bridge"; + name = "Bridge Lockdown"; + pixel_y = 24; + req_one_access_txt = "19;14" + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"avD" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/door/window/eastright{ + name = "Bridge Desk"; + req_access_txt = "0"; + req_one_access_txt = "19;41" + }, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"avE" = ( +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Bridge"; + departmentType = 5; + name = "Bridge RC"; + pixel_y = 30 + }, +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTHWEST)"; + dir = 9 + }, +/area/bridge) +"avF" = ( +/obj/machinery/camera{ + c_tag = "Bridge Main 1" + }, +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTH)"; + icon_state = "darkblue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"avG" = ( +/obj/structure/sign/pods{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTH)"; + icon_state = "darkblue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"avH" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTH)"; + icon_state = "darkblue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"avI" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/chief{ + name = "Chief Engineer's Private Quarters" + }) +"avJ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/chief{ + name = "Chief Engineer's Private Quarters" + }) +"avK" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Chief Engineer's Desk"; + departmentType = 3; + name = "Chief Engineer RC"; + pixel_x = 30; + pixel_y = 0 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/chief{ + name = "Chief Engineer's Private Quarters" + }) +"avL" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "Cargo Warehouse APC"; + pixel_x = 23; + pixel_y = 2 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/storage) +"avM" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/storage) +"avN" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/storage) +"avO" = ( +/obj/machinery/door/poddoor/shutters{ + id = "CargoWarehouse" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/storage) +"avP" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"avQ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"avR" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"avS" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"avT" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad" + }, +/obj/machinery/door/poddoor{ + id = "QMLoaddoor"; + name = "supply dock loading door" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"avU" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad" + }, +/obj/machinery/door/poddoor{ + id = "QMLoaddoor"; + name = "supply dock loading door" + }, +/turf/open/floor/plating, +/area/shuttle/supply) +"avV" = ( +/obj/structure/closet/secure_closet/miner, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"avW" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"avX" = ( +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"avY" = ( +/obj/machinery/door/airlock/glass_mining{ + cyclelinkeddir = 8; + name = "Mining Dock"; + req_access_txt = "48" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"avZ" = ( +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 4; + name = "Mining Dock Airlock"; + req_access = null; + req_access_txt = "48"; + shuttledocked = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"awa" = ( +/obj/machinery/door/airlock/titanium{ + name = "Mining Shuttle Airlock"; + req_access_txt = "0" + }, +/turf/open/floor/plating, +/area/shuttle/mining) +"awb" = ( +/obj/docking_port/mobile{ + dir = 8; + dwidth = 3; + height = 5; + id = "mining"; + name = "mining shuttle"; + port_angle = 90; + width = 7 + }, +/obj/docking_port/stationary{ + dir = 8; + dwidth = 3; + height = 5; + id = "mining_home"; + name = "mining shuttle bay"; + width = 7 + }, +/obj/machinery/door/airlock/titanium{ + name = "Mining Shuttle Airlock"; + req_access_txt = "0" + }, +/turf/open/floor/plating, +/area/shuttle/mining) +"awc" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/labor) +"awd" = ( +/obj/structure/grille, +/obj/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/labor) +"awe" = ( +/obj/machinery/disposal/deliveryChute{ + tag = "icon-intake (NORTH)"; + icon_state = "intake"; + dir = 1 + }, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/plating/airless, +/area/space) +"awf" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"awg" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"awh" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/prisoner, +/obj/machinery/airalarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"awi" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/maintenance{ + name = "Fore Asteroid Maintenance Access"; + req_access_txt = "12" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"awj" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Fore Asteroid Maintenance Access"; + req_access_txt = "12" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"awk" = ( +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/obj/structure/closet/wardrobe/red, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"awl" = ( +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"awm" = ( +/obj/structure/sign/bluecross_2{ + pixel_x = 32; + pixel_y = 32 + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"awn" = ( +/obj/structure/closet/secure_closet/security/sec, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"awo" = ( +/obj/structure/closet/secure_closet/brig{ + id = "Cell 2"; + name = "Cell 2 Locker" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"awp" = ( +/obj/machinery/door/airlock/glass_security{ + name = "Brig Control"; + req_access_txt = "3" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/red{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"awq" = ( +/obj/machinery/door/airlock/glass_security{ + name = "Brig Control"; + req_access_txt = "3" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/red{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"awr" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/door/poddoor/preopen{ + id = "prisonbreak"; + name = "emergency prisoner containment blast door" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"aws" = ( +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"awt" = ( +/obj/structure/closet/secure_closet/brig{ + id = "Cell 6"; + name = "Cell 6 Locker" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"awu" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Fore Asteroid Maintenance Access"; + req_access_txt = "12" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"awv" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aww" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"awx" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"awy" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"awz" = ( +/obj/machinery/light/small, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"awA" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/yellow, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"awB" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/green, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"awC" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/red, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"awD" = ( +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 2; + name = "Male Sleeping Quarters APC"; + pixel_y = -24 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"awE" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"awF" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "Chief Medical Officer's Private Quarters APC"; + pixel_x = 23; + pixel_y = 2 + }, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/cmo{ + name = "Chief Medical Officer's Private Quarters" + }) +"awG" = ( +/obj/structure/dresser, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/cmo{ + name = "Chief Medical Officer's Private Quarters" + }) +"awH" = ( +/obj/structure/closet/secure_closet/CMO, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/cmo{ + name = "Chief Medical Officer's Private Quarters" + }) +"awI" = ( +/obj/machinery/light/small, +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/cmo{ + name = "Chief Medical Officer's Private Quarters" + }) +"awJ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/cmo{ + name = "Chief Medical Officer's Private Quarters" + }) +"awK" = ( +/obj/machinery/door/airlock/medical{ + name = "Chief Medical Officer's Personal Quarters"; + req_access_txt = "40" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/cmo{ + name = "Chief Medical Officer's Private Quarters" + }) +"awL" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"awM" = ( +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"awN" = ( +/turf/open/floor/plasteel/darkblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 4; + tag = "icon-darkblue (EAST)" + }, +/area/bridge) +"awO" = ( +/obj/structure/table/wood, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/item/device/aicard, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"awP" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"awQ" = ( +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"awR" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"awS" = ( +/obj/structure/table/wood, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/item/weapon/folder, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"awT" = ( +/turf/open/floor/plasteel/darkblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 8; + tag = "icon-darkblue (WEST)" + }, +/area/bridge) +"awU" = ( +/obj/machinery/door/airlock/engineering{ + name = "Chief Engineer's Personal Quarters"; + req_access_txt = "56" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/chief{ + name = "Chief Engineer's Private Quarters" + }) +"awV" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/chief{ + name = "Chief Engineer's Private Quarters" + }) +"awW" = ( +/obj/machinery/light/small, +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/chief{ + name = "Chief Engineer's Private Quarters" + }) +"awX" = ( +/obj/structure/closet/secure_closet/engineering_chief, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/chief{ + name = "Chief Engineer's Private Quarters" + }) +"awY" = ( +/obj/structure/dresser, +/obj/machinery/keycard_auth{ + pixel_x = 24 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/chief{ + name = "Chief Engineer's Private Quarters" + }) +"awZ" = ( +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating/asteroid, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"axa" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/machinery/camera{ + c_tag = "Core-Command-Cargo Bridge 4"; + dir = 8; + network = list("SS13") + }, +/turf/open/floor/engine, +/area/space) +"axb" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/storage) +"axc" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/conveyor_switch{ + id = "QMLoad" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"axd" = ( +/obj/machinery/mineral/equipment_vendor, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"axe" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"axf" = ( +/obj/machinery/computer/shuttle/labor, +/obj/structure/reagent_dispensers/peppertank{ + pixel_x = -31; + pixel_y = 0 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/labor) +"axg" = ( +/obj/structure/chair/office/dark{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/labor) +"axh" = ( +/obj/structure/table, +/obj/item/weapon/folder/red{ + pixel_x = 8; + pixel_y = 6 + }, +/obj/item/weapon/restraints/handcuffs, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/labor) +"axi" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/security/processing) +"axj" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating, +/area/security/processing) +"axk" = ( +/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; + pixel_y = 32 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"axl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"axm" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"axn" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"axo" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"axp" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"axq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"axr" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"axs" = ( +/obj/structure/closet/l3closet/scientist, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"axt" = ( +/obj/structure/closet/secure_closet/security/sec, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"axu" = ( +/obj/machinery/door_timer{ + id = "Cell 2"; + name = "Cell 2"; + pixel_x = -32; + pixel_y = 0 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"axv" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"axw" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"axx" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/landmark/lightsout, +/turf/open/floor/plasteel/red/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"axy" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/turf/open/floor/plasteel/red{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"axz" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"axA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/red/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"axB" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (NORTH)"; + icon_state = "redcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"axC" = ( +/obj/machinery/door_timer{ + id = "Cell 6"; + name = "Cell 6"; + pixel_x = 32; + pixel_y = 0 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"axD" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/closet/crate, +/turf/open/floor/plating/asteroid, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"axE" = ( +/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 1 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"axF" = ( +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"axG" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"axH" = ( +/obj/machinery/holopad, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"axI" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"axJ" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/machinery/computer/mecha, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"axK" = ( +/obj/structure/chair/comfy/brown, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"axL" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/structure/window/reinforced, +/obj/machinery/computer/robotics, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"axM" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/chief{ + name = "Chief Engineer's Private Quarters" + }) +"axN" = ( +/obj/structure/closet/crate/medical, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/storage) +"axO" = ( +/obj/structure/closet/crate/freezer, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/storage) +"axP" = ( +/obj/machinery/button/door{ + id = "CargoWarehouse"; + name = "Cargo Warehouse Shutters"; + pixel_x = 24 + }, +/obj/structure/closet/crate/freezer, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/storage) +"axQ" = ( +/obj/machinery/button/door{ + id = "CargoWarehouse"; + name = "Cargo Warehouse Shutters"; + pixel_x = -24 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"axR" = ( +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + dir = 8; + freq = 1400; + location = "QM #1" + }, +/mob/living/simple_animal/bot/mulebot{ + beacon_freq = 1400; + home_destination = "QM #1"; + suffix = "#1" + }, +/turf/open/floor/plasteel/bot{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"axS" = ( +/turf/open/floor/mineral/titanium/blue, +/turf/closed/wall/mineral/titanium/interior, +/area/shuttle/supply) +"axT" = ( +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=4"; + dir = 4; + freq = 1400; + location = "QM #4" + }, +/mob/living/simple_animal/bot/mulebot{ + home_destination = "QM #4"; + suffix = "#2" + }, +/turf/open/floor/plasteel/bot{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"axU" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"axV" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/brown/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"axW" = ( +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -23; + pixel_y = 0 + }, +/turf/open/floor/plasteel/brown/corner{ + tag = "icon-browncorner (WEST)"; + icon_state = "browncorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"axX" = ( +/obj/machinery/computer/shuttle/mining, +/obj/machinery/camera{ + c_tag = "Mining Bay"; + dir = 8; + icon_state = "camera"; + network = list("SS13","QM"); + tag = "icon-camera (WEST)" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"axY" = ( +/obj/structure/closet/crate, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/mining) +"axZ" = ( +/obj/structure/shuttle/engine/heater, +/turf/open/floor/plating, +/area/shuttle/mining) +"aya" = ( +/obj/structure/ore_box, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/mining) +"ayb" = ( +/turf/open/floor/mineral/plastitanium, +/area/shuttle/labor) +"ayc" = ( +/obj/machinery/button/flasher{ + id = "gulagshuttleflasher"; + name = "Flash Control"; + pixel_x = 0; + pixel_y = -26; + req_access_txt = "1" + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/labor) +"ayd" = ( +/obj/machinery/mineral/labor_claim_console{ + machinedir = 2; + pixel_x = 30; + pixel_y = 30 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/labor) +"aye" = ( +/obj/machinery/door/airlock/titanium{ + name = "Labor Shuttle Airlock"; + req_access_txt = "2" + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/labor) +"ayf" = ( +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 4; + name = "Labor Camp Shuttle Airlock"; + req_access_txt = "2"; + shuttledocked = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/security/processing) +"ayg" = ( +/turf/open/floor/plating, +/area/security/processing) +"ayh" = ( +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 8; + name = "Labor Camp Shuttle Airlock"; + req_access_txt = "2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"ayi" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"ayj" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"ayk" = ( +/obj/machinery/door/airlock/security{ + name = "Labor Shuttle"; + req_access = null; + req_access_txt = "2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"ayl" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aym" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ayn" = ( +/obj/structure/closet/bombcloset, +/obj/structure/sign/map/left/ceres{ + pixel_x = -32 + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"ayo" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + on = 1 + }, +/obj/effect/landmark/start/security_officer, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"ayp" = ( +/obj/structure/bed, +/obj/machinery/camera{ + c_tag = "Brig Cell 1"; + dir = 4; + network = list("SS13") + }, +/obj/item/weapon/bedsheet, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ayq" = ( +/obj/machinery/flasher{ + id = "Cell 1"; + pixel_x = 0; + pixel_y = 24 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ayr" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ays" = ( +/obj/structure/cable/orange{ + 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/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ayt" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ayu" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/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/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/holopad, +/turf/open/floor/plasteel/red/side{ + tag = "icon-red (NORTHEAST)"; + icon_state = "red"; + dir = 5; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ayv" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/red/side{ + tag = "icon-red (NORTHWEST)"; + icon_state = "red"; + dir = 9; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ayw" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ayx" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/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/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ayy" = ( +/obj/machinery/flasher{ + id = "Cell 5"; + pixel_x = 0; + pixel_y = 24 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ayz" = ( +/obj/structure/bed, +/obj/machinery/camera{ + c_tag = "Brig Cell 5"; + dir = 9; + icon_state = "camera"; + network = list("SS13"); + tag = "icon-camera (NORTHWEST)" + }, +/obj/item/weapon/bedsheet, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ayA" = ( +/obj/machinery/power/apc{ + dir = 2; + name = "Vault APC"; + pixel_y = -24 + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"ayB" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light/small, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ayC" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ayD" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ayE" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Dorm SMES Access"; + req_access_txt = "10;11;12" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ayF" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ayG" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"ayH" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"ayI" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/landmark/lightsout, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"ayJ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"ayK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/item/weapon/twohanded/required/kirbyplants{ + icon_state = "plant-22" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"ayL" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/machinery/vending/clothing, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"ayM" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"ayN" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/blue, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"ayO" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/orange, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"ayP" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/purple, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"ayQ" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/hos{ + name = "Head of Security's Private Quarters" + }) +"ayR" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/hos, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/obj/item/weapon/storage/secure/safe{ + pixel_x = -28 + }, +/obj/effect/landmark/start/head_of_security, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/hos{ + name = "Head of Security's Private Quarters" + }) +"ayS" = ( +/obj/machinery/light_switch{ + pixel_y = 25 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/hos{ + name = "Head of Security's Private Quarters" + }) +"ayT" = ( +/obj/structure/table/wood, +/obj/item/device/modular_computer/laptop/preset/civillian, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/hos{ + name = "Head of Security's Private Quarters" + }) +"ayU" = ( +/obj/structure/table/wood, +/obj/item/weapon/paper_bin, +/obj/item/weapon/stamp/hos, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/hos{ + name = "Head of Security's Private Quarters" + }) +"ayV" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/hos{ + name = "Head of Security's Private Quarters" + }) +"ayW" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"ayX" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"ayY" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"ayZ" = ( +/obj/item/weapon/twohanded/required/kirbyplants{ + tag = "icon-plant-21"; + icon_state = "plant-21" + }, +/turf/open/floor/plasteel/darkblue{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aza" = ( +/obj/structure/window/reinforced, +/obj/machinery/computer/card, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"azb" = ( +/obj/structure/window/reinforced, +/obj/machinery/computer/communications, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"azc" = ( +/obj/structure/window/reinforced, +/obj/machinery/computer/security, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"azd" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aze" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"azf" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"azg" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/hor{ + name = "Research Director's Private Quarters" + }) +"azh" = ( +/obj/structure/table/wood, +/obj/item/weapon/paper_bin, +/obj/item/weapon/stamp/rd, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/hor{ + name = "Research Director's Private Quarters" + }) +"azi" = ( +/obj/structure/table/wood, +/obj/item/device/modular_computer/laptop/preset/civillian, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/hor{ + name = "Research Director's Private Quarters" + }) +"azj" = ( +/obj/machinery/light_switch{ + pixel_y = 25 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/hor{ + name = "Research Director's Private Quarters" + }) +"azk" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/rd, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/obj/structure/sign/poster/contraband/lamarr{ + pixel_x = 32 + }, +/obj/effect/landmark/start/research_director, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/hor{ + name = "Research Director's Private Quarters" + }) +"azl" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/hor{ + name = "Research Director's Private Quarters" + }) +"azm" = ( +/obj/structure/rack, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"azn" = ( +/obj/structure/closet, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"azo" = ( +/obj/structure/table, +/obj/item/weapon/storage/toolbox/mechanical, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"azp" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "Fore Asteroid Maintenance APC"; + pixel_x = -23; + pixel_y = 2 + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"azq" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"azr" = ( +/obj/structure/closet/crate/internals, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/storage) +"azs" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 2; + on = 1 + }, +/obj/machinery/camera{ + c_tag = "Cargo Western Loading Bay 1"; + dir = 5; + icon_state = "camera"; + network = list("SS13","QM") + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"azt" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"azu" = ( +/obj/item/weapon/paper{ + info = "Due to complications during station constructions, the associated navbeacons for machinery has not been fully installed. Please use the delievery chute system for package delievery until further notice."; + name = "MULEBOT Notice" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"azv" = ( +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + dir = 8; + freq = 1400; + location = "QM #2" + }, +/turf/open/floor/plasteel/bot{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"azw" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/shuttle/engine/heater, +/turf/open/floor/plating/airless, +/area/shuttle/supply) +"azx" = ( +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=4"; + dir = 4; + freq = 1400; + location = "QM #5" + }, +/turf/open/floor/plasteel/bot{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"azy" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"azz" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"azA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"azB" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"azC" = ( +/obj/machinery/door/airlock/mining{ + req_access_txt = "48" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"azD" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"azE" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"azF" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"azG" = ( +/obj/structure/table, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"azH" = ( +/obj/structure/shuttle/engine/propulsion/burst, +/obj/structure/window/reinforced{ + dir = 1; + layer = 2.9 + }, +/turf/open/floor/plating/airless, +/area/shuttle/mining) +"azI" = ( +/obj/machinery/door/airlock/titanium{ + name = "Labor Shuttle Airlock"; + req_access_txt = "2" + }, +/turf/open/floor/plasteel/black, +/area/shuttle/labor) +"azJ" = ( +/obj/machinery/mineral/stacking_machine/laborstacker{ + input_dir = 2; + output_dir = 1 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/labor) +"azK" = ( +/obj/machinery/computer/shuttle/labor, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"azL" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"azM" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"azN" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"azO" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"azP" = ( +/obj/machinery/vending/security, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"azQ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/landmark/start/security_officer, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"azR" = ( +/obj/machinery/holopad, +/obj/effect/landmark/start/security_officer, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"azS" = ( +/obj/machinery/door/window/brigdoor/westleft{ + id = "Cell 1"; + name = "Cell Door 1"; + req_access_txt = "1" + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"azT" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"azU" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"azV" = ( +/obj/machinery/door/airlock/glass_large{ + name = "Cell Block"; + req_access_txt = "0"; + req_one_access_txt = "38;2" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (NORTH)"; + icon_state = "redcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"azW" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"azX" = ( +/obj/machinery/door/window/brigdoor/eastleft{ + id = "Cell 5"; + name = "Cell Door 5"; + req_access_txt = "1" + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"azY" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"azZ" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aAa" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 4 + }, +/obj/item/device/assembly/mousetrap/armed, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aAb" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Dorm SMES Access"; + req_access_txt = "10;11;12" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aAc" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aAd" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/power/apc{ + dir = 4; + name = "Fore Maintenance APC"; + pixel_x = 23; + pixel_y = 2 + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aAe" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/sign/map/left/ceres{ + pixel_x = -32 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aAf" = ( +/obj/structure/table/wood, +/obj/item/weapon/storage/crayons, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aAg" = ( +/obj/structure/table/wood, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/item/weapon/coin/silver, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aAh" = ( +/obj/structure/chair/stool, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aAi" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aAj" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aAk" = ( +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"aAl" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/blue, +/obj/structure/window, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"aAm" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/orange, +/obj/structure/window, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"aAn" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/purple, +/obj/structure/window, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"aAo" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1 + }, +/obj/structure/sign/poster/contraband/fun_police{ + pixel_x = -32 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/hos{ + name = "Head of Security's Private Quarters" + }) +"aAp" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/hos{ + name = "Head of Security's Private Quarters" + }) +"aAq" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/hos{ + name = "Head of Security's Private Quarters" + }) +"aAr" = ( +/obj/structure/table/wood, +/obj/item/device/flashlight/lamp, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/hos{ + name = "Head of Security's Private Quarters" + }) +"aAs" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/hos{ + name = "Head of Security's Private Quarters" + }) +"aAt" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/structure/sign/map/left/ceres{ + pixel_x = -32 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aAu" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/landmark/lightsout, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aAv" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTH)"; + icon_state = "darkblue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aAw" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTH)"; + icon_state = "darkblue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aAx" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/holopad, +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTH)"; + icon_state = "darkblue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aAy" = ( +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTH)"; + icon_state = "darkblue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aAz" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aAA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/hor{ + name = "Research Director's Private Quarters" + }) +"aAB" = ( +/obj/structure/table/wood, +/obj/item/device/flashlight/lamp, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/hor{ + name = "Research Director's Private Quarters" + }) +"aAC" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/hor{ + name = "Research Director's Private Quarters" + }) +"aAD" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/hor{ + name = "Research Director's Private Quarters" + }) +"aAE" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/obj/item/weapon/storage/secure/safe{ + pixel_x = 32 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/hor{ + name = "Research Director's Private Quarters" + }) +"aAF" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "Research Director's Private Quarters APC"; + pixel_x = -23; + pixel_y = 2 + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/hor{ + name = "Research Director's Private Quarters" + }) +"aAG" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aAH" = ( +/obj/machinery/light/small, +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/storage) +"aAI" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/storage) +"aAJ" = ( +/obj/machinery/door/airlock/engineering{ + name = "Cargo Warehouse"; + req_access_txt = "31" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/storage) +"aAK" = ( +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aAL" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aAM" = ( +/obj/machinery/light, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aAN" = ( +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + dir = 8; + freq = 1400; + location = "QM #3" + }, +/mob/living/simple_animal/bot/mulebot{ + home_destination = "QM #3"; + suffix = "#2" + }, +/turf/open/floor/plasteel/bot{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aAO" = ( +/obj/structure/shuttle/engine/propulsion{ + icon_state = "burst_l" + }, +/turf/open/floor/plating/airless, +/area/shuttle/supply) +"aAP" = ( +/obj/structure/shuttle/engine/propulsion, +/turf/open/floor/plating/airless, +/area/shuttle/supply) +"aAQ" = ( +/obj/structure/shuttle/engine/propulsion{ + icon_state = "burst_r" + }, +/turf/open/floor/plating/airless, +/area/shuttle/supply) +"aAR" = ( +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=4"; + dir = 4; + freq = 1400; + location = "QM #6" + }, +/mob/living/simple_animal/bot/mulebot{ + home_destination = "QM #6"; + suffix = "#2" + }, +/turf/open/floor/plasteel/bot{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aAS" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/camera{ + c_tag = "Cargo Eastern Loading Bay 2"; + dir = 8; + icon_state = "camera"; + network = list("SS13","QM") + }, +/turf/open/floor/plasteel/brown/corner{ + tag = "icon-browncorner (EAST)"; + icon_state = "browncorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aAT" = ( +/obj/machinery/disposal/bin, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = -28; + pixel_y = 0 + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/plasteel/brown/corner{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + dir = 1; + tag = "icon-browncorner (NORTH)" + }, +/area/quartermaster/miningdock) +"aAU" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1; + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"aAV" = ( +/obj/structure/table, +/obj/item/weapon/folder, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"aAW" = ( +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/labor) +"aAX" = ( +/obj/machinery/mineral/labor_claim_console{ + machinedir = 1; + pixel_x = 30; + pixel_y = 0 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/labor) +"aAY" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/airless, +/area/space) +"aAZ" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"aBa" = ( +/obj/machinery/door/airlock/glass_security{ + name = "Prisoner Processing"; + req_access_txt = "2" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"aBb" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aBc" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "Security Equipment APC"; + pixel_x = 23; + pixel_y = 2 + }, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"aBd" = ( +/obj/structure/table, +/obj/machinery/recharger, +/obj/machinery/camera{ + c_tag = "Security Equipment Room"; + dir = 4; + icon_state = "camera" + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"aBe" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/holopad, +/obj/effect/landmark/start/security_officer, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"aBf" = ( +/obj/structure/closet/secure_closet/brig{ + id = "Cell 1"; + name = "Cell 1 Locker" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aBg" = ( +/obj/machinery/door_timer{ + id = "Cell 1"; + name = "Cell 1"; + pixel_y = -32 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Brig Cells South 2"; + dir = 1; + icon_state = "camera"; + network = list("SS13") + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aBh" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aBi" = ( +/obj/machinery/light, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aBj" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "prisonbreak"; + name = "emergency prisoner containment blast door" + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aBk" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (NORTH)"; + icon_state = "redcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aBl" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aBm" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "prisonbreak"; + name = "emergency prisoner containment blast door" + }, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aBn" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aBo" = ( +/obj/machinery/door_timer{ + id = "Cell 5"; + name = "Cell 5"; + pixel_y = -32 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Brig Cells South 1"; + dir = 1; + icon_state = "camera"; + network = list("SS13") + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aBp" = ( +/obj/structure/closet/secure_closet/brig{ + id = "Cell 5"; + name = "Cell 5 Locker" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aBq" = ( +/obj/structure/closet/lawcloset, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aBr" = ( +/obj/structure/chair, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aBs" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aBt" = ( +/obj/structure/chair/comfy/brown, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aBu" = ( +/obj/structure/chair/comfy/black, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aBv" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/camera{ + c_tag = "Courtroom Main North" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aBw" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aBx" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aBy" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aBz" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aBA" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aBB" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/camera{ + c_tag = "Dorm SMES"; + dir = 6; + icon_state = "camera" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aBC" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aBD" = ( +/obj/structure/table/wood, +/obj/item/toy/cards/deck, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aBE" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aBF" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aBG" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"aBH" = ( +/obj/machinery/light_switch{ + pixel_x = -25 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/side{ + icon_state = "neutral"; + dir = 6; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"aBI" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/side{ + icon_state = "neutral"; + dir = 6; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"aBJ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/side{ + icon_state = "neutral"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"aBK" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/turf/open/floor/plasteel/neutral/side{ + icon_state = "neutral"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"aBL" = ( +/obj/machinery/airalarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/neutral/side{ + icon_state = "neutral"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"aBM" = ( +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Head of Security's Desk"; + departmentType = 5; + name = "Head of Security RC"; + pixel_x = -30; + pixel_y = 0 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/hos{ + name = "Head of Security's Private Quarters" + }) +"aBN" = ( +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/hos{ + name = "Head of Security's Private Quarters" + }) +"aBO" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/chair/office/light, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aBP" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aBQ" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aBR" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aBS" = ( +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/hor{ + name = "Research Director's Private Quarters" + }) +"aBT" = ( +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Research Director's Desk"; + departmentType = 5; + name = "Research Director RC"; + pixel_x = 30; + pixel_y = 0 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/hor{ + name = "Research Director's Private Quarters" + }) +"aBU" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/camera/motion{ + c_tag = "Bridge Mainteance East"; + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aBV" = ( +/obj/structure/closet/crate, +/obj/item/weapon/coin/silver, +/obj/item/weapon/coin/silver, +/turf/open/floor/plating/asteroid, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aBW" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aBX" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aBY" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aBZ" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aCa" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/flasher{ + id = "gulagshuttleflasher"; + pixel_x = 25 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/labor) +"aCb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"aCc" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aCd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aCe" = ( +/obj/structure/table, +/obj/machinery/recharger, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"aCf" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "prisonbreak"; + name = "emergency prisoner containment blast door" + }, +/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/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aCg" = ( +/obj/structure/sign/map/left/ceres{ + pixel_x = -32 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aCh" = ( +/obj/structure/table/wood, +/obj/item/device/taperecorder/empty, +/obj/item/device/tape/random, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aCi" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aCj" = ( +/obj/structure/table/wood, +/obj/item/weapon/folder/blue{ + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aCk" = ( +/obj/structure/table/wood, +/obj/item/weapon/gavelblock, +/obj/item/weapon/gavelhammer, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aCl" = ( +/obj/structure/table/wood, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aCm" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aCn" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/door/window/southleft{ + req_access_txt = "1" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aCo" = ( +/obj/structure/window/reinforced, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aCp" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aCq" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/structure/rack, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aCr" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aCs" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aCt" = ( +/obj/structure/chair/stool, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aCu" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aCv" = ( +/obj/machinery/door/airlock{ + name = "Male Sleeping Quarters" + }, +/turf/open/floor/plasteel/neutral/side{ + icon_state = "neutral"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"aCw" = ( +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"aCx" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"aCy" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"aCz" = ( +/obj/structure/dresser, +/obj/machinery/keycard_auth{ + pixel_x = -24 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/hos{ + name = "Head of Security's Private Quarters" + }) +"aCA" = ( +/obj/structure/closet/secure_closet/hos, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/hos{ + name = "Head of Security's Private Quarters" + }) +"aCB" = ( +/obj/machinery/light/small, +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/hos{ + name = "Head of Security's Private Quarters" + }) +"aCC" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/hos{ + name = "Head of Security's Private Quarters" + }) +"aCD" = ( +/obj/machinery/door/airlock/security{ + name = "Head of Security's Personal Quarters"; + req_access_txt = "58" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/hos{ + name = "Head of Security's Private Quarters" + }) +"aCE" = ( +/obj/machinery/camera{ + c_tag = "Bridge Main 2"; + dir = 1; + icon_state = "camera"; + network = list("SS13") + }, +/turf/open/floor/plasteel/darkblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aCF" = ( +/obj/machinery/computer/crew, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/plasteel/darkblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aCG" = ( +/obj/machinery/computer/med_data, +/turf/open/floor/plasteel/darkblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aCH" = ( +/obj/structure/table, +/obj/item/weapon/paper_bin, +/obj/machinery/light, +/turf/open/floor/plasteel/darkblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aCI" = ( +/turf/open/floor/plasteel/darkblue/corner{ + icon_state = "darkbluecorners"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aCJ" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aCK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/item/device/radio/beacon, +/turf/open/floor/plasteel/darkblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aCL" = ( +/turf/open/floor/plasteel/darkblue/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aCM" = ( +/obj/machinery/computer/security, +/turf/open/floor/plasteel/darkblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aCN" = ( +/obj/machinery/computer/secure_data, +/turf/open/floor/plasteel/darkblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aCO" = ( +/turf/open/floor/plasteel/darkblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aCP" = ( +/obj/machinery/door/airlock/research{ + name = "Research Director's Personal Quarters"; + req_access_txt = "30" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/hor{ + name = "Research Director's Private Quarters" + }) +"aCQ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/hor{ + name = "Research Director's Private Quarters" + }) +"aCR" = ( +/obj/machinery/light/small, +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/hor{ + name = "Research Director's Private Quarters" + }) +"aCS" = ( +/obj/structure/closet/secure_closet/RD, +/obj/item/clothing/mask/facehugger/lamarr, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/hor{ + name = "Research Director's Private Quarters" + }) +"aCT" = ( +/obj/structure/dresser, +/obj/machinery/keycard_auth{ + pixel_x = 24 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/hor{ + name = "Research Director's Private Quarters" + }) +"aCU" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aCV" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aCW" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aCX" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aCY" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/status_display{ + density = 0; + name = "cargo display"; + pixel_x = 0; + pixel_y = 32; + supply_display = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aCZ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = 0; + pixel_y = 32; + random_basetype = /obj/structure/sign/poster/official + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aDa" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aDb" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/landmark/lightsout, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aDc" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aDd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aDe" = ( +/obj/effect/landmark/event_spawn, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aDf" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/brown/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aDg" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "Mining Dock APC"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock) +"aDh" = ( +/obj/structure/closet/crate, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/labor) +"aDi" = ( +/obj/machinery/door/airlock/titanium{ + id_tag = "prisonshuttle"; + name = "Labor Shuttle Airlock" + }, +/obj/docking_port/mobile{ + dir = 8; + dwidth = 2; + height = 5; + id = "laborcamp"; + name = "labor camp shuttle"; + port_angle = 90; + width = 9 + }, +/obj/docking_port/stationary{ + dir = 8; + dwidth = 2; + height = 5; + id = "laborcamp_home"; + name = "fore bay 1"; + width = 9 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/labor) +"aDj" = ( +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 4; + name = "Labor Camp Shuttle Airlock"; + shuttledocked = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/security/processing) +"aDk" = ( +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 8; + name = "Labor Camp Shuttle Airlock" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"aDl" = ( +/obj/machinery/holopad, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"aDm" = ( +/obj/machinery/door/airlock/security{ + id_tag = "laborexit"; + name = "Labor Shuttle"; + req_access = null; + req_access_txt = "63" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"aDn" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aDo" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/button/door{ + id = "GulagCivExit"; + name = "Gulag Door Exit"; + normaldoorcontrol = 1; + pixel_x = 24 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aDp" = ( +/obj/structure/reagent_dispensers/peppertank{ + pixel_x = -32 + }, +/obj/structure/table, +/obj/item/weapon/book/manual/wiki/security_space_law, +/obj/item/device/assembly/flash, +/obj/item/weapon/restraints/handcuffs, +/obj/item/weapon/restraints/handcuffs, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"aDq" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"aDr" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"aDs" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"aDt" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "prisonbreak"; + name = "emergency prisoner containment blast door" + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"aDu" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel/red/corner{ + icon_state = "redcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aDv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/corner{ + icon_state = "redcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aDw" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (NORTH)"; + icon_state = "redcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aDx" = ( +/obj/structure/cable/orange{ + 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/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aDy" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aDz" = ( +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aDA" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (NORTH)"; + icon_state = "redcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aDB" = ( +/obj/machinery/camera{ + c_tag = "Brig Hall East" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (NORTH)"; + icon_state = "redcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aDC" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/side{ + tag = "icon-red (NORTHEAST)"; + icon_state = "red"; + dir = 5; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aDD" = ( +/obj/machinery/door/airlock/security{ + name = "Courtroom"; + req_access = null; + req_access_txt = "1" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aDE" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aDF" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (WEST)"; + icon_state = "redcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aDG" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aDH" = ( +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aDI" = ( +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aDJ" = ( +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aDK" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aDL" = ( +/turf/open/floor/plasteel/blue/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aDM" = ( +/obj/machinery/airalarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, +/turf/open/floor/plasteel/blue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aDN" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aDO" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/structure/table, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aDP" = ( +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = -32; + random_basetype = /obj/structure/sign/poster/official + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aDQ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aDR" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aDS" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Dorm Commons South"; + dir = 10; + icon_state = "camera"; + tag = "icon-camera (SOUTHWEST)" + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -28 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aDT" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aDU" = ( +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aDV" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"aDW" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (NORTHEAST)"; + icon_state = "neutral"; + dir = 5; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"aDX" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (NORTHEAST)"; + icon_state = "neutral"; + dir = 5; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"aDY" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (NORTHEAST)"; + icon_state = "neutral"; + dir = 5; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"aDZ" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (NORTHWEST)"; + icon_state = "neutral"; + dir = 9; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"aEa" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"aEb" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/hos{ + name = "Head of Security's Private Quarters" + }) +"aEc" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aEd" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aEe" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/door/poddoor/preopen{ + id = "bridge"; + name = "Emergency Blast Door" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aEf" = ( +/obj/machinery/door/airlock/glass_command{ + cyclelinkeddir = null; + name = "Bridge"; + req_access_txt = "0"; + req_one_access = null; + req_one_access_txt = "19;41" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aEg" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/poddoor/preopen{ + id = "bridge"; + name = "Emergency Blast Door" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aEh" = ( +/obj/machinery/door/airlock/glass_command{ + cyclelinkeddir = null; + name = "Bridge"; + req_access_txt = "0"; + req_one_access = null; + req_one_access_txt = "19;41" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aEi" = ( +/obj/structure/girder, +/obj/structure/grille, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aEj" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aEk" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/item/device/assembly/mousetrap/armed, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aEl" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aEm" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Cargo Hall West"; + dir = 1; + icon_state = "camera"; + network = list("SS13","QM") + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aEn" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aEo" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel/brown/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aEp" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/brown{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/quartermaster/office) +"aEq" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/brown{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/quartermaster/office) +"aEr" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/brown/corner{ + tag = "icon-browncorner (WEST)"; + icon_state = "browncorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aEs" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aEt" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Cargo Hall"; + dir = 1; + icon_state = "camera"; + network = list("SS13","QM") + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aEu" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aEv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/machinery/camera{ + c_tag = "Cargo Hall East"; + dir = 8; + icon_state = "camera"; + network = list("SS13","QM"); + tag = "icon-camera (WEST)" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aEw" = ( +/obj/structure/shuttle/engine/heater, +/obj/structure/window/reinforced{ + dir = 1; + layer = 2.9 + }, +/turf/open/floor/plating/airless, +/area/shuttle/labor) +"aEx" = ( +/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; + pixel_y = -32 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"aEy" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aEz" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aEA" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/security{ + name = "Labor Shuttle"; + req_access = null; + req_access_txt = "2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"aEB" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9; + pixel_y = 0 + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"aEC" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"aED" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"aEE" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 8 + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"aEF" = ( +/obj/machinery/door/airlock/glass_security{ + name = "Equipment Room"; + req_access_txt = "1" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"aEG" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aEH" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/junction{ + tag = "icon-pipe-j2 (WEST)"; + icon_state = "pipe-j2"; + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aEI" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aEJ" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aEK" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aEL" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/junction{ + tag = "icon-pipe-j2 (WEST)"; + icon_state = "pipe-j2"; + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aEM" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aEN" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/holopad, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aEO" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aEP" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aEQ" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + on = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aER" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "Brig APC"; + pixel_x = 23; + pixel_y = 2 + }, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aES" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aET" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aEU" = ( +/obj/structure/table/wood, +/turf/open/floor/plasteel/red/side{ + tag = "icon-red (NORTHEAST)"; + icon_state = "red"; + dir = 5; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aEV" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aEW" = ( +/obj/machinery/holopad, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aEX" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aEY" = ( +/obj/structure/table/wood, +/turf/open/floor/plasteel/blue/side{ + tag = "icon-blue (NORTHWEST)"; + icon_state = "blue"; + dir = 9; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aEZ" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plasteel/blue/side{ + tag = "icon-blue (NORTH)"; + icon_state = "blue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aFa" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/grille/broken, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aFb" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/table, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aFc" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "0-4"; + d2 = 4 + }, +/obj/machinery/power/apc{ + dir = 2; + name = "Dorm Toilets APC"; + pixel_y = -24 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet) +"aFd" = ( +/obj/machinery/power/terminal{ + tag = "icon-term (EAST)"; + icon_state = "term"; + dir = 4 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/sign/electricshock{ + pixel_y = -32 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aFe" = ( +/obj/machinery/power/smes/engineering, +/obj/structure/cable/orange, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aFf" = ( +/turf/open/floor/plasteel/neutral/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aFg" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aFh" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/yellow, +/obj/structure/window{ + tag = "icon-window (NORTH)"; + icon_state = "window"; + dir = 1 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"aFi" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/green, +/obj/structure/window{ + tag = "icon-window (NORTH)"; + icon_state = "window"; + dir = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"aFj" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/red, +/obj/structure/window{ + tag = "icon-window (NORTH)"; + icon_state = "window"; + dir = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"aFk" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aFl" = ( +/obj/structure/rack, +/obj/item/device/flashlight, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aFm" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "Head of Security's Personal Quarters APC"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/hos{ + name = "Head of Security's Private Quarters" + }) +"aFn" = ( +/obj/structure/closet/crate, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aFo" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "Bridge APC"; + pixel_x = 23; + pixel_y = 2 + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aFp" = ( +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTH)"; + icon_state = "darkblue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aFq" = ( +/obj/machinery/camera{ + c_tag = "Bridge Midway 1" + }, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTH)"; + icon_state = "darkblue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aFr" = ( +/obj/structure/table, +/obj/item/stack/packageWrap, +/obj/item/device/destTagger, +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTH)"; + icon_state = "darkblue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aFs" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTH)"; + icon_state = "darkblue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aFt" = ( +/obj/structure/table, +/obj/machinery/recharger, +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTH)"; + icon_state = "darkblue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aFu" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/darkblue/corner{ + tag = "icon-darkbluecorners (NORTH)"; + icon_state = "darkbluecorners"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aFv" = ( +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j2"; + dir = 2 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aFw" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTH)"; + icon_state = "darkblue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aFx" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aFy" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/darkblue/corner{ + tag = "icon-darkbluecorners (EAST)"; + icon_state = "darkbluecorners"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aFz" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTH)"; + icon_state = "darkblue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aFA" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/o2, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTH)"; + icon_state = "darkblue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aFB" = ( +/obj/structure/table, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTH)"; + icon_state = "darkblue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aFC" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTH)"; + icon_state = "darkblue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aFD" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/qm{ + name = "Quartermaster's Private Quarters" + }) +"aFE" = ( +/obj/structure/table/wood, +/obj/item/weapon/paper_bin, +/obj/item/weapon/stamp/qm, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/qm{ + name = "Quartermaster's Private Quarters" + }) +"aFF" = ( +/obj/structure/table/wood, +/obj/item/device/flashlight/lamp, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/qm{ + name = "Quartermaster's Private Quarters" + }) +"aFG" = ( +/obj/structure/dresser, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/qm{ + name = "Quartermaster's Private Quarters" + }) +"aFH" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/qm, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/obj/item/weapon/storage/secure/safe{ + pixel_x = 32 + }, +/obj/effect/landmark/start/quartermaster, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/qm{ + name = "Quartermaster's Private Quarters" + }) +"aFI" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/qm{ + name = "Quartermaster's Private Quarters" + }) +"aFJ" = ( +/obj/machinery/door/airlock/glass_mining{ + name = "Cargo Bay"; + req_access_txt = "0"; + req_one_access_txt = "31;48" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aFK" = ( +/obj/machinery/door/airlock/glass_mining{ + name = "Cargo Bay"; + req_access_txt = "0"; + req_one_access_txt = "31;48" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aFL" = ( +/obj/structure/table, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/weapon/pen/fourcolor, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aFM" = ( +/obj/structure/table, +/obj/item/clothing/gloves/fingerless, +/obj/item/clothing/head/soft, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aFN" = ( +/obj/structure/closet/wardrobe/cargotech, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aFO" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aFP" = ( +/obj/structure/table, +/obj/item/weapon/hand_labeler, +/obj/item/hand_labeler_refill, +/obj/item/hand_labeler_refill, +/obj/item/stack/packageWrap, +/obj/item/device/destTagger, +/turf/open/floor/plasteel/brown/corner{ + tag = "icon-browncorner (EAST)"; + icon_state = "browncorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aFQ" = ( +/obj/structure/shuttle/engine/propulsion, +/turf/open/floor/plating/airless, +/area/shuttle/labor) +"aFR" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/obj/structure/closet/emcloset, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"aFS" = ( +/obj/machinery/camera{ + c_tag = "Labor Shuttle Dock South"; + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"aFT" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/obj/machinery/airalarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"aFU" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"aFV" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance{ + id_tag = "GulagCivExit"; + name = "Fore Asteroid Maintenance Access"; + req_access_txt = "12" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aFW" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/machinery/door/airlock/maintenance{ + id_tag = "GulagCivExit"; + name = "Fore Asteroid Maintenance Access"; + req_access_txt = "12" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aFX" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"aFY" = ( +/obj/effect/landmark/secequipment, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"aFZ" = ( +/obj/effect/landmark/secequipment, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/machinery/light, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"aGa" = ( +/obj/effect/landmark/secequipment, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"aGb" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/landmark/secequipment, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"aGc" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "prisonbreak"; + name = "emergency prisoner containment blast door" + }, +/obj/structure/cable/orange, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"aGd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (WEST)"; + icon_state = "redcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aGe" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (WEST)"; + icon_state = "redcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aGf" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (WEST)"; + icon_state = "redcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aGg" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Brig Hall West"; + dir = 1; + icon_state = "camera"; + network = list("SS13") + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (WEST)"; + icon_state = "redcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aGh" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (WEST)"; + icon_state = "redcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aGi" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (WEST)"; + icon_state = "redcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aGj" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (WEST)"; + icon_state = "redcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aGk" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (WEST)"; + icon_state = "redcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aGl" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (WEST)"; + icon_state = "redcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aGm" = ( +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (WEST)"; + icon_state = "redcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aGn" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aGo" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/light, +/turf/open/floor/plasteel/red/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aGp" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (WEST)"; + icon_state = "redcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aGq" = ( +/turf/open/floor/plasteel/red/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aGr" = ( +/obj/structure/sign/goldenplaque{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/red/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aGs" = ( +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (WEST)"; + icon_state = "redcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aGt" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (WEST)"; + icon_state = "redcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aGu" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aGv" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aGw" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel/red/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aGx" = ( +/obj/structure/table/wood, +/obj/item/weapon/book/manual/wiki/security_space_law, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 6; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aGy" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aGz" = ( +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aGA" = ( +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aGB" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aGC" = ( +/obj/structure/table/wood, +/turf/open/floor/plasteel/blue/side{ + tag = "icon-blue (SOUTHWEST)"; + icon_state = "blue"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aGD" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plasteel/blue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aGE" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet) +"aGF" = ( +/obj/structure/closet/secure_closet/personal, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aGG" = ( +/obj/structure/closet/secure_closet/personal, +/obj/machinery/light, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aGH" = ( +/obj/machinery/light/small, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"aGI" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/yellow, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"aGJ" = ( +/obj/machinery/light/small, +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = -32; + random_basetype = /obj/structure/sign/poster/official + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"aGK" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/green, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"aGL" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/red, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_male) +"aGM" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aGN" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/disposaloutlet{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aGO" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aGP" = ( +/obj/machinery/light/small, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/power/apc{ + dir = 2; + name = "Head of Personnel's Office APC"; + pixel_y = -24 + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aGQ" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aGR" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Bridge APC Access"; + req_access_txt = "10;11;12" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aGS" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aGT" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aGU" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aGV" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/junction, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aGW" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aGX" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aGY" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aGZ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/qm{ + name = "Quartermaster's Private Quarters" + }) +"aHa" = ( +/obj/structure/table/wood, +/obj/item/device/modular_computer/laptop/preset/civillian, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/qm{ + name = "Quartermaster's Private Quarters" + }) +"aHb" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/qm{ + name = "Quartermaster's Private Quarters" + }) +"aHc" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/qm{ + name = "Quartermaster's Private Quarters" + }) +"aHd" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/obj/machinery/requests_console{ + department = "Cargo Bay"; + departmentType = 2; + name = "Quartermaster RC"; + pixel_x = 30; + pixel_y = 0 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/qm{ + name = "Quartermaster's Private Quarters" + }) +"aHe" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "Quartermaster's Private Quarters APC"; + pixel_x = -23; + pixel_y = 2 + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/qm{ + name = "Quartermaster's Private Quarters" + }) +"aHf" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/extinguisher_cabinet{ + pixel_x = -24 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/brown/corner{ + tag = "icon-browncorner (EAST)"; + icon_state = "browncorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aHg" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/brown{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + dir = 1 + }, +/area/quartermaster/office) +"aHh" = ( +/turf/open/floor/plasteel/brown{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + dir = 1 + }, +/area/quartermaster/office) +"aHi" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/brown/corner{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + dir = 1; + tag = "icon-browncorner (NORTH)" + }, +/area/quartermaster/office) +"aHj" = ( +/obj/machinery/requests_console{ + department = "Cargo Bay"; + departmentType = 2; + name = "Cargo RC"; + pixel_x = 0; + pixel_y = 30 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aHk" = ( +/obj/machinery/autolathe, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aHl" = ( +/obj/structure/table, +/obj/item/device/multitool, +/obj/machinery/camera{ + c_tag = "Cargo Desk"; + dir = 6; + icon_state = "camera"; + network = list("SS13","QM") + }, +/obj/machinery/status_display{ + density = 0; + name = "cargo display"; + pixel_x = 0; + pixel_y = 32; + supply_display = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aHm" = ( +/obj/structure/table, +/obj/item/weapon/folder, +/obj/item/weapon/stamp/denied{ + pixel_x = 5; + pixel_y = 3 + }, +/obj/item/weapon/stamp, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/obj/item/stack/packageWrap, +/obj/item/device/destTagger, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aHn" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/regular, +/obj/structure/noticeboard{ + pixel_y = 32 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aHo" = ( +/obj/structure/table, +/obj/machinery/computer/stockexchange, +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = 0; + pixel_y = 32; + random_basetype = /obj/structure/sign/poster/official + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aHp" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/supply) +"aHq" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/supply) +"aHr" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 1 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aHs" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aHt" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aHu" = ( +/obj/machinery/door/airlock/security{ + name = "Detective's Office"; + req_access_txt = "4" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) +"aHv" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aHw" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aHx" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aHy" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/poddoor/shutters{ + id = "lawyerinterior"; + name = "privacy shutters" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aHz" = ( +/obj/machinery/door/airlock{ + name = "Law Office"; + req_access_txt = "38" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aHA" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/poddoor/shutters{ + id = "lawyerinterior"; + name = "privacy shutters" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aHB" = ( +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aHC" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aHD" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aHE" = ( +/obj/machinery/door/airlock/glass_security{ + cyclelinkeddir = 2; + id_tag = "innerbrig"; + name = "Brig"; + req_access_txt = "0"; + req_one_access_txt = "38;63" + }, +/turf/open/floor/plasteel/red/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aHF" = ( +/obj/machinery/door/airlock/glass_security{ + cyclelinkeddir = 2; + id_tag = "innerbrig"; + name = "Brig"; + req_access_txt = "0"; + req_one_access_txt = "38;63" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aHG" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aHH" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aHI" = ( +/obj/machinery/camera{ + c_tag = "Courtroom Main South"; + dir = 1 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aHJ" = ( +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (NORTH)"; + icon_state = "redcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aHK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aHL" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aHM" = ( +/turf/open/floor/plasteel/blue/corner{ + tag = "icon-bluecorner (EAST)"; + icon_state = "bluecorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aHN" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/blue/side{ + tag = "icon-blue (NORTH)"; + icon_state = "blue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aHO" = ( +/obj/machinery/recharge_station, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet) +"aHP" = ( +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet) +"aHQ" = ( +/obj/machinery/door/airlock/glass{ + name = "Dormitories" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aHR" = ( +/obj/machinery/door/airlock/glass{ + name = "Dormitories" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aHS" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aHT" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aHU" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/darkblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aHV" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + on = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aHW" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/holopad, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aHX" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aHY" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aHZ" = ( +/obj/machinery/door/airlock/mining{ + name = "Quartermaster's Private Quarters"; + req_access_txt = "41" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/qm{ + name = "Quartermaster's Private Quarters" + }) +"aIa" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/qm{ + name = "Quartermaster's Private Quarters" + }) +"aIb" = ( +/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/qm{ + name = "Quartermaster's Private Quarters" + }) +"aIc" = ( +/obj/machinery/light_switch{ + pixel_y = -25 + }, +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/qm{ + name = "Quartermaster's Private Quarters" + }) +"aId" = ( +/obj/structure/closet/secure_closet/quartermaster, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/qm{ + name = "Quartermaster's Private Quarters" + }) +"aIe" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aIf" = ( +/obj/machinery/power/apc{ + dir = 2; + name = "Gravity Generator APC"; + pixel_y = -24 + }, +/turf/closed/mineral, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aIg" = ( +/obj/structure/table, +/obj/item/stack/sheet/glass/fifty, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aIh" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aIi" = ( +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aIj" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/supply) +"aIk" = ( +/obj/machinery/computer/secure_data, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/side{ + tag = "icon-red (NORTHWEST)"; + icon_state = "red"; + dir = 9; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/supply) +"aIl" = ( +/obj/structure/chair/office/dark{ + dir = 8 + }, +/obj/effect/landmark/start/depsec/supply, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/supply) +"aIm" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/supply) +"aIn" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/obj/structure/reagent_dispensers/peppertank{ + pixel_x = 32 + }, +/turf/open/floor/plasteel/red/side{ + tag = "icon-red (NORTHEAST)"; + icon_state = "red"; + dir = 5; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/supply) +"aIo" = ( +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "Labor Shuttle Dock APC"; + pixel_x = 0; + pixel_y = 24 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/processing) +"aIp" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aIq" = ( +/obj/structure/closet/secure_closet/detective, +/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aIr" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + on = 1 + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aIs" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aIt" = ( +/obj/structure/table/wood, +/obj/machinery/computer/security/wooden_tv, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aIu" = ( +/obj/structure/filingcabinet, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aIv" = ( +/obj/machinery/computer/secure_data, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aIw" = ( +/obj/structure/filingcabinet, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aIx" = ( +/obj/machinery/button/door{ + id = "lawyerinterior"; + name = "Privacy Shutters"; + pixel_x = 0; + pixel_y = 24 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aIy" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + on = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aIz" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aIA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/power/apc{ + dir = 4; + name = "Lawyer's Office APC"; + pixel_x = 23; + pixel_y = 2 + }, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aIB" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/button/flasher{ + id = "HoldingCell"; + name = "Holding Cell Flash"; + pixel_x = -24; + pixel_y = 0 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aIC" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/red/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aID" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 6; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aIE" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/table, +/obj/item/stack/packageWrap, +/obj/item/device/destTagger, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 6; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aIF" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aIG" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/red/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aIH" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aII" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/vending/coffee, +/turf/open/floor/plasteel/red/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aIJ" = ( +/obj/machinery/vending/cigarette, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 6; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aIK" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aIL" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aIM" = ( +/obj/machinery/door/airlock/glass{ + name = "Courtroom"; + req_access_txt = "1" + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/courtroom) +"aIN" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aIO" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet) +"aIP" = ( +/obj/machinery/door/airlock{ + id_tag = "b3" + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet) +"aIQ" = ( +/obj/structure/urinal{ + pixel_x = 32 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet) +"aIR" = ( +/obj/machinery/washing_machine, +/turf/open/floor/plasteel/barber{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aIS" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aIT" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aIU" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (EAST)"; + icon_state = "neutral"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aIV" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aIW" = ( +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aIX" = ( +/obj/structure/closet/wardrobe/pjs, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aIY" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/hop, +/obj/effect/landmark/start/head_of_personnel, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aIZ" = ( +/obj/machinery/light_switch{ + pixel_y = 25 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aJa" = ( +/obj/structure/closet/secure_closet/hop, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/item/weapon/storage/secure/safe{ + pixel_y = 32 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aJb" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aJc" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Head of Personnel's Desk"; + departmentType = 5; + name = "Head of Personnel RC"; + pixel_y = 30 + }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aJd" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aJe" = ( +/obj/structure/bed/dogbed, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/mob/living/simple_animal/pet/dog/corgi/Ian, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aJf" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aJg" = ( +/obj/machinery/door/airlock/glass_command{ + cyclelinkeddir = null; + name = "Head of Personnel's Office"; + req_access_txt = "57"; + req_one_access = null; + req_one_access_txt = "0" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aJh" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aJi" = ( +/obj/machinery/light, +/obj/item/weapon/twohanded/required/kirbyplants{ + tag = "icon-plant-21"; + icon_state = "plant-21" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/darkblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aJj" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/darkblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aJk" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aJl" = ( +/obj/structure/cable/orange{ + 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/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aJm" = ( +/obj/machinery/camera{ + c_tag = "Bridge Midway 2"; + dir = 1; + icon_state = "camera"; + network = list("SS13") + }, +/turf/open/floor/plasteel/darkblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aJn" = ( +/obj/machinery/light, +/obj/item/weapon/twohanded/required/kirbyplants{ + tag = "icon-plant-21"; + icon_state = "plant-21" + }, +/turf/open/floor/plasteel/darkblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aJo" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/machinery/camera{ + c_tag = "Core-Command-Cargo Bridge 1"; + dir = 8; + network = list("SS13") + }, +/turf/open/floor/engine, +/area/space) +"aJp" = ( +/obj/structure/table, +/obj/item/stack/sheet/metal/fifty, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aJq" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aJr" = ( +/mob/living/simple_animal/sloth/paperwork, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aJs" = ( +/obj/machinery/door/airlock/glass_security{ + name = "Security Office"; + req_access_txt = "63" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/supply) +"aJt" = ( +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/supply) +"aJu" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/supply) +"aJv" = ( +/obj/machinery/airalarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/supply) +"aJw" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/supply) +"aJx" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aJy" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aJz" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aJA" = ( +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "Detective's Office APC"; + pixel_x = 23; + pixel_y = 2 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aJB" = ( +/obj/machinery/airalarm{ + dir = 4; + icon_state = "alarm0"; + pixel_x = -22 + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aJC" = ( +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aJD" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aJE" = ( +/obj/structure/table/wood, +/obj/item/weapon/storage/fancy/cigarettes, +/obj/item/clothing/glasses/sunglasses, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aJF" = ( +/obj/structure/chair/comfy/brown{ + dir = 8 + }, +/obj/effect/landmark/start/detective, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aJG" = ( +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = 28; + pixel_y = 0 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aJH" = ( +/obj/structure/rack, +/obj/item/weapon/storage/briefcase, +/obj/item/weapon/storage/briefcase, +/obj/machinery/camera{ + c_tag = "Lawyer's Office"; + dir = 4; + icon_state = "camera" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aJI" = ( +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aJJ" = ( +/obj/structure/table/wood, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aJK" = ( +/obj/structure/table/wood, +/obj/item/weapon/book/manual/wiki/security_space_law, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aJL" = ( +/obj/structure/table/wood, +/obj/item/device/flashlight/lamp/green, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aJM" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/orange, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aJN" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/poddoor/preopen{ + id = "frontbrig"; + name = "Emergency External Blast Doors" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aJO" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/camera{ + c_tag = "Courtroom Jury West"; + dir = 4; + network = list("SS13") + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/courtroom) +"aJP" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/courtroom) +"aJQ" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/courtroom) +"aJR" = ( +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/courtroom) +"aJS" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/courtroom) +"aJT" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/item/device/assembly/mousetrap/armed, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aJU" = ( +/obj/machinery/button/door{ + id = "b3"; + name = "Privacy Bolts"; + normaldoorcontrol = 1; + pixel_x = 24 + }, +/obj/machinery/recharge_station, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet) +"aJV" = ( +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = -32; + random_basetype = /obj/structure/sign/poster/official + }, +/turf/open/floor/plasteel/barber{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aJW" = ( +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel/barber{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aJX" = ( +/turf/open/floor/plasteel/barber{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aJY" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment, +/obj/item/device/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = -29; + pixel_y = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aJZ" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (EAST)"; + icon_state = "neutral"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aKa" = ( +/obj/structure/closet/wardrobe/grey, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aKb" = ( +/obj/structure/dresser, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aKc" = ( +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aKd" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aKe" = ( +/obj/machinery/door/airlock/command{ + name = "Head of Personnel's Private Quarters"; + req_access = null; + req_access_txt = "57" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aKf" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aKg" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aKh" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aKi" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aKj" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aKk" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/darkblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aKl" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/darkblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aKm" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/darkblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aKn" = ( +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "Fore Asteroid Maintenance APC"; + pixel_x = -23; + pixel_y = 2 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aKo" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Cargo Quantum Pad" + }) +"aKp" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Cargo Quantum Pad" + }) +"aKq" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aKr" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/bot{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aKs" = ( +/obj/machinery/photocopier, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aKt" = ( +/obj/machinery/computer/cargo, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aKu" = ( +/obj/structure/chair/office/dark, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aKv" = ( +/obj/structure/table, +/obj/machinery/computer/stockexchange, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aKw" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aKx" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aKy" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/supply) +"aKz" = ( +/obj/structure/closet/secure_closet/security/engine, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/supply) +"aKA" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/obj/machinery/computer/security/telescreen{ + desc = "Used for making sure Cargo isn't hiding an armory bigger than Security's."; + name = "Cargo Monitor"; + network = list("QM"); + pixel_y = -32 + }, +/obj/structure/table, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/weapon/pen, +/turf/open/floor/plasteel/red/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/supply) +"aKB" = ( +/obj/structure/filingcabinet, +/obj/machinery/light, +/turf/open/floor/plasteel/red/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/supply) +"aKC" = ( +/obj/structure/table, +/obj/machinery/recharger, +/obj/machinery/newscaster/security_unit{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/red/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/supply) +"aKD" = ( +/obj/machinery/camera{ + c_tag = "Cargo Security Checkpoint"; + dir = 8; + icon_state = "camera"; + network = list("SS13","QM"); + tag = "icon-camera (WEST)" + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 6; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/supply) +"aKE" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/closet/crate, +/obj/item/weapon/coin/silver, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating/asteroid, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aKF" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plating/asteroid, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aKG" = ( +/obj/machinery/light/small, +/obj/structure/closet/crate, +/turf/open/floor/plating/asteroid, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aKH" = ( +/obj/structure/table/wood, +/obj/item/weapon/storage/box/evidence, +/obj/item/weapon/hand_labeler, +/obj/item/hand_labeler_refill{ + pixel_x = 3; + pixel_y = 2 + }, +/obj/machinery/camera{ + c_tag = "Detective's Office"; + dir = 4; + icon_state = "camera" + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aKI" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aKJ" = ( +/obj/structure/table/wood, +/obj/machinery/computer/med_data/laptop, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aKK" = ( +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aKL" = ( +/obj/machinery/airalarm{ + dir = 4; + icon_state = "alarm0"; + pixel_x = -22 + }, +/obj/machinery/holopad, +/obj/effect/landmark/start/lawyer, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aKM" = ( +/obj/structure/chair/office/dark{ + dir = 8 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/landmark/start/lawyer, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aKN" = ( +/obj/structure/filingcabinet, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aKO" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + on = 1 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aKP" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (WEST)"; + icon_state = "redcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aKQ" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/sign/map/left/ceres{ + pixel_x = -32 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aKR" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aKS" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aKT" = ( +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aKU" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/airalarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, +/turf/open/floor/plasteel/red/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aKV" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -23; + pixel_y = 0 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/courtroom) +"aKW" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet) +"aKX" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet) +"aKY" = ( +/obj/structure/table, +/obj/structure/bedsheetbin, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/barber{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aKZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/barber{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aLa" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/holopad, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aLb" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (EAST)"; + icon_state = "neutral"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aLc" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aLd" = ( +/obj/structure/closet/wardrobe/mixed, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aLe" = ( +/obj/structure/table/wood, +/obj/item/device/flashlight/lamp, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aLf" = ( +/obj/structure/chair, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aLg" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aLh" = ( +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aLi" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1; + on = 1 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aLj" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + on = 1 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aLk" = ( +/obj/structure/sign/map/left/ceres{ + pixel_y = 32 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aLl" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/poddoor/preopen{ + id = "bridge"; + name = "Emergency Blast Door" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aLm" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aLn" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aLo" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Cargo Quantum Pad" + }) +"aLp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "Cargo Quantum Pad APC"; + pixel_y = 24 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Cargo Quantum Pad" + }) +"aLq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'KEEP CLEAR OF PAD WHEN IN USE'."; + name = "KEEP CLEAR OF PAD WHEN IN USE"; + pixel_x = 0; + pixel_y = 32 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Cargo Quantum Pad" + }) +"aLr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Cargo Quantum Pad" + }) +"aLs" = ( +/obj/machinery/door/airlock/glass_mining{ + name = "Cargo Office"; + req_access_txt = "0"; + req_one_access_txt = "50;48" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aLt" = ( +/obj/machinery/mineral/ore_redemption, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aLu" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/northright{ + name = "Cargo Desk"; + req_one_access_txt = "50;48" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aLv" = ( +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/deliveryChute{ + tag = "icon-intake (NORTH)"; + icon_state = "intake"; + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aLw" = ( +/obj/structure/table/wood, +/obj/item/device/tape/random, +/obj/item/device/tape/random{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aLx" = ( +/obj/machinery/holopad, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aLy" = ( +/obj/structure/table/wood, +/obj/item/device/flashlight/lamp, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aLz" = ( +/obj/structure/table/wood, +/obj/item/device/camera/detective, +/obj/item/weapon/lighter, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aLA" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/machinery/newscaster/security_unit{ + pixel_x = 32 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aLB" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aLC" = ( +/obj/structure/table/wood, +/obj/item/weapon/folder/red{ + pixel_x = 8; + pixel_y = 6 + }, +/obj/item/weapon/folder/blue{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aLD" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aLE" = ( +/obj/machinery/photocopier, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aLF" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = -29; + pixel_y = 0 + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (WEST)"; + icon_state = "redcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aLG" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plasteel/red/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aLH" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/toilet{ + dir = 4 + }, +/obj/machinery/button/door{ + id = "b2"; + name = "Privacy Bolts"; + normaldoorcontrol = 1; + pixel_x = -24 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet) +"aLI" = ( +/obj/machinery/door/airlock{ + id_tag = "b2" + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet) +"aLJ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet) +"aLK" = ( +/obj/structure/sink{ + dir = 4; + icon_state = "sink"; + pixel_x = 11; + pixel_y = 0 + }, +/obj/structure/mirror{ + pixel_x = 32; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet) +"aLL" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet) +"aLM" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/barber{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aLN" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel/barber{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aLO" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aLP" = ( +/obj/structure/closet/wardrobe/mixed, +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = 32; + random_basetype = /obj/structure/sign/poster/official + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aLQ" = ( +/obj/structure/table/wood, +/obj/item/weapon/paper_bin, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aLR" = ( +/obj/structure/table/wood, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aLS" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + on = 1 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aLT" = ( +/obj/structure/table, +/obj/item/weapon/folder/red{ + pixel_x = 8; + pixel_y = 6 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aLU" = ( +/obj/structure/table, +/obj/machinery/camera{ + c_tag = "Head of Personnel's Office"; + dir = 1; + icon_state = "camera"; + network = list("SS13") + }, +/obj/machinery/recharger, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aLV" = ( +/obj/structure/filingcabinet, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aLW" = ( +/obj/structure/table, +/obj/item/weapon/paper_bin, +/obj/item/weapon/stamp/hop, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aLX" = ( +/obj/machinery/computer/card, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aLY" = ( +/obj/structure/chair/comfy, +/obj/machinery/button/flasher{ + id = "hopflash"; + name = "Line Flash"; + pixel_x = 32; + pixel_y = 0 + }, +/obj/machinery/button/door{ + id = "hopshutter"; + name = "Desk Shutters"; + pixel_x = 24; + pixel_y = 8; + req_access_txt = "57" + }, +/obj/machinery/button/door{ + id = "hopexternal"; + name = "External Lockdown"; + pixel_x = 24; + pixel_y = 0; + req_access_txt = "57" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aLZ" = ( +/obj/item/weapon/twohanded/required/kirbyplants{ + tag = "icon-plant-21"; + icon_state = "plant-21" + }, +/turf/open/floor/plasteel/darkblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 8; + tag = "icon-darkblue (WEST)" + }, +/area/bridge) +"aMa" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aMb" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/darkblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aMc" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/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/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aMd" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/darkblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aMe" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aMf" = ( +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/obj/item/weapon/twohanded/required/kirbyplants{ + tag = "icon-plant-21"; + icon_state = "plant-21" + }, +/turf/open/floor/plasteel/darkblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 4; + tag = "icon-darkblue (EAST)" + }, +/area/bridge) +"aMg" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aMh" = ( +/obj/machinery/camera{ + c_tag = "Command SMES"; + dir = 6; + icon_state = "camera" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aMi" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aMj" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "Fore Asteroid Hallway APC"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aMk" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/sign/electricshock{ + pixel_y = 32 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aMl" = ( +/obj/machinery/power/smes/engineering, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aMm" = ( +/obj/structure/table, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aMn" = ( +/obj/structure/table, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aMo" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aMp" = ( +/obj/structure/tank_dispenser/oxygen, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aMq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 2; + on = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Cargo Quantum Pad" + }) +"aMr" = ( +/obj/machinery/quantumpad, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Cargo Quantum Pad" + }) +"aMs" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Docking Quantum Pad"; + dir = 8; + icon_state = "camera"; + network = list("SS13","QM"); + tag = "icon-camera (WEST)" + }, +/obj/machinery/airalarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Cargo Quantum Pad" + }) +"aMt" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel/brown/corner{ + tag = "icon-browncorner (EAST)"; + icon_state = "browncorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aMu" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/brown/corner{ + tag = "icon-browncorner (EAST)"; + icon_state = "browncorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aMv" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/brown/corner{ + tag = "icon-browncorner (EAST)"; + icon_state = "browncorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aMw" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/brown/corner{ + tag = "icon-browncorner (EAST)"; + icon_state = "browncorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aMx" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/brown/corner{ + tag = "icon-browncorner (EAST)"; + icon_state = "browncorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aMy" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/brown/corner{ + tag = "icon-browncorner (EAST)"; + icon_state = "browncorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aMz" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/brown/corner{ + tag = "icon-browncorner (EAST)"; + icon_state = "browncorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aMA" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/brown/corner{ + tag = "icon-browncorner (EAST)"; + icon_state = "browncorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aMB" = ( +/obj/machinery/computer/cargo/request, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/brown/corner{ + tag = "icon-browncorner (EAST)"; + icon_state = "browncorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aMC" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aMD" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "Fore Maintenance APC"; + pixel_x = -25; + pixel_y = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aME" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "Fore Asteroid Hallway APC"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aMF" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/camera{ + c_tag = "Security SMES"; + dir = 6; + icon_state = "camera" + }, +/obj/structure/chair/stool, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aMG" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/computer/station_alert, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aMH" = ( +/obj/structure/rack, +/obj/item/weapon/storage/briefcase, +/obj/item/weapon/storage/briefcase, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aMI" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aMJ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aMK" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aML" = ( +/obj/effect/landmark/start/lawyer, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aMM" = ( +/obj/structure/table/wood, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/weapon/pen, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aMN" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/obj/machinery/newscaster/security_unit{ + pixel_x = 32 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aMO" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (WEST)"; + icon_state = "redcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aMP" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plasteel/red/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aMQ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/courtroom) +"aMR" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/courtroom) +"aMS" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/courtroom) +"aMT" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/courtroom) +"aMU" = ( +/obj/machinery/camera{ + c_tag = "Courtroom Jury East"; + dir = 9; + icon_state = "camera"; + tag = "icon-camera (NORTHWEST)" + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/courtroom) +"aMV" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aMW" = ( +/obj/machinery/door/airlock{ + name = "Bathroom" + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet) +"aMX" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1; + on = 1 + }, +/turf/open/floor/plasteel/barber{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aMY" = ( +/obj/item/weapon/twohanded/required/kirbyplants{ + icon_state = "plant-22" + }, +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (EAST)"; + icon_state = "neutral"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aMZ" = ( +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -28 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aNa" = ( +/obj/structure/closet/wardrobe/mixed, +/obj/machinery/camera{ + c_tag = "Dorm Lockers"; + dir = 9; + icon_state = "camera"; + tag = "icon-camera (NORTHWEST)" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aNb" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "hopshutter" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aNc" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/northleft{ + layer = 2.9; + level = 2; + name = "Desk Door"; + req_access_txt = "57" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "hopshutter" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aNd" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/darkblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 8; + tag = "icon-darkblue (WEST)" + }, +/area/bridge) +"aNe" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aNf" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/darkblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aNg" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/obj/machinery/holopad, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aNh" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/darkblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aNi" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/darkblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 4; + tag = "icon-darkblue (EAST)" + }, +/area/bridge) +"aNj" = ( +/obj/structure/table, +/obj/item/weapon/storage/toolbox/mechanical, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aNk" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aNl" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aNm" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aNn" = ( +/obj/machinery/power/terminal{ + icon_state = "term"; + dir = 1 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aNo" = ( +/obj/item/chair, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aNp" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aNq" = ( +/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/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aNr" = ( +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; + icon_state = "space"; + layer = 4; + name = "EXTERNAL AIRLOCK"; + pixel_x = -32; + pixel_y = 0 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Cargo Quantum Pad" + }) +"aNs" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Cargo Quantum Pad" + }) +"aNt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/noticeboard{ + dir = 8; + icon_state = "nboard00"; + pixel_x = 32; + pixel_y = 0; + tag = "icon-nboard00 (WEST)" + }, +/obj/item/weapon/paper{ + info = "
Dummies Guide To Quantum Pads


Do you hate the concept of having to use your legs, let alone walk to places? Well, with the Quantum Pad (tm), never again will the fear of cardio keep you from going places!

How to set up your Quantum Pad(tm)


1.Unscrew the Quantum Pad(tm) you wish to link.
2. Use your multi-tool to cache the buffer of the Quantum Pad(tm) you wish to link.
3. Apply the multi-tool to the secondary Quantum Pad(tm) you wish to link to the first Quantum Pad(tm)

If you followed these instructions carefully, your Quantum Pad(tm) should now be properly linked together for near-instant movement across the station! Bear in mind that this is technically a one-way teleport, so you'll need to do the same process with the secondary pad to the first one if you wish to travel between both.
"; + name = "Quantum Pad For Dummies" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Cargo Quantum Pad" + }) +"aNu" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel/brown/corner{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + dir = 1; + tag = "icon-browncorner (NORTH)" + }, +/area/quartermaster/office) +"aNv" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/brown/corner{ + tag = "icon-browncorner (EAST)"; + icon_state = "browncorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aNw" = ( +/obj/structure/rack, +/obj/item/clothing/suit/space/fragile, +/obj/item/clothing/head/helmet/space/fragile, +/turf/open/floor/plating/asteroid, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aNx" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aNy" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "Fore Asteroid Maintenance APC"; + pixel_x = 23; + pixel_y = 2 + }, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aNz" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aNA" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aNB" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aNC" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Security SMES Access"; + req_access_txt = "10;11;12" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aND" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aNE" = ( +/obj/machinery/power/terminal{ + tag = "icon-term (EAST)"; + icon_state = "term"; + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1; + d2 = 2 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aNF" = ( +/obj/machinery/power/smes/engineering, +/obj/structure/cable/orange, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aNG" = ( +/obj/structure/table/wood, +/obj/item/device/taperecorder, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aNH" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aNI" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aNJ" = ( +/obj/structure/table/wood, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/weapon/pen, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aNK" = ( +/obj/machinery/photocopier, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aNL" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aNM" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aNN" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aNO" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/button/door{ + id = "lawyerexterior"; + name = "Privacy Shutters"; + pixel_x = 0; + pixel_y = -24 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aNP" = ( +/obj/structure/closet/lawcloset, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aNQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aNR" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/corner{ + icon_state = "redcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aNS" = ( +/obj/structure/table, +/obj/item/weapon/book/manual/wiki/security_space_law, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/courtroom) +"aNT" = ( +/obj/machinery/light, +/obj/structure/table, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/courtroom) +"aNU" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/courtroom) +"aNV" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/courtroom) +"aNW" = ( +/obj/machinery/vending/coffee, +/obj/structure/extinguisher_cabinet{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/courtroom) +"aNX" = ( +/obj/machinery/light/small, +/obj/structure/closet/emcloset, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aNY" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/toilet{ + dir = 4 + }, +/obj/machinery/button/door{ + id = "b1"; + name = "Privacy Bolts"; + normaldoorcontrol = 1; + pixel_x = -24 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet) +"aNZ" = ( +/obj/machinery/door/airlock{ + id_tag = "b1" + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet) +"aOa" = ( +/obj/machinery/airalarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, +/obj/machinery/camera{ + c_tag = "Dorm Bathroom"; + dir = 1; + icon_state = "camera"; + network = list("SS13") + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet) +"aOb" = ( +/obj/structure/table, +/obj/machinery/camera{ + c_tag = "Dorm Laundry Room"; + dir = 1; + icon_state = "camera"; + network = list("SS13") + }, +/turf/open/floor/plasteel/barber{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aOc" = ( +/obj/structure/table, +/turf/open/floor/plasteel/barber{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aOd" = ( +/obj/structure/closet/crate/bin{ + name = "laundry bin" + }, +/turf/open/floor/plasteel/barber{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aOe" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plasteel/blue/side{ + tag = "icon-blue (NORTHWEST)"; + icon_state = "blue"; + dir = 9; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aOf" = ( +/turf/open/floor/plasteel/blue/side{ + tag = "icon-blue (NORTH)"; + icon_state = "blue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aOg" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/flasher{ + id = "hopflash"; + pixel_x = 24 + }, +/turf/open/floor/plasteel/blue/side{ + tag = "icon-blue (NORTHEAST)"; + icon_state = "blue"; + dir = 5; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aOh" = ( +/obj/machinery/camera{ + c_tag = "Bridge Midway 3"; + dir = 1; + icon_state = "camera"; + network = list("SS13") + }, +/turf/open/floor/plasteel/darkblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 8; + tag = "icon-darkblue (WEST)" + }, +/area/bridge) +"aOi" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"aOj" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aOk" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aOl" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aOm" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/chair/stool, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aOn" = ( +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/computer/station_alert, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aOo" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/turf_decal/stripes/asteroid/line, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aOp" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aOq" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aOr" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aOs" = ( +/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aOt" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aOu" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/space, +/area/space) +"aOv" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/space, +/area/space) +"aOw" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Cargo Quantum Pad" + }) +"aOx" = ( +/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Cargo Quantum Pad" + }) +"aOy" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Cargo Quantum Pad" + }) +"aOz" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/teleporter{ + name = "Cargo Quantum Pad" + }) +"aOA" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/teleporter{ + name = "Cargo Quantum Pad" + }) +"aOB" = ( +/obj/structure/table, +/obj/item/device/multitool, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/item/weapon/screwdriver, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/teleporter{ + name = "Cargo Quantum Pad" + }) +"aOC" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/brown/corner{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + dir = 1; + tag = "icon-browncorner (NORTH)" + }, +/area/quartermaster/office) +"aOD" = ( +/obj/structure/table, +/obj/structure/disposalpipe/segment, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = 28; + pixel_y = 0 + }, +/turf/open/floor/plasteel/brown/corner{ + tag = "icon-browncorner (EAST)"; + icon_state = "browncorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aOE" = ( +/obj/effect/landmark/blobstart, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aOF" = ( +/obj/structure/closet, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aOG" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aOH" = ( +/obj/structure/girder, +/obj/structure/grille, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aOI" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aOJ" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Security SMES Access"; + req_access_txt = "10;11;12" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aOK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aOL" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/sign/electricshock{ + pixel_x = 32 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aOM" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/detectives_office) +"aON" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/door/poddoor/shutters{ + id = "lawyerexterior"; + name = "privacy shutters" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aOO" = ( +/obj/machinery/door/airlock{ + name = "Law Office"; + req_access_txt = "38" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aOP" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/door/poddoor/shutters{ + id = "lawyerexterior"; + name = "privacy shutters" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"aOQ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/airlock/glass{ + name = "Brig Lobby" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aOR" = ( +/obj/machinery/door/airlock/glass{ + name = "Brig Lobby" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aOS" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"aOT" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/window/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aOU" = ( +/obj/machinery/door/airlock/glass{ + name = "Courtroom" + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/courtroom) +"aOV" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/window/fulltile, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"aOW" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/maintenance{ + name = "Fore Asteroid Maintenance Access"; + req_access_txt = "12" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aOX" = ( +/obj/machinery/door/airlock/glass{ + name = "Locker Room" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aOY" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/window/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aOZ" = ( +/obj/machinery/door/airlock/glass{ + name = "Locker Room" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"aPa" = ( +/obj/machinery/vending/cigarette, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aPb" = ( +/obj/machinery/vending/cola, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aPc" = ( +/obj/machinery/vending/snack, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aPd" = ( +/obj/machinery/door/poddoor/preopen{ + id = "hopexternal" + }, +/turf/open/floor/plasteel/blue/corner{ + tag = "icon-bluecorner (NORTH)"; + icon_state = "bluecorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aPe" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "hopexternal" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aPf" = ( +/obj/machinery/door/poddoor/preopen{ + id = "hopexternal" + }, +/turf/open/floor/plasteel/blue/corner{ + tag = "icon-bluecorner (EAST)"; + icon_state = "bluecorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"aPg" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aPh" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/maintenance{ + name = "Command SMES Access"; + req_access_txt = "10;11;12" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aPi" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Fore Asteroid Maintenance Access"; + req_access_txt = "12" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aPj" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Fore Asteroid Maintenance Access"; + req_access_txt = "12" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aPk" = ( +/obj/machinery/door/airlock/maintenance{ + name = "External Maintenance Access"; + req_access_txt = "12" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aPl" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aPm" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"aPn" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"aPo" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"aPp" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"aPq" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"aPr" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"aPs" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/window/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Cargo Quantum Pad" + }) +"aPt" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/airlock/glass{ + name = "Cargo Quantum Pad" + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/teleporter{ + name = "Cargo Quantum Pad" + }) +"aPu" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/window/fulltile, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Cargo Quantum Pad" + }) +"aPv" = ( +/obj/machinery/door/airlock/maintenance{ + name = "External Maintenance Access"; + req_access_txt = "12" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aPw" = ( +/obj/machinery/door/airlock/maintenance{ + name = "External Maintenance Access"; + req_access_txt = "12" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aPx" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/brown/corner{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + dir = 1; + tag = "icon-browncorner (NORTH)" + }, +/area/quartermaster/office) +"aPy" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/window/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aPz" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/camera{ + c_tag = "Cargo Lobby"; + dir = 8; + icon_state = "camera"; + network = list("SS13","QM"); + tag = "icon-camera (WEST)" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/brown/corner{ + tag = "icon-browncorner (EAST)"; + icon_state = "browncorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aPA" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aPB" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aPC" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 2; + icon_state = "pipe-j2s"; + name = "disposal pipe - Security"; + sortType = 7 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aPD" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/girder, +/obj/structure/grille, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aPE" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aPF" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Port Asteroid Maintenance"; + req_access_txt = "12" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aPG" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 8 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aPH" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aPI" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aPJ" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aPK" = ( +/obj/machinery/camera{ + c_tag = "Command Asteroid Hall 10"; + dir = 6; + icon_state = "camera" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aPL" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aPM" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 32 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aPN" = ( +/obj/machinery/camera{ + c_tag = "Command Asteroid Hall 2"; + dir = 6; + icon_state = "camera" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aPO" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aPP" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aPQ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aPR" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/sign/nanotrasen{ + pixel_y = 32 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aPS" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aPT" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/sign/nanotrasen{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aPU" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aPV" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aPW" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aPX" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = 32 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aPY" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aPZ" = ( +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQa" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQb" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQc" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Command Asteroid Hall 4"; + dir = 6; + icon_state = "camera" + }, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQe" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQf" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQg" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQh" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQi" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Command Asteroid Hall 5"; + dir = 6; + icon_state = "camera" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQj" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j2"; + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQk" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQl" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQm" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQn" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQo" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQp" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Command Asteroid Hall 6"; + dir = 6; + icon_state = "camera" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQq" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQr" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQs" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Command Asteroid Hall 7"; + dir = 6; + icon_state = "camera" + }, +/turf/open/floor/plasteel/blue/corner{ + tag = "icon-bluecorner (EAST)"; + icon_state = "bluecorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQt" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/blue/corner{ + tag = "icon-bluecorner (EAST)"; + icon_state = "bluecorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQu" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/blue/corner{ + tag = "icon-bluecorner (EAST)"; + icon_state = "bluecorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQv" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/blue/corner{ + tag = "icon-bluecorner (EAST)"; + icon_state = "bluecorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQw" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel/blue/corner{ + tag = "icon-bluecorner (EAST)"; + icon_state = "bluecorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQx" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/blue/corner{ + tag = "icon-bluecorner (EAST)"; + icon_state = "bluecorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQy" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/blue/corner{ + tag = "icon-bluecorner (EAST)"; + icon_state = "bluecorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQz" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQA" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQB" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQC" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=Security"; + location = "CommandMiddle2"; + name = "navigation beacon (Command-Middle 2)" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQD" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Command Asteroid Hall 8"; + dir = 6; + icon_state = "camera" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQE" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQF" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQG" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQH" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQI" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/sign/map/left/ceres{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQJ" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQK" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQL" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQM" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQN" = ( +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQO" = ( +/obj/machinery/camera{ + c_tag = "Command Asteroid Hall 9"; + dir = 6; + icon_state = "camera" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQP" = ( +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQQ" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQR" = ( +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQS" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/floor/engine, +/area/space) +"aQT" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/camera{ + c_tag = "Core-Command-Cargo Bridge 2"; + network = list("SS13") + }, +/turf/open/floor/engine, +/area/space) +"aQU" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/camera{ + c_tag = "Core-Command-Cargo Bridge 3"; + network = list("SS13") + }, +/turf/open/floor/engine, +/area/space) +"aQV" = ( +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQW" = ( +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQX" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQY" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aQZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRa" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRb" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRc" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRd" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRe" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRf" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRg" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRh" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRi" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/brown/corner{ + tag = "icon-browncorner (EAST)"; + icon_state = "browncorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aRj" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aRk" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aRl" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Port Asteroid Maintenance"; + req_access_txt = "12" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aRm" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aRn" = ( +/obj/structure/table, +/obj/item/weapon/storage/toolbox/electrical{ + pixel_x = 1; + pixel_y = 5 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRo" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRp" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Security SMES Access"; + req_access_txt = "10;11;12" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRq" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRr" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/components/unary/vent_pump{ + on = 1 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRs" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRt" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRu" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRv" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRw" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1; + on = 1 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRx" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRy" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/components/unary/vent_pump{ + on = 1 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRz" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRA" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRB" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1; + on = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRC" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRD" = ( +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRE" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + on = 1 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRF" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRG" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRH" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRI" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRJ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1; + on = 1 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRK" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRL" = ( +/obj/effect/landmark/lightsout, +/obj/machinery/holopad, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRM" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRN" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRO" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRP" = ( +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRQ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRR" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRS" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9; + pixel_y = 0 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRT" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRU" = ( +/obj/effect/landmark/lightsout, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRV" = ( +/obj/machinery/holopad, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRW" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aRX" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aRY" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aRZ" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aSa" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/brown/corner{ + tag = "icon-browncorner (EAST)"; + icon_state = "browncorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aSb" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Fore Asteroid Maintenance Access"; + req_access_txt = "12" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aSc" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aSd" = ( +/obj/structure/table, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aSe" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aSf" = ( +/obj/structure/girder, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aSg" = ( +/obj/structure/girder, +/obj/structure/grille, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aSh" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/weapon/stock_parts/cell/high, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSi" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSj" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -22 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSk" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSl" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSm" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSn" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSo" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSp" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/sign/directions/science{ + pixel_x = 32; + pixel_y = -24 + }, +/obj/structure/sign/directions/supply{ + dir = 4; + icon_state = "direction_supply"; + pixel_x = 32; + pixel_y = -32; + tag = "icon-direction_supply (EAST)" + }, +/obj/structure/sign/directions/medical{ + dir = 4; + icon_state = "direction_med"; + pixel_x = 32; + pixel_y = -40; + tag = "icon-direction_med (EAST)" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSq" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSr" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSs" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSt" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSu" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -22 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSw" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSx" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSy" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSz" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSA" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSB" = ( +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -22 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSC" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSD" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/sign/directions/engineering{ + pixel_x = -32; + pixel_y = -24 + }, +/obj/structure/sign/directions/security{ + dir = 8; + icon_state = "direction_sec"; + pixel_x = -32; + pixel_y = -32; + tag = "icon-direction_sec (WEST)" + }, +/obj/structure/sign/directions/medical{ + dir = 4; + icon_state = "direction_med"; + pixel_x = -32; + pixel_y = -40; + tag = "icon-direction_med (EAST)" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSE" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=EngineeringMiddle"; + location = "CommandMiddle"; + name = "navigation beacon (Command-Middle)" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSF" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/sign/directions/supply{ + dir = 4; + icon_state = "direction_supply"; + pixel_x = 32; + pixel_y = -24; + tag = "icon-direction_supply (EAST)" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSG" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSH" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSI" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSJ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -22 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSL" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSM" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSN" = ( +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSO" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSP" = ( +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSQ" = ( +/obj/structure/window/reinforced, +/turf/open/floor/engine, +/area/space) +"aSR" = ( +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSS" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aST" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSU" = ( +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSV" = ( +/obj/machinery/camera{ + c_tag = "Cargo Asteroid Hall 1"; + dir = 1; + icon_state = "camera"; + network = list("SS13") + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSW" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSX" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSY" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aSZ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aTa" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aTb" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aTc" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aTd" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/structure/sign/directions/evac{ + pixel_x = -32; + pixel_y = -24 + }, +/obj/structure/sign/directions/medical{ + pixel_x = -32; + pixel_y = -32 + }, +/obj/structure/sign/directions/security{ + dir = 8; + icon_state = "direction_sec"; + pixel_x = -32; + pixel_y = -40; + tag = "icon-direction_sec (WEST)" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aTe" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=CommandMiddle"; + location = "Cargo"; + name = "navigation beacon (Cargo)" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aTf" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aTg" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aTh" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/brown/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aTi" = ( +/obj/machinery/light/small, +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aTj" = ( +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aTk" = ( +/obj/structure/rack, +/turf/open/floor/plating/asteroid, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aTl" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/maintenance{ + id_tag = "GulagCivExit3"; + name = "External Maintenance Access"; + req_access_txt = "12" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aTm" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Security Quantum Pad" + }) +"aTn" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/window/fulltile, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Security Quantum Pad" + }) +"aTo" = ( +/obj/machinery/door/airlock/glass{ + name = "Security Quantum Pad" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/teleporter{ + name = "Security Quantum Pad" + }) +"aTp" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/window/fulltile, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Security Quantum Pad" + }) +"aTq" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"aTr" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"aTs" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"aTt" = ( +/obj/machinery/door/airlock{ + name = "Custodial Closet"; + req_access_txt = "26" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"aTu" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aTv" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aTw" = ( +/obj/machinery/door/airlock/vault{ + icon_state = "door_locked"; + locked = 1; + req_access_txt = "53" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aTx" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aTy" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aTz" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/airlock/atmos{ + name = "Command Atmospherics Checkpoint"; + req_access_txt = "24" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aTA" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/door/airlock/maintenance{ + name = "External Maintenance Access"; + req_access_txt = "12" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aTB" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/airlock/maintenance{ + name = "External Maintenance Access"; + req_access_txt = "12" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aTC" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"aTD" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"aTE" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"aTF" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/airlock/atmos{ + name = "Cargo Atmospherics Checkpoint"; + req_access_txt = "24" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aTG" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aTH" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aTI" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/brown/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aTJ" = ( +/turf/open/floor/plasteel/brown/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aTK" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/plasteel/brown/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"aTL" = ( +/obj/structure/closet/crate, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating/asteroid, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aTM" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/rack, +/obj/item/weapon/storage/toolbox/electrical{ + pixel_x = 1; + pixel_y = 5 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aTN" = ( +/obj/machinery/door/airlock/maintenance{ + id_tag = "GulagCivExit2"; + name = "Fore Asteroid Maintenance Access"; + req_access_txt = "12" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aTO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aTP" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aTQ" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/button/door{ + id = "GulagCivExit3"; + name = "Gulag Door Exit"; + normaldoorcontrol = 1; + pixel_x = 0; + pixel_y = 24 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aTR" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aTS" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aTT" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aTU" = ( +/obj/structure/table, +/obj/item/device/multitool, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = -28; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/item/weapon/screwdriver, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/teleporter{ + name = "Security Quantum Pad" + }) +"aTV" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/teleporter{ + name = "Security Quantum Pad" + }) +"aTW" = ( +/obj/structure/noticeboard{ + dir = 8; + pixel_x = 27; + pixel_y = 0 + }, +/obj/item/weapon/paper{ + info = "
Dummies Guide To Quantum Pads


Do you hate the concept of having to use your legs, let alone walk to places? Well, with the Quantum Pad (tm), never again will the fear of cardio keep you from going places!

How to set up your Quantum Pad(tm)


1.Unscrew the Quantum Pad(tm) you wish to link.
2. Use your multi-tool to cache the buffer of the Quantum Pad(tm) you wish to link.
3. Apply the multi-tool to the secondary Quantum Pad(tm) you wish to link to the first Quantum Pad(tm)

If you followed these instructions carefully, your Quantum Pad(tm) should now be properly linked together for near-instant movement across the station! Bear in mind that this is technically a one-way teleport, so you'll need to do the same process with the secondary pad to the first one if you wish to travel between both.
"; + name = "Quantum Pad For Dummies" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/teleporter{ + name = "Security Quantum Pad" + }) +"aTX" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 1 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aTY" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 1 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aTZ" = ( +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "Command Asteroid Solars Maintenance APC"; + pixel_x = 23; + pixel_y = 2 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aUa" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/disposaloutlet{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"aUb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/window/eastright{ + req_access_txt = "26" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"aUc" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"aUd" = ( +/obj/structure/bed/dogbed, +/mob/living/simple_animal/hostile/lizard{ + name = "Wags-His-Tail"; + real_name = "Wags-His-Tail" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"aUe" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1 + }, +/obj/vehicle/janicart, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"aUf" = ( +/obj/vehicle/janicart, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/sign/map/left/ceres{ + pixel_y = 32 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"aUg" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/mousetraps, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/obj/item/weapon/storage/box/mousetraps, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"aUh" = ( +/obj/structure/table, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/item/weapon/paper{ + info = "You got a big job ahead of you, pal. This is a big station, lots of floors and assholes to dirty said floors without any thought for you. It might not be a bad idea to check on the external waste belts every now and again to make sure some foriegn object hasn't clogged the disposal loop, either."; + name = "Janitor Notice" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"aUi" = ( +/obj/machinery/light_switch{ + pixel_y = 25 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"aUj" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"aUk" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/nuke_storage) +"aUl" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/camera{ + c_tag = "Vault Airlock"; + dir = 5; + icon_state = "camera"; + tag = "icon-camera (NORTHEAST)" + }, +/obj/machinery/holopad, +/turf/open/floor/plasteel/black, +/area/ai_monitored/nuke_storage) +"aUm" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel/black, +/area/ai_monitored/nuke_storage) +"aUn" = ( +/obj/structure/table, +/obj/item/weapon/phone, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black, +/area/ai_monitored/nuke_storage) +"aUo" = ( +/obj/structure/table, +/obj/item/weapon/wrench, +/obj/item/clothing/glasses/meson, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aUp" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Mix Output"; + on = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aUq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aUr" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aUs" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aUt" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aUu" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aUv" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aUw" = ( +/obj/structure/closet/firecloset/full, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aUx" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aUy" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aUz" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aUA" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aUB" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9; + pixel_y = 0 + }, +/turf/open/space, +/area/space) +"aUC" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/open/space, +/area/space) +"aUD" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8; + name = "Cargo Atmospherics Checkpoint"; + req_access_txt = "24" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aUE" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aUF" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aUG" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Mix Input"; + on = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aUH" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aUI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aUJ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aUK" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Mix Output"; + on = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aUL" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/machinery/light/small, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aUM" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 1 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aUN" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/camera{ + c_tag = "Cargo Asteroid Hall 2"; + dir = 4; + icon_state = "camera" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aUO" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aUP" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aUQ" = ( +/obj/machinery/button/door{ + id = "GulagCivExit2"; + name = "Gulag Door Exit"; + normaldoorcontrol = 1; + pixel_x = 0; + pixel_y = -24 + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aUR" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aUS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/airalarm{ + dir = 4; + icon_state = "alarm0"; + pixel_x = -22 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Security Quantum Pad" + }) +"aUT" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Security Quantum Pad" + }) +"aUU" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/power/apc{ + dir = 4; + name = "Security Quantum Pad APC"; + pixel_x = 23; + pixel_y = 2 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Security Quantum Pad" + }) +"aUV" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating/asteroid, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aUW" = ( +/obj/structure/girder, +/obj/item/stack/sheet/metal, +/turf/open/floor/plating/asteroid, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aUX" = ( +/obj/structure/rack, +/obj/item/clothing/suit/space/fragile, +/obj/item/clothing/head/helmet/space/fragile, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"aUY" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"aUZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9; + pixel_y = 0 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"aVa" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/obj/item/device/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = -29; + pixel_y = 0 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/nuke_storage) +"aVb" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/nuke_storage) +"aVc" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/nuke_storage) +"aVd" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/camera{ + c_tag = "Command Atmospherics Checkpoint"; + dir = 5; + icon_state = "camera"; + tag = "icon-camera (NORTHEAST)" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aVe" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aVf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aVg" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/table, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aVh" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aVi" = ( +/obj/machinery/light/small, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aVj" = ( +/obj/effect/turf_decal/stripes/line{ + 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 + }, +/obj/machinery/camera{ + c_tag = "Cargo Atmospherics Checkpoint"; + dir = 5; + icon_state = "camera"; + tag = "icon-camera (NORTHEAST)" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aVk" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aVl" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aVm" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aVn" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/disposaloutlet, +/turf/open/floor/plating/airless, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aVo" = ( +/obj/machinery/light/small, +/obj/item/device/assembly/mousetrap/armed, +/turf/open/floor/plating/asteroid, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aVp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Security Quantum Pad" + }) +"aVq" = ( +/obj/machinery/quantumpad, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Security Quantum Pad" + }) +"aVr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Security Quantum Pad" + }) +"aVs" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Security Quantum Pad" + }) +"aVt" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aVu" = ( +/obj/structure/closet/jcloset, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"aVv" = ( +/obj/structure/chair/stool, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"aVw" = ( +/obj/item/weapon/mop, +/obj/item/weapon/reagent_containers/glass/bucket, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"aVx" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/nuke_storage) +"aVy" = ( +/turf/open/floor/plasteel/stairs{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/nuke_storage) +"aVz" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/nuke_storage) +"aVA" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aVB" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aVC" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/table, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aVD" = ( +/obj/structure/table, +/obj/item/weapon/wrench, +/obj/item/clothing/glasses/meson, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aVE" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aVF" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light/small, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aVG" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aVH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aVI" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aVJ" = ( +/obj/machinery/camera{ + c_tag = "Command Asteroid Hallway 1"; + dir = 4; + icon_state = "camera" + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aVK" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aVL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + on = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Security Quantum Pad" + }) +"aVM" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Security Quantum Pad" + }) +"aVN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'KEEP CLEAR OF PAD WHEN IN USE'."; + name = "KEEP CLEAR OF PAD WHEN IN USE"; + pixel_x = 32; + pixel_y = 0 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1; + on = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Security Quantum Pad" + }) +"aVO" = ( +/obj/effect/turf_decal/stripes/asteroid/line, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aVP" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating/asteroid, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aVQ" = ( +/obj/structure/table, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/weapon/pen, +/obj/item/key/janitor, +/obj/machinery/camera{ + c_tag = "Custodials"; + dir = 5; + icon_state = "camera"; + tag = "icon-camera (NORTHEAST)" + }, +/obj/item/key/janitor, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"aVR" = ( +/obj/structure/table, +/obj/item/weapon/grenade/chem_grenade/cleaner, +/obj/item/weapon/grenade/chem_grenade/cleaner, +/obj/item/weapon/grenade/chem_grenade/cleaner, +/obj/machinery/requests_console{ + department = "Janitorial"; + departmentType = 1; + pixel_y = -29 + }, +/obj/item/weapon/reagent_containers/spray/cleaner, +/obj/item/weapon/grenade/chem_grenade/cleaner, +/obj/item/weapon/grenade/chem_grenade/cleaner, +/obj/item/weapon/grenade/chem_grenade/cleaner, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"aVS" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/lights/mixed, +/obj/item/weapon/storage/box/lights/mixed, +/obj/item/weapon/storage/box/lights/mixed, +/obj/item/weapon/storage/box/lights/mixed, +/obj/machinery/light, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"aVT" = ( +/obj/structure/reagent_dispensers/watertank/high, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"aVU" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"aVV" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/water_vapor, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"aVW" = ( +/obj/structure/janitorialcart, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"aVX" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/nuke_storage) +"aVY" = ( +/obj/machinery/door/airlock/vault{ + icon_state = "door_locked"; + locked = 1; + req_access_txt = "53" + }, +/turf/open/floor/plasteel/black, +/area/ai_monitored/nuke_storage) +"aVZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/nuke_storage) +"aWa" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aWb" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aWc" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aWd" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aWe" = ( +/obj/machinery/camera{ + c_tag = "Command Asteroid Hall 10"; + dir = 8; + icon_state = "camera"; + tag = "icon-camera (WEST)" + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aWf" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aWg" = ( +/obj/structure/rack, +/obj/item/clothing/suit/space/fragile, +/obj/item/clothing/head/helmet/space/fragile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aWh" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aWi" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aWj" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aWk" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aWl" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Cargo SMES Access"; + req_access_txt = "10;11;12" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aWm" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aWn" = ( +/obj/machinery/camera{ + c_tag = "Cargo Bay SMES"; + dir = 6; + icon_state = "camera" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aWo" = ( +/obj/structure/closet, +/turf/open/floor/plating/asteroid, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aWp" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/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/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aWq" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Security Quantum Pad" + }) +"aWr" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Command Asteroid Solar Maintenance" + }) +"aWs" = ( +/turf/closed/wall/r_wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Command Asteroid Solar Maintenance" + }) +"aWt" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/maintenance{ + name = "Command Asteroid Solars"; + req_access_txt = "10;11;12" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Command Asteroid Solar Maintenance" + }) +"aWu" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"aWv" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/black, +/area/ai_monitored/nuke_storage) +"aWw" = ( +/turf/open/floor/plasteel/black, +/area/ai_monitored/nuke_storage) +"aWx" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/black, +/area/ai_monitored/nuke_storage) +"aWy" = ( +/turf/open/space, +/area/mine/unexplored{ + name = "Command Asteroid" + }) +"aWz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aWA" = ( +/obj/effect/turf_decal/stripes/line, +/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/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aWB" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Mix Input"; + on = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aWC" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aWD" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/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/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aWE" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aWF" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "Cargo Hallway APC"; + pixel_x = 23; + pixel_y = 2 + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aWG" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 2 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aWH" = ( +/obj/machinery/power/smes, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Command Asteroid Solar Maintenance" + }) +"aWI" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Command Asteroid Solar Maintenance" + }) +"aWJ" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Command Asteroid Solar Maintenance" + }) +"aWK" = ( +/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/camera{ + c_tag = "Vault" + }, +/turf/open/floor/circuit, +/area/ai_monitored/nuke_storage) +"aWL" = ( +/turf/open/floor/circuit, +/area/ai_monitored/nuke_storage) +"aWM" = ( +/obj/machinery/computer/bank_machine, +/turf/open/floor/circuit, +/area/ai_monitored/nuke_storage) +"aWN" = ( +/obj/structure/safe, +/obj/item/weapon/twohanded/fireaxe, +/obj/item/clothing/head/bearpelt, +/obj/item/bear_armor, +/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka/badminka, +/obj/item/weapon/dice/d20{ + desc = "A die with twenty sides. You feel absolutely normal while looking at this."; + name = "Die of Mediocre Rolling Capability" + }, +/turf/open/floor/circuit, +/area/ai_monitored/nuke_storage) +"aWO" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aWP" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 2 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aWQ" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/effect/turf_decal/stripes/asteroid/line, +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aWR" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aWS" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aWT" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aWU" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aWV" = ( +/obj/machinery/power/terminal{ + icon_state = "term"; + dir = 1 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Command Asteroid Solar Maintenance" + }) +"aWW" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Command Asteroid Solar Maintenance" + }) +"aWX" = ( +/obj/structure/cable/orange, +/obj/machinery/power/apc{ + dir = 4; + name = "Command Asteroid Solars APC"; + pixel_x = 23; + pixel_y = 2 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Command Asteroid Solar Maintenance" + }) +"aWY" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aWZ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aXa" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Fore Asteroid Solar Maintenance" + }) +"aXb" = ( +/turf/closed/wall/r_wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Fore Asteroid Solar Maintenance" + }) +"aXc" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Fore Asteroid Solars"; + req_access_txt = "10;11;12" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Fore Asteroid Solar Maintenance" + }) +"aXd" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aXe" = ( +/obj/structure/chair/stool, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aXf" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/computer/station_alert, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aXg" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aXh" = ( +/obj/machinery/light/small, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aXi" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aXj" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aXk" = ( +/obj/structure/cable{ + icon_state = "0-4"; + d2 = 4 + }, +/obj/machinery/power/solar_control{ + id = "commandsolar"; + name = "Command Asteroid Solar Control"; + track = 0 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Command Asteroid Solar Maintenance" + }) +"aXl" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Command Asteroid Solar Maintenance" + }) +"aXm" = ( +/obj/structure/table, +/obj/item/weapon/storage/toolbox/electrical, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Command Asteroid Solar Maintenance" + }) +"aXn" = ( +/obj/structure/grille, +/turf/open/space, +/area/space) +"aXo" = ( +/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/light{ + dir = 8 + }, +/turf/open/floor/circuit, +/area/ai_monitored/nuke_storage) +"aXp" = ( +/obj/machinery/nuclearbomb/selfdestruct, +/turf/open/floor/circuit, +/area/ai_monitored/nuke_storage) +"aXq" = ( +/obj/structure/filingcabinet, +/obj/item/weapon/folder/documents, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/turf/open/floor/circuit, +/area/ai_monitored/nuke_storage) +"aXr" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 1; + name = "Command Atmospherics Checkpoint"; + req_access_txt = "24" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aXs" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aXt" = ( +/obj/machinery/power/smes, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Fore Asteroid Solar Maintenance" + }) +"aXu" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Fore Asteroid Solar Maintenance" + }) +"aXv" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Fore Asteroid Solar Maintenance" + }) +"aXw" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aXx" = ( +/obj/machinery/door/airlock/maintenance{ + name = "External Maintenance Access"; + req_access_txt = "12" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aXy" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aXz" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4"; + tag = "" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aXA" = ( +/obj/machinery/power/terminal{ + tag = "icon-term (EAST)"; + icon_state = "term"; + dir = 4 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/sign/electricshock{ + pixel_y = -32 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aXB" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/space, +/area/space) +"aXC" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/obj/structure/girder, +/obj/structure/grille, +/turf/open/space, +/area/space) +"aXD" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"aXE" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Command Asteroid Solar Maintenance" + }) +"aXF" = ( +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 4; + name = "Solar Maintenance"; + req_access = null; + req_access_txt = "10; 13" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Command Asteroid Solar Maintenance" + }) +"aXG" = ( +/obj/machinery/camera{ + c_tag = "Vault"; + dir = 5; + icon_state = "camera"; + tag = "icon-camera (NORTHEAST)" + }, +/turf/open/floor/circuit, +/area/ai_monitored/nuke_storage) +"aXH" = ( +/obj/machinery/holopad, +/turf/open/floor/plasteel/black, +/area/ai_monitored/nuke_storage) +"aXI" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"aXJ" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"aXK" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/space, +/area/space) +"aXL" = ( +/obj/machinery/power/terminal{ + icon_state = "term"; + dir = 1 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Fore Asteroid Solar Maintenance" + }) +"aXM" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Fore Asteroid Solar Maintenance" + }) +"aXN" = ( +/obj/structure/cable/orange, +/obj/machinery/power/apc{ + dir = 4; + name = "Fore Asteroid Solars APC"; + pixel_x = 23; + pixel_y = 2 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Fore Asteroid Solar Maintenance" + }) +"aXO" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aXP" = ( +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = 28; + pixel_y = 0 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aXQ" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aXR" = ( +/obj/structure/girder, +/obj/structure/grille, +/turf/open/floor/plating/airless, +/area/space) +"aXS" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/girder, +/obj/structure/grille, +/turf/open/space, +/area/space) +"aXT" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Command Asteroid Solar Maintenance" + }) +"aXU" = ( +/obj/item/weapon/twohanded/required/kirbyplants{ + icon_state = "plant-09" + }, +/turf/open/floor/circuit, +/area/ai_monitored/nuke_storage) +"aXV" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1; + on = 1 + }, +/turf/open/floor/circuit, +/area/ai_monitored/nuke_storage) +"aXW" = ( +/obj/machinery/computer/bank_machine, +/obj/machinery/light, +/turf/open/floor/circuit, +/area/ai_monitored/nuke_storage) +"aXX" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/grille, +/turf/open/space, +/area/space) +"aXY" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/grille, +/turf/open/space, +/area/space) +"aXZ" = ( +/obj/machinery/power/solar_control{ + id = "foresolar"; + name = "Fore Asteroid Solar Control"; + track = 0 + }, +/obj/structure/cable{ + icon_state = "0-4"; + d2 = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Fore Asteroid Solar Maintenance" + }) +"aYa" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Fore Asteroid Solar Maintenance" + }) +"aYb" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Fore Asteroid Solar Maintenance" + }) +"aYc" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aYd" = ( +/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/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aYe" = ( +/obj/structure/cable{ + icon_state = "0-4"; + d2 = 4 + }, +/obj/machinery/power/solar{ + id = "commandsolar"; + name = "Fore Solar Array" + }, +/turf/open/floor/plasteel/airless/solarpanel, +/area/space) +"aYf" = ( +/obj/structure/lattice/catwalk, +/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/open/space, +/area/space) +"aYg" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/solar{ + id = "commandsolar"; + name = "Fore Solar Array" + }, +/turf/open/floor/plasteel/airless/solarpanel, +/area/space) +"aYh" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/nuke_storage) +"aYi" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Fore Asteroid Solar Maintenance" + }) +"aYj" = ( +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 4; + name = "Solar Maintenance"; + req_access = null; + req_access_txt = "10; 13" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Fore Asteroid Solar Maintenance" + }) +"aYk" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 2 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aYl" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/machinery/camera{ + c_tag = "Cargo Asteroid Hall 3"; + dir = 4; + icon_state = "camera" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aYm" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aYn" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/space, +/area/space) +"aYo" = ( +/obj/structure/cable{ + icon_state = "0-4"; + d2 = 4 + }, +/obj/machinery/power/solar{ + id = "foresolar"; + name = "Fore Solar Array" + }, +/turf/open/floor/plasteel/airless/solarpanel, +/area/space) +"aYp" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/space, +/area/space) +"aYq" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/solar{ + id = "foresolar"; + name = "Fore Solar Array" + }, +/turf/open/floor/plasteel/airless/solarpanel, +/area/space) +"aYr" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Fore Asteroid Solar Maintenance" + }) +"aYs" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aYt" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aYu" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/space, +/area/space) +"aYv" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"aYw" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4"; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/space, +/area/space) +"aYx" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"aYy" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/girder, +/obj/structure/grille, +/turf/open/space, +/area/space) +"aYz" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"aYA" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/space, +/area/space) +"aYB" = ( +/obj/structure/lattice/catwalk, +/obj/item/stack/cable_coil{ + amount = 2 + }, +/turf/open/space, +/area/space) +"aYC" = ( +/obj/structure/lattice/catwalk, +/obj/item/stack/cable_coil{ + amount = 30 + }, +/turf/open/space, +/area/space) +"aYD" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/space, +/area/space) +"aYE" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/power/tracker, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/space, +/area/space) +"aYF" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/space, +/area/space) +"aYG" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/space, +/area/space) +"aYH" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/space, +/area/space) +"aYI" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/camera{ + c_tag = "Command-Service Bridge"; + dir = 4; + icon_state = "camera" + }, +/turf/open/floor/engine, +/area/space) +"aYJ" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/space, +/area/space) +"aYK" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/machinery/camera{ + c_tag = "Command-Engineering Bridge"; + dir = 8; + network = list("SS13") + }, +/turf/open/floor/engine, +/area/space) +"aYL" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/power/tracker, +/turf/open/space, +/area/space) +"aYM" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/space, +/area/space) +"aYN" = ( +/turf/closed/wall, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aYO" = ( +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/deliveryChute{ + tag = "icon-intake (NORTH)"; + icon_state = "intake"; + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aYP" = ( +/turf/closed/mineral, +/area/mine/unexplored{ + name = "Civilian Asteroid" + }) +"aYQ" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/space, +/area/space) +"aYR" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aYS" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/disposaloutlet, +/turf/open/floor/plating, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aYT" = ( +/turf/closed/mineral/random/labormineral, +/area/mine/unexplored{ + name = "Civilian Asteroid" + }) +"aYU" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/camera{ + c_tag = "Medbay-Cargo Bridge"; + dir = 4; + icon_state = "camera" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"aYV" = ( +/obj/machinery/conveyor/auto{ + tag = "icon-conveyor0 (EAST)"; + icon_state = "conveyor0"; + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aYW" = ( +/obj/machinery/conveyor/auto{ + tag = "icon-conveyor0 (SOUTHEAST)"; + icon_state = "conveyor0"; + dir = 6 + }, +/turf/open/floor/plating, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aYX" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aYY" = ( +/obj/machinery/conveyor/auto, +/obj/structure/plasticflaps, +/turf/open/floor/plating, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aYZ" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/space, +/area/space) +"aZa" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/conveyor/auto{ + dir = 5; + icon_state = "conveyor0"; + verted = -1 + }, +/turf/open/floor/plating, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aZb" = ( +/obj/machinery/conveyor/auto{ + tag = "icon-conveyor0 (SOUTHWEST)"; + icon_state = "conveyor0"; + dir = 10 + }, +/turf/open/floor/plating, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aZc" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "Civilian Asteroid" + }) +"aZd" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"aZe" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"aZf" = ( +/turf/open/floor/plating/asteroid/airless, +/area/mine/unexplored{ + name = "Engineering Asteroid" + }) +"aZg" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/disposaloutlet{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aZh" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aZi" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/deliveryChute{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aZj" = ( +/obj/machinery/conveyor/auto{ + icon_state = "conveyor0"; + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aZk" = ( +/obj/machinery/conveyor/auto{ + icon_state = "conveyor0"; + dir = 8 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aZl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aZm" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aZn" = ( +/turf/closed/mineral, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aZo" = ( +/turf/closed/mineral/random/labormineral, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aZp" = ( +/obj/machinery/vending/hydronutrients, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"aZq" = ( +/obj/machinery/hydroponics/soil, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"aZr" = ( +/obj/structure/flora/ausbushes/lavendergrass, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"aZs" = ( +/obj/machinery/hydroponics/soil, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"aZt" = ( +/turf/closed/mineral, +/area/mine/unexplored{ + name = "Engineering Asteroid" + }) +"aZu" = ( +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; + icon_state = "space"; + layer = 4; + name = "EXTERNAL AIRLOCK"; + pixel_x = -32; + pixel_y = 0 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aZv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aZw" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aZx" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Port Asteroid Maintenance"; + req_access_txt = "12" + }, +/turf/open/floor/plating, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aZy" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 8 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aZz" = ( +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aZA" = ( +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aZB" = ( +/obj/structure/closet/firecloset/full, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aZC" = ( +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"aZD" = ( +/obj/structure/table/wood, +/obj/item/seeds/apple, +/obj/item/seeds/cherry, +/obj/item/seeds/grape, +/obj/item/seeds/poppy, +/obj/item/seeds/tea, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"aZE" = ( +/obj/structure/table/wood, +/obj/item/weapon/cultivator, +/obj/item/weapon/shovel/spade, +/obj/item/weapon/reagent_containers/glass/bucket, +/obj/item/weapon/storage/bag/plants/portaseeder, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"aZF" = ( +/obj/structure/flora/ausbushes/brflowers, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"aZG" = ( +/obj/machinery/hydroponics/soil, +/obj/machinery/airalarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, +/obj/machinery/camera{ + c_tag = "Rehabilitation Dome East 1"; + dir = 8; + network = list("SS13") + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"aZH" = ( +/turf/closed/mineral/random/labormineral, +/area/mine/unexplored{ + name = "Engineering Asteroid" + }) +"aZI" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "Engineering Asteroid" + }) +"aZJ" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 2 + }, +/turf/open/floor/plating, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aZK" = ( +/obj/structure/closet/crate, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aZL" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aZM" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/girder, +/obj/structure/grille, +/turf/open/space, +/area/space) +"aZN" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"aZO" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/machinery/camera{ + c_tag = "Rehabilitation Dome North"; + network = list("SS13") + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"aZP" = ( +/obj/structure/flora/ausbushes/ywflowers, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"aZQ" = ( +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"aZR" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 2; + on = 1 + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"aZS" = ( +/obj/machinery/hydroponics/soil, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/mob/living/simple_animal/butterfly, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"aZT" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"aZU" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"aZV" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/space, +/area/space) +"aZW" = ( +/turf/open/floor/plating, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aZX" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"aZY" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"aZZ" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 2 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"baa" = ( +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bab" = ( +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bac" = ( +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bad" = ( +/obj/structure/closet/crate, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bae" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"baf" = ( +/obj/structure/flora/ausbushes/fullgrass, +/mob/living/simple_animal/butterfly, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bag" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bah" = ( +/obj/structure/flora/ausbushes/pointybush, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bai" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"baj" = ( +/obj/structure/flora/ausbushes/ywflowers, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bak" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/sign/nosmoking_2{ + pixel_x = 32 + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bal" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bam" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"ban" = ( +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bao" = ( +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bap" = ( +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"baq" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 2 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bar" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/space, +/area/space) +"bas" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"bat" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/disposaloutlet, +/turf/open/floor/plating/airless, +/area/space) +"bau" = ( +/obj/structure/girder, +/obj/structure/grille, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bav" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"baw" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bax" = ( +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bay" = ( +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"baz" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Port Asteroid Maintenance"; + req_access_txt = "12" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"baA" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"baB" = ( +/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/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"baC" = ( +/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/sortjunction{ + tag = "icon-pipe-j1s (EAST)"; + name = "disposal pipe - Bar"; + icon_state = "pipe-j1s"; + dir = 4; + sortType = 19 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"baD" = ( +/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 + }, +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"baE" = ( +/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/light/small, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"baF" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"baG" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"baH" = ( +/turf/open/floor/plasteel/redblue{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"baI" = ( +/obj/structure/flora/ausbushes/leafybush, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"baJ" = ( +/obj/structure/flora/ausbushes/grassybush, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"baK" = ( +/mob/living/simple_animal/chicken/rabbit/normal, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"baL" = ( +/obj/structure/flora/ausbushes/reedbush, +/mob/living/simple_animal/butterfly, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"baM" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"baN" = ( +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"baO" = ( +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"baP" = ( +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"baQ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/fans/tiny, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"baR" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/space, +/area/space) +"baS" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"baT" = ( +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"baU" = ( +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"baV" = ( +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"baW" = ( +/turf/open/floor/plating/asteroid/airless, +/area/mine/unexplored{ + name = "Medical Asteroid" + }) +"baX" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"baY" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = -28; + pixel_y = 0 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"baZ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bba" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bbb" = ( +/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/door/airlock/maintenance{ + name = "Port Asteroid Maintenance"; + req_access_txt = "12" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bbc" = ( +/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 + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 8 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bbd" = ( +/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 + }, +/obj/item/device/assembly/mousetrap/armed, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bbe" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/effect/turf_decal/stripes/asteroid/line, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bbf" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bbg" = ( +/obj/structure/girder, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bbh" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bbi" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bbj" = ( +/obj/structure/flora/ausbushes/reedbush, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bbk" = ( +/obj/structure/sink/puddle, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bbl" = ( +/obj/structure/flora/ausbushes/stalkybush, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bbm" = ( +/turf/closed/mineral, +/area/hallway/primary/central) +"bbn" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bbo" = ( +/turf/closed/mineral, +/area/mine/unexplored{ + name = "Medical Asteroid" + }) +"bbp" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "Medical Asteroid" + }) +"bbq" = ( +/turf/closed/mineral/random/labormineral, +/area/mine/unexplored{ + name = "Medical Asteroid" + }) +"bbr" = ( +/obj/structure/sign/map/left/ceres{ + pixel_x = -32 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bbs" = ( +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bbt" = ( +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bbu" = ( +/obj/structure/grille/broken, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bbv" = ( +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "Port Hallway APC"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bbw" = ( +/obj/structure/table, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bbx" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/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/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bby" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bbz" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bbA" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bbB" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bbC" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Bar Backroom"; + req_access_txt = "25" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bbD" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bbE" = ( +/obj/effect/turf_decal/stripes/asteroid/line, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bbF" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bbG" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "Port Asteroid Maintence APC"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bbH" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/sign/map/left/ceres{ + pixel_x = 32; + pixel_y = -32 + }, +/obj/structure/flora/ausbushes/reedbush, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bbI" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/machinery/light, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bbJ" = ( +/turf/open/floor/plating/asteroid, +/area/hallway/primary/central) +"bbK" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bbL" = ( +/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/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bbM" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bbN" = ( +/obj/machinery/camera{ + c_tag = "Engineering Asteroid Hallway 7"; + dir = 4; + icon_state = "camera"; + network = list("SS13") + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bbO" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bbP" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/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/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bbQ" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bbR" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 2 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bbS" = ( +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bbT" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bbU" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bbV" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bbW" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bbX" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bbY" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/airalarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bbZ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/camera{ + c_tag = "Service Asteroid Hallway 1"; + dir = 4; + icon_state = "camera" + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bca" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "Bar APC"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bcb" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/table/wood, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bcc" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/table/wood, +/obj/machinery/reagentgrinder, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bcd" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bce" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/closet/secure_closet/bar{ + req_access_txt = "25" + }, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bcf" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/reagent_dispensers/beerkeg, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bcg" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/disposaloutlet, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bch" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bci" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Freezer"; + req_access_txt = "28" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bcj" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bck" = ( +/obj/structure/flora/ausbushes/ppflowers, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bcl" = ( +/obj/structure/flora/ausbushes/lavendergrass, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/camera{ + c_tag = "Rehabilitation Dome East 2"; + dir = 8; + network = list("SS13") + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bcm" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "Rehabilitation Dome APC"; + pixel_x = -25 + }, +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1; + d2 = 2 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bcn" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating/asteroid, +/area/hallway/primary/central) +"bco" = ( +/obj/structure/table, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bcp" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bcq" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = 29; + pixel_y = 0 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bcr" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bcs" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bct" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "Central Primary Hallway APC"; + pixel_x = 23; + pixel_y = 2 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bcu" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bcv" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bcw" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bcx" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bcy" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/closet/emcloset, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bcz" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bcA" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bcB" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bcC" = ( +/obj/machinery/camera{ + c_tag = "Bar Backroom"; + dir = 5; + icon_state = "camera"; + tag = "icon-camera (NORTHEAST)" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bcD" = ( +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bcE" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bcF" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bcG" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bcH" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bcI" = ( +/obj/structure/kitchenspike, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bcJ" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bcK" = ( +/obj/structure/kitchenspike, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bcL" = ( +/obj/machinery/camera{ + c_tag = "Freezer" + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bcM" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "Kitchen APC"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bcN" = ( +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bcO" = ( +/obj/structure/flora/ausbushes/stalkybush, +/obj/machinery/camera{ + c_tag = "Rehabilitation Dome West 1"; + dir = 4; + network = list("SS13") + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bcP" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bcQ" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/window/fulltile, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bcR" = ( +/obj/structure/table, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bcS" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/table, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bcT" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bcU" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating/asteroid, +/area/hallway/primary/central) +"bcV" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/rack, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bcW" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bcX" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bcY" = ( +/obj/structure/rack, +/obj/item/clothing/suit/space/fragile, +/obj/item/clothing/head/helmet/space/fragile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bcZ" = ( +/obj/structure/table, +/obj/item/stack/sheet/rglass{ + amount = 20 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bda" = ( +/obj/machinery/camera{ + c_tag = "EVA Equipment"; + dir = 6; + icon_state = "camera" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bdb" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bdc" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bdd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bde" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/closet/emcloset, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bdf" = ( +/obj/structure/rack, +/obj/item/clothing/suit/space/fragile, +/obj/item/clothing/head/helmet/space/fragile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bdg" = ( +/obj/structure/table/wood, +/obj/item/stack/packageWrap, +/obj/item/device/destTagger, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bdh" = ( +/obj/machinery/light/small, +/obj/structure/table/wood, +/obj/item/weapon/gun/ballistic/revolver/doublebarrel, +/obj/item/weapon/storage/belt/bandolier, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bdi" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bdj" = ( +/obj/structure/sign/poster/random{ + name = "random contraband poster"; + pixel_x = 0; + pixel_y = -32; + random_basetype = /obj/structure/sign/poster/contraband + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bdk" = ( +/obj/effect/landmark/blobstart, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bdl" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bdm" = ( +/mob/living/simple_animal/hostile/retaliate/goat{ + name = "Pete" + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bdn" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 2; + on = 1 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bdo" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/obj/item/device/assembly/mousetrap/armed, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bdp" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/window/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bdq" = ( +/obj/machinery/door/airlock/glass{ + name = "Rehabilitation Dome" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bdr" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bds" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/camera{ + c_tag = "Rehabilitation Dome Lobby East"; + dir = 8; + network = list("SS13") + }, +/obj/item/weapon/twohanded/required/kirbyplants{ + icon_state = "plant-21"; + layer = 4.1 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bdt" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/sign/poster/random{ + name = "random contraband poster"; + pixel_x = -32; + pixel_y = 0; + random_basetype = /obj/structure/sign/poster/contraband + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bdu" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bdv" = ( +/obj/machinery/door/airlock/maintenance{ + name = "External Maintenance Access"; + req_access_txt = "12" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bdw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bdx" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bdy" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bdz" = ( +/obj/machinery/door/airlock/maintenance{ + name = "External Maintenance Access"; + req_access_txt = "12" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bdA" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bdB" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bdC" = ( +/obj/structure/table, +/obj/item/stack/sheet/plasteel/fifty{ + amount = 20 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bdD" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bdE" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bdF" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 2; + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bdG" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bdH" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bdI" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bdJ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-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/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bdK" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bdL" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bdM" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bdN" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bdO" = ( +/obj/machinery/camera{ + c_tag = "Service SMES"; + dir = 6; + icon_state = "camera"; + network = list("SS13","QM") + }, +/obj/structure/table, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/item/weapon/storage/toolbox/electrical{ + pixel_x = 1; + pixel_y = 5 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bdP" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "Port Asteroid Maintence APC"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bdQ" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Serivce SMES Access"; + req_access_txt = "10;11;12" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bdR" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bdS" = ( +/obj/structure/tank_dispenser/oxygen, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bdT" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bdU" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bdV" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bdW" = ( +/obj/machinery/vending/boozeomat, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bdX" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/airlock{ + name = "Bar Backroom"; + req_access_txt = "25" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bdY" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bdZ" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bea" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/blood/gibs/old, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"beb" = ( +/obj/machinery/gibber, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bec" = ( +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bed" = ( +/obj/structure/flora/ausbushes/reedbush, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bee" = ( +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bef" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (SOUTHWEST)"; + icon_state = "neutral"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"beg" = ( +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"beh" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bei" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bej" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bek" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bel" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bem" = ( +/obj/machinery/light/small, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"ben" = ( +/obj/structure/tank_dispenser/oxygen, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"beo" = ( +/obj/structure/closet/crate/rcd, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bep" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"beq" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"ber" = ( +/obj/structure/table, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bes" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bet" = ( +/obj/machinery/camera{ + c_tag = "Medical SMES"; + dir = 6; + icon_state = "camera" + }, +/obj/structure/chair/stool, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"beu" = ( +/obj/machinery/computer/station_alert, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bev" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bew" = ( +/obj/structure/closet/emcloset, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bex" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bey" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bez" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/camera{ + c_tag = "Medbay Asteroid Hallway 6"; + dir = 8; + icon_state = "camera"; + network = list("SS13","QM"); + tag = "icon-camera (WEST)" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"beA" = ( +/obj/structure/girder, +/obj/structure/grille/broken, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"beB" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"beC" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"beD" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"beE" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"beF" = ( +/obj/structure/table, +/obj/item/weapon/reagent_containers/food/drinks/shaker, +/obj/item/weapon/reagent_containers/glass/rag, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"beG" = ( +/obj/structure/table, +/obj/item/weapon/book/manual/barman_recipes, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/obj/item/weapon/coin/silver, +/obj/item/weapon/coin/silver, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"beH" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/holopad, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"beI" = ( +/obj/structure/table, +/obj/machinery/chem_dispenser/drinks, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"beJ" = ( +/obj/structure/table, +/obj/machinery/chem_dispenser/drinks/beer, +/obj/structure/extinguisher_cabinet{ + pixel_y = 32 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"beK" = ( +/obj/structure/sign/securearea{ + desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'"; + icon_state = "monkey_painting"; + name = "Mr. Deempisi portrait"; + pixel_x = 4; + pixel_y = 28 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"beL" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"beM" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"beN" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"beO" = ( +/obj/effect/decal/cleanable/blood/gibs/old, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"beP" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1 + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"beQ" = ( +/obj/structure/chair/stool, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"beR" = ( +/obj/structure/table/wood, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"beS" = ( +/obj/structure/flora/ausbushes/lavendergrass, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"beT" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/sign/map/left/ceres{ + pixel_x = 32; + pixel_y = -32 + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"beU" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Rehabilitation Dome South 1"; + dir = 1 + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"beV" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"beW" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (NORTHEAST)"; + icon_state = "neutral"; + dir = 5; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"beX" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (SOUTHWEST)"; + icon_state = "neutral"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"beY" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"beZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bfa" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bfb" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bfc" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 2; + on = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bfd" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/door/airlock/maintenance{ + name = "External Maintenance Access"; + req_access_txt = "12" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bfe" = ( +/obj/structure/rack, +/obj/item/weapon/tank/jetpack/carbondioxide, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bff" = ( +/obj/structure/rack, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/item/weapon/tank/jetpack/carbondioxide, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bfg" = ( +/obj/structure/rack, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/item/clothing/shoes/magboots, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bfh" = ( +/obj/structure/rack, +/obj/item/clothing/shoes/magboots, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bfi" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bfj" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bfk" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "Starboard Hallway APC"; + pixel_x = 23; + pixel_y = 2 + }, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bfl" = ( +/obj/structure/rack, +/obj/item/clothing/suit/space/fragile, +/obj/item/clothing/head/helmet/space/fragile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bfm" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bfn" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bfo" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bfp" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bfq" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/item/device/assembly/mousetrap/armed, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bfr" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bfs" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/chair/stool, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bft" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/computer/station_alert, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bfu" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bfv" = ( +/obj/machinery/door/airlock/maintenance{ + name = "External Maintenance Access"; + req_access_txt = "12" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bfw" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bfx" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bfy" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bfz" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bfA" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bfB" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bfC" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/mob/living/carbon/monkey/punpun, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bfD" = ( +/obj/effect/landmark/start/bartender, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bfE" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bfF" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bfG" = ( +/obj/machinery/icecream_vat, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bfH" = ( +/obj/structure/closet/secure_closet/freezer/meat, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bfI" = ( +/obj/structure/closet/chefcloset, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bfJ" = ( +/obj/machinery/chem_master/condimaster, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bfK" = ( +/obj/structure/chair/stool, +/mob/living/simple_animal/butterfly, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bfL" = ( +/obj/structure/table/wood, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bfM" = ( +/obj/structure/chair/stool, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bfN" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/window/fulltile, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bfO" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (NORTHEAST)"; + icon_state = "neutral"; + dir = 5; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bfP" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bfQ" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (SOUTHWEST)"; + icon_state = "neutral"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bfR" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bfS" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bfT" = ( +/obj/structure/sign/map/left/ceres{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bfU" = ( +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bfV" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/sign/directions/security{ + dir = 1; + icon_state = "direction_sec"; + pixel_x = -32; + pixel_y = 24; + tag = "icon-direction_sec (NORTH)" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bfW" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=EngineeringEast"; + location = "EngineeringMiddle"; + name = "navigation beacon (Engineering-Middle)" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bfX" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bfY" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bfZ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bga" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bgb" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bgc" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bgd" = ( +/obj/structure/cable{ + icon_state = "0-2"; + d2 = 2 + }, +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bge" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/airlock/glass_command{ + name = "EVA"; + req_access_txt = "18" + }, +/turf/open/floor/plasteel/blue{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bgf" = ( +/obj/structure/cable{ + icon_state = "0-2"; + d2 = 2 + }, +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bgg" = ( +/obj/structure/closet/secure_closet/engineering_electrical, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bgh" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bgi" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bgj" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/terminal{ + tag = "icon-term (EAST)"; + icon_state = "term"; + dir = 4 + }, +/obj/structure/sign/electricshock{ + pixel_y = -32 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bgk" = ( +/obj/machinery/power/smes/engineering, +/obj/structure/cable/orange, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bgl" = ( +/obj/structure/closet/crate, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bgm" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bgn" = ( +/obj/machinery/light/small, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bgo" = ( +/obj/structure/tank_dispenser/oxygen, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bgp" = ( +/turf/closed/mineral/random/labormineral, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bgq" = ( +/turf/closed/mineral, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bgr" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bgs" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bgt" = ( +/obj/machinery/power/terminal{ + tag = "icon-term (EAST)"; + icon_state = "term"; + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-2"; + d2 = 2 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bgu" = ( +/obj/machinery/power/smes/engineering, +/obj/structure/cable/orange, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bgv" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/landmark/start/bartender, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bgw" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/firedoor, +/obj/structure/table/wood/poker, +/obj/item/clothing/head/collectable/tophat, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bgx" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bgy" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/airlock{ + name = "Bar Access"; + req_access_txt = "25" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bgz" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bgA" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/airlock{ + name = "Freezer"; + req_access_txt = "28" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bgB" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/mob/living/simple_animal/chicken/rabbit/normal, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bgC" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bgD" = ( +/obj/structure/table, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bgE" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bgF" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (NORTHEAST)"; + icon_state = "neutral"; + dir = 5; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bgG" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bgH" = ( +/obj/effect/landmark/lightsout, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bgI" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/machinery/holopad, +/obj/effect/landmark/observer_start, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=CommandMiddle2"; + location = "EngineeringMiddle2"; + name = "navigation beacon (Engineering-Middle 2)" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bgJ" = ( +/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/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bgK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bgL" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bgM" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bgN" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bgO" = ( +/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/navbeacon{ + codes_txt = "patrol;next_patrol=EngineeringEast2"; + location = "EngineeringEast"; + name = "navigation beacon (Engineering-East)" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bgP" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/blue/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bgQ" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bgR" = ( +/obj/machinery/holopad, +/turf/open/floor/plasteel/blue/side{ + tag = "icon-blue (NORTHWEST)"; + icon_state = "blue"; + dir = 9; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bgS" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/blue/side{ + tag = "icon-blue (NORTH)"; + icon_state = "blue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bgT" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/blue/side{ + tag = "icon-blue (NORTH)"; + icon_state = "blue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bgU" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/blue/side{ + tag = "icon-blue (NORTH)"; + icon_state = "blue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bgV" = ( +/obj/structure/tank_dispenser/oxygen, +/turf/open/floor/plasteel/blue/side{ + tag = "icon-blue (NORTHEAST)"; + icon_state = "blue"; + dir = 5; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bgW" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Medbay SMES Access"; + req_access_txt = "10;11;12" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bgX" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bgY" = ( +/obj/machinery/door/airlock/maintenance{ + name = "External Maintenance Access"; + req_access_txt = "12" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bgZ" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Starboard Asteroid Maintenance Access"; + req_access_txt = "12" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bha" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 8 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bhb" = ( +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bhc" = ( +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/asteroid, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bhd" = ( +/turf/open/floor/plating/asteroid, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bhe" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating/asteroid, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bhf" = ( +/obj/structure/grille/broken, +/turf/open/floor/plating/asteroid, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bhg" = ( +/obj/structure/grille, +/turf/open/floor/plating/asteroid, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bhh" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating/asteroid, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bhi" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bhj" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bhk" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/closet/secure_closet/engineering_electrical, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bhl" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/terminal{ + tag = "icon-term (EAST)"; + icon_state = "term"; + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/sign/electricshock{ + pixel_y = -32 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bhm" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -24 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bhn" = ( +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = -32; + random_basetype = /obj/structure/sign/poster/official + }, +/obj/structure/table/wood/poker, +/obj/machinery/door/firedoor, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bho" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/table/wood/poker, +/obj/item/toy/cards/deck, +/obj/machinery/door/firedoor, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bhp" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/table/wood/poker, +/obj/machinery/door/firedoor, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bhq" = ( +/obj/structure/chair/stool/bar, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bhr" = ( +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bhs" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = 32; + random_basetype = /obj/structure/sign/poster/official + }, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bht" = ( +/obj/structure/table, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/item/stack/packageWrap, +/obj/item/device/destTagger, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bhu" = ( +/obj/structure/table, +/obj/structure/table, +/obj/machinery/reagentgrinder, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bhv" = ( +/obj/machinery/processor, +/obj/machinery/camera{ + c_tag = "Kitchen" + }, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bhw" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bhx" = ( +/obj/structure/sink/kitchen{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bhy" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bhz" = ( +/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, +/obj/effect/turf_decal/stripes/asteroid/line, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bhA" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/machinery/camera{ + c_tag = "Rehabilitation Dome South 2"; + dir = 1 + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bhB" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/machinery/airalarm{ + dir = 1; + icon_state = "alarm0"; + pixel_y = -22 + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bhC" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/machinery/firealarm{ + dir = 1; + pixel_x = 0; + pixel_y = -26 + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bhD" = ( +/obj/structure/flora/ausbushes/grassybush, +/obj/structure/sign/nosmoking_2{ + pixel_y = -32 + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bhE" = ( +/obj/machinery/light, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bhF" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/obj/structure/table, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bhG" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Rehabilitation Dome Lobby South"; + dir = 1 + }, +/obj/item/weapon/twohanded/required/kirbyplants{ + icon_state = "plant-21"; + layer = 4.1 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bhH" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bhI" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"bhJ" = ( +/obj/structure/sign/securearea{ + pixel_x = 32; + pixel_y = -32 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bhK" = ( +/obj/machinery/camera{ + c_tag = "Engineering Asteroid Hallway 3"; + dir = 1; + icon_state = "camera"; + network = list("SS13") + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bhL" = ( +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -28 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bhM" = ( +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bhN" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel/neutral/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bhO" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/machinery/camera{ + c_tag = "Engineering Asteroid Hallway 4"; + dir = 1; + icon_state = "camera"; + network = list("SS13") + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bhP" = ( +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bhQ" = ( +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -28 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bhR" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/obj/structure/sign/securearea{ + pixel_x = -32; + pixel_y = -32 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bhS" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=EngineeringWest"; + location = "EngineeringEast3"; + name = "navigation beacon (Engineering-East 3)" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bhT" = ( +/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/open/floor/plasteel/blue/side{ + tag = "icon-blue (EAST)"; + icon_state = "blue"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bhU" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/glass_command{ + name = "EVA"; + req_access_txt = "18" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/blue{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bhV" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/blue/side{ + tag = "icon-blue (WEST)"; + icon_state = "blue"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bhW" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bhX" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bhY" = ( +/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/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bhZ" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "EVA APC"; + pixel_x = 23; + pixel_y = 2 + }, +/turf/open/floor/plasteel/blue/side{ + tag = "icon-blue (EAST)"; + icon_state = "blue"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bia" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bib" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bic" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bid" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bie" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bif" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"big" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bih" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bii" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = 32 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bij" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bik" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bil" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bim" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bin" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Starboard Asteroid Maintenance Access"; + req_access_txt = "12" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bio" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 8 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bip" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"biq" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bir" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/item/device/assembly/mousetrap/armed, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bis" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bit" = ( +/obj/structure/closet/crate, +/turf/open/floor/plating/asteroid, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"biu" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Serivce SMES Access"; + req_access_txt = "10;11;12" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"biv" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/maintenance{ + name = "Serivce SMES Access"; + req_access_txt = "10;11;12" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"biw" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bix" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"biy" = ( +/obj/machinery/camera{ + c_tag = "Bar"; + dir = 5; + icon_state = "camera"; + tag = "icon-camera (NORTHEAST)" + }, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_x = -32 + }, +/obj/structure/chair/stool/bar, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"biz" = ( +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j2"; + dir = 2 + }, +/obj/structure/chair/stool/bar, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"biA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/chair/stool/bar, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"biB" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"biC" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"biD" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"biE" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock{ + name = "Kitchen Access"; + req_access_txt = "28" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"biF" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"biG" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"biH" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"biI" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"biJ" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/newscaster{ + pixel_x = 32 + }, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"biK" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/atmos{ + name = "Service Atmospherics Checkpoint"; + req_access_txt = "24" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"biL" = ( +/obj/machinery/door/airlock/atmos{ + name = "Service Atmospherics Checkpoint"; + req_access_txt = "24" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"biM" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"biN" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"biO" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"biP" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"biQ" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/blue/corner{ + tag = "icon-bluecorner (EAST)"; + icon_state = "bluecorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"biR" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/blue/side{ + tag = "icon-blue (WEST)"; + icon_state = "blue"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"biS" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"biT" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"biU" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"biV" = ( +/obj/machinery/camera{ + c_tag = "EVA Storage"; + dir = 9; + icon_state = "camera"; + tag = "icon-camera (NORTHWEST)" + }, +/turf/open/floor/plasteel/blue/side{ + tag = "icon-blue (EAST)"; + icon_state = "blue"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"biW" = ( +/obj/machinery/vending/cola/random, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"biX" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"biY" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"biZ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4"; + tag = "" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bja" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bjb" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bjc" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bjd" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + on = 1 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bje" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/closet/crate, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bjf" = ( +/obj/structure/closet/firecloset/full, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bjg" = ( +/obj/structure/girder, +/turf/open/floor/plating/asteroid, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bjh" = ( +/obj/machinery/power/apc{ + dir = 2; + name = "Surgery APC"; + pixel_y = -24 + }, +/obj/structure/cable/orange, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bji" = ( +/obj/machinery/light/small, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bjj" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/grille/broken, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bjk" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 1 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bjl" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 1 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bjm" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bjn" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bjo" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bjp" = ( +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bjq" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bjr" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/airalarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bjs" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/button/door{ + id = "kitchen"; + name = "Privacy Shutters"; + pixel_x = -24 + }, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bjt" = ( +/obj/effect/landmark/start/cook, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bju" = ( +/obj/structure/table, +/obj/item/weapon/reagent_containers/food/condiment/peppermill, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bjv" = ( +/obj/structure/table, +/obj/item/weapon/book/manual/chef_recipes, +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + on = 1 + }, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bjw" = ( +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bjx" = ( +/obj/machinery/vending/dinnerware, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bjy" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Mix Output"; + on = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bjz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bjA" = ( +/obj/structure/table, +/obj/item/weapon/wrench, +/obj/item/clothing/glasses/meson, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bjB" = ( +/turf/open/floor/plating/asteroid/airless, +/area/mine/unexplored{ + name = "Civilian Asteroid" + }) +"bjC" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 6 + }, +/obj/structure/lattice, +/turf/open/space, +/area/space) +"bjD" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/obj/structure/lattice, +/turf/open/space, +/area/space) +"bjE" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 10 + }, +/obj/structure/lattice, +/turf/open/space, +/area/space) +"bjF" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/camera{ + c_tag = "SEngineering Asteroid Hallway 5"; + dir = 4; + icon_state = "camera" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bjG" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bjH" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bjI" = ( +/obj/structure/table, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/sheet/metal/fifty, +/turf/open/floor/plasteel/blue/side{ + tag = "icon-blue (SOUTHWEST)"; + icon_state = "blue"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bjJ" = ( +/obj/structure/table, +/obj/item/stack/sheet/glass/fifty, +/turf/open/floor/plasteel/blue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bjK" = ( +/obj/machinery/light, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plasteel/blue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bjL" = ( +/obj/structure/table, +/obj/item/weapon/storage/toolbox/electrical{ + pixel_x = 1; + pixel_y = 5 + }, +/turf/open/floor/plasteel/blue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bjM" = ( +/obj/structure/table, +/obj/item/weapon/storage/toolbox/mechanical, +/turf/open/floor/plasteel/blue/side{ + tag = "icon-blue (SOUTHEAST)"; + icon_state = "blue"; + dir = 6; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"bjN" = ( +/obj/machinery/vending/snack/random, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bjO" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bjP" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bjQ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Medbay Asteroid Hallway 4"; + dir = 1; + icon_state = "camera"; + network = list("SS13") + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bjR" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bjS" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bjT" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Medbay Asteroid Hallway 5"; + dir = 1; + icon_state = "camera"; + network = list("SS13") + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bjU" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bjV" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bjW" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bjX" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Surgey Observation"; + req_access_txt = "5" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bjY" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bjZ" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bka" = ( +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bkb" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bkc" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/item/device/assembly/mousetrap/armed, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bkd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/camera{ + c_tag = "Service Asteroid Hallway 2"; + dir = 4; + icon_state = "camera" + }, +/obj/structure/sign/map/left/ceres{ + pixel_x = -32 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bke" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = -32; + random_basetype = /obj/structure/sign/poster/official + }, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bkf" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bkg" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/obj/structure/table/wood, +/obj/item/weapon/kitchen/fork, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bkh" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/landmark/start/mime, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bki" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bkj" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/table/wood, +/obj/item/weapon/reagent_containers/food/condiment/peppermill, +/obj/item/weapon/reagent_containers/food/condiment/saltshaker{ + pixel_x = 5 + }, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bkk" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bkl" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bkm" = ( +/obj/structure/table/reinforced, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen" + }, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bkn" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bko" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bkp" = ( +/obj/structure/table, +/obj/item/weapon/reagent_containers/food/condiment/saltshaker, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bkq" = ( +/obj/structure/table, +/obj/item/weapon/kitchen/rollingpin, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bkr" = ( +/obj/structure/table, +/obj/machinery/microwave, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bks" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/camera{ + c_tag = "Service Atmospherics Checkpoint"; + dir = 5; + icon_state = "camera"; + tag = "icon-camera (NORTHEAST)" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bkt" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/effect/landmark/blobstart, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bku" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + icon_state = "connector_map"; + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bkv" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/turf/open/space, +/area/space) +"bkw" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 6 + }, +/turf/open/space, +/area/space) +"bkx" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/turf/open/space, +/area/space) +"bky" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 10 + }, +/turf/open/space, +/area/space) +"bkz" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bkA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bkB" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/morgue) +"bkC" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/morgue) +"bkD" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/patients_rooms) +"bkE" = ( +/obj/structure/table, +/obj/item/weapon/surgicaldrill, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bkF" = ( +/obj/structure/table, +/obj/item/weapon/hemostat, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bkG" = ( +/obj/structure/table, +/obj/item/weapon/scalpel{ + pixel_y = 12 + }, +/obj/item/weapon/circular_saw, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bkH" = ( +/obj/structure/table, +/obj/item/weapon/retractor, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bkI" = ( +/obj/structure/table, +/obj/item/weapon/cautery{ + pixel_x = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bkJ" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bkK" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bkL" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 2; + on = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bkM" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bkN" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bkO" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 2; + on = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bkP" = ( +/obj/structure/closet/secure_closet/personal/patient, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bkQ" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bkR" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bkS" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/item/device/assembly/mousetrap/armed, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bkT" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bkU" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bkV" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bkW" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bkX" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bkY" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Port Asteroid Maintenance"; + req_access_txt = "12" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bkZ" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bla" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"blb" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"blc" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/window/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bld" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"ble" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"blf" = ( +/obj/machinery/holopad, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"blg" = ( +/obj/effect/landmark/xmastree, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"blh" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bli" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen" + }, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"blj" = ( +/obj/structure/table, +/obj/item/weapon/reagent_containers/glass/beaker, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"blk" = ( +/obj/structure/table, +/obj/item/weapon/reagent_containers/food/snacks/mint, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bll" = ( +/obj/structure/table, +/obj/machinery/microwave, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"blm" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bln" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"blo" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + icon_state = "connector_map"; + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"blp" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -32 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"blq" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 5 + }, +/turf/open/space, +/area/space) +"blr" = ( +/turf/closed/wall/r_wall, +/area/engine/engineering) +"bls" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 9 + }, +/turf/open/space, +/area/space) +"blt" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 24 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"blu" = ( +/obj/structure/tank_dispenser/oxygen, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"blv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/firedoor, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = -28; + pixel_y = 0 + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"blw" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/glass, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"blx" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bly" = ( +/obj/structure/bodycontainer/morgue, +/obj/effect/landmark/revenantspawn, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/morgue) +"blz" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/morgue) +"blA" = ( +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/morgue) +"blB" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 2; + on = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/morgue) +"blC" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "Morgue APC"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/structure/table, +/obj/item/weapon/storage/box/bodybags, +/obj/item/weapon/pen, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/morgue) +"blD" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/patients_rooms) +"blE" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 2; + on = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/patients_rooms) +"blF" = ( +/obj/structure/closet/secure_closet/personal/patient, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/patients_rooms) +"blG" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/patients_rooms) +"blH" = ( +/obj/structure/table, +/obj/item/clothing/gloves/color/latex, +/obj/item/clothing/mask/surgical, +/obj/item/clothing/suit/apron/surgical, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"blI" = ( +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"blJ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 2; + on = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"blK" = ( +/obj/structure/table, +/obj/item/weapon/surgical_drapes, +/obj/item/weapon/razor, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"blL" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"blM" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"blN" = ( +/obj/structure/table, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"blO" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/landmark/xeno_spawn, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"blP" = ( +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"blQ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/landmark/blobstart, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"blR" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"blS" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating/asteroid, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"blT" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"blU" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"blV" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"blW" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"blX" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"blY" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Port Asteroid Maintenance"; + req_access_txt = "12" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"blZ" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bma" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bmb" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bmc" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/glass{ + name = "Bar" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bmd" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bme" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bmf" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/table/wood, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bmg" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 2; + on = 1 + }, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bmh" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bmi" = ( +/obj/structure/table/wood, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bmj" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bmk" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bml" = ( +/obj/machinery/deepfryer, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bmm" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/donkpockets, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bmn" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/machinery/airalarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bmo" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bmp" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bmq" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + icon_state = "connector_map"; + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bmr" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bms" = ( +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bmt" = ( +/obj/machinery/power/emitter{ + state = 2 + }, +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1; + d2 = 2 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bmu" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bmv" = ( +/obj/machinery/power/emitter{ + state = 2 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bmw" = ( +/obj/machinery/power/emitter{ + state = 2 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bmx" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bmy" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bmz" = ( +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/morgue) +"bmA" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/morgue) +"bmB" = ( +/obj/structure/table, +/obj/item/weapon/paper/morguereminder, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/morgue) +"bmC" = ( +/obj/structure/table, +/obj/item/weapon/folder/red{ + pixel_x = 8; + pixel_y = 6 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/patients_rooms) +"bmD" = ( +/obj/structure/chair/office/light{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/patients_rooms) +"bmE" = ( +/obj/machinery/vending/wallmed{ + pixel_x = 24 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/patients_rooms) +"bmF" = ( +/obj/structure/table, +/obj/item/weapon/folder/white, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/patients_rooms) +"bmG" = ( +/obj/effect/landmark/xeno_spawn, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bmH" = ( +/obj/structure/table/optable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/landmark/blobstart, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bmI" = ( +/obj/machinery/holopad, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bmJ" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/airalarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bmK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bmL" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bmM" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bmN" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bmO" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bmP" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bmQ" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bmR" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/glass{ + name = "Bar" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bmS" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bmT" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bmU" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bmV" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bmW" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bmX" = ( +/obj/machinery/holopad, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bmY" = ( +/obj/structure/closet/secure_closet/freezer/kitchen, +/obj/structure/window/reinforced, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bmZ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; + icon_state = "space"; + layer = 4; + name = "EXTERNAL AIRLOCK"; + pixel_x = 32; + pixel_y = 0 + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Mix Input"; + on = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bna" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bnb" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bnc" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bnd" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/door/airlock/maintenance{ + name = "External Maintenance Access"; + req_access_txt = "12" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bne" = ( +/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/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bnf" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bng" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bnh" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bni" = ( +/obj/machinery/light, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bnj" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bnk" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bnl" = ( +/obj/machinery/light, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bnm" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bnn" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bno" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bnp" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/door/airlock/maintenance{ + name = "External Maintenance Access"; + req_access_txt = "12" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bnq" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bnr" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bns" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bnt" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bnu" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/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/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bnv" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/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/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bnw" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bnx" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bny" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance{ + name = "External Maintenance Access"; + req_access_txt = "12" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bnz" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bnA" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; + tag = "" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bnB" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bnC" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/morgue) +"bnD" = ( +/obj/machinery/button/door{ + id = "medp1"; + name = "Privacy Shutters"; + pixel_x = -24 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/patients_rooms) +"bnE" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/patients_rooms) +"bnF" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/patients_rooms) +"bnG" = ( +/obj/machinery/button/door{ + id = "medp2"; + name = "Privacy Shutters"; + pixel_x = -24 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/patients_rooms) +"bnH" = ( +/obj/machinery/computer/operating, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bnI" = ( +/obj/structure/closet/crate/freezer/surplus_limbs, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bnJ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bnK" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/camera{ + c_tag = "Surgery Observation"; + dir = 9; + icon_state = "camera"; + tag = "icon-camera (NORTHWEST)" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bnL" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bnM" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bnN" = ( +/obj/machinery/door/airlock/glass_virology{ + name = "Isolation A"; + req_access_txt = "39" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bnO" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bnP" = ( +/obj/machinery/door/airlock/glass_virology{ + name = "Isolation B"; + req_access_txt = "39" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bnQ" = ( +/obj/structure/bed, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bnR" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/donkpockets, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bnS" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/closed/mineral/random/labormineral, +/area/mine/unexplored{ + name = "Civilian Asteroid" + }) +"bnT" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bnU" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bnV" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bnW" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/vending/cigarette, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bnX" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/machinery/vending/snack/random, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bnY" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bnZ" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"boa" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/structure/disposalpipe/junction, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bob" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"boc" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bod" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"boe" = ( +/obj/machinery/vending/cola, +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = 32; + random_basetype = /obj/structure/sign/poster/official + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -28 + }, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bof" = ( +/obj/machinery/food_cart, +/obj/machinery/light_switch{ + pixel_x = -25 + }, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"bog" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"boh" = ( +/obj/structure/disposaloutlet{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"boi" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"boj" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/disposalpipe/sortjunction{ + dir = 2; + icon_state = "pipe-j1s"; + name = "disposal pipe - Kitchen"; + sortType = 20 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bok" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 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/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bol" = ( +/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/light/small, +/obj/structure/fans/tiny, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bom" = ( +/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/door/airlock/glass_external{ + cyclelinkeddir = 8; + name = "Service Atmospherics Checkpoint"; + req_access_txt = "24" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bon" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/space, +/area/space) +"boo" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/space) +"bop" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 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/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"boq" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bor" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bos" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/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/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bot" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bou" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/camera{ + c_tag = "Engineering Asteroid Hallway 2"; + dir = 9; + icon_state = "camera"; + tag = "icon-camera (NORTHWEST)" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bov" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bow" = ( +/obj/structure/reflector/single{ + anchored = 1; + dir = 4; + icon_state = "reflector"; + tag = "icon-reflector (NORTH)" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"box" = ( +/obj/structure/reflector/box{ + anchored = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"boy" = ( +/obj/structure/reflector/single{ + anchored = 1; + dir = 1; + icon_state = "reflector"; + tag = "icon-reflector (NORTH)" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"boz" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"boA" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"boB" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"boC" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"boD" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"boE" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"boF" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"boG" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"boH" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/space, +/area/space) +"boI" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/space, +/area/space) +"boJ" = ( +/obj/structure/lattice/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/space, +/area/space) +"boK" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"boL" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/light/small, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"boM" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"boN" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"boO" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/light/small, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"boP" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/structure/table, +/obj/item/weapon/storage/toolbox/electrical, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"boQ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/sign/map/left/ceres{ + pixel_x = -32 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"boR" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"boS" = ( +/obj/machinery/door/airlock/medical{ + name = "Morgue"; + req_access_txt = "6;5" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/morgue) +"boT" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/morgue) +"boU" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/morgue) +"boV" = ( +/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/morgue) +"boW" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Morgue"; + dir = 10; + icon_state = "camera"; + network = list("SS13","CMO"); + tag = "icon-camera (SOUTHWEST)" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/morgue) +"boX" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/morgue) +"boY" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "medp1" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/patients_rooms) +"boZ" = ( +/obj/machinery/door/airlock/medical{ + name = "Patient Room"; + req_access_txt = "5" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/patients_rooms) +"bpa" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "medp1" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/patients_rooms) +"bpb" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "medp2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/patients_rooms) +"bpc" = ( +/obj/machinery/door/airlock/medical{ + name = "Patient Room 2"; + req_access_txt = "5" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/patients_rooms) +"bpd" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "medp2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/patients_rooms) +"bpe" = ( +/obj/structure/closet/secure_closet/medical2, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bpf" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/obj/machinery/camera{ + c_tag = "Surgery"; + dir = 10; + icon_state = "camera"; + network = list("SS13","CMO"); + tag = "icon-camera (SOUTHWEST)" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bpg" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bph" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bpi" = ( +/obj/structure/closet/crate/freezer, +/obj/item/weapon/reagent_containers/blood/empty, +/obj/item/weapon/reagent_containers/blood/empty, +/obj/item/weapon/reagent_containers/blood/AMinus, +/obj/item/weapon/reagent_containers/blood/BMinus{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/weapon/reagent_containers/blood/BPlus{ + pixel_x = 1; + pixel_y = 2 + }, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OPlus{ + pixel_x = -2; + pixel_y = -1 + }, +/obj/item/weapon/reagent_containers/blood/random, +/obj/item/weapon/reagent_containers/blood/random, +/obj/item/weapon/reagent_containers/blood/APlus, +/obj/item/weapon/reagent_containers/blood/random, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bpj" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bpk" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bpl" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bpm" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bpn" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bpo" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/bin, +/obj/structure/sign/deathsposal{ + pixel_x = 32 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bpp" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bpq" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Virology Breakroom"; + dir = 5; + icon_state = "camera"; + network = list("SS13","CMO"); + tag = "icon-camera (NORTHEAST)" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bpr" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bps" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bpt" = ( +/obj/structure/table, +/obj/machinery/microwave, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bpu" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bpv" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall, +/area/mine/unexplored{ + name = "Medical Asteroid" + }) +"bpw" = ( +/obj/structure/disposaloutlet{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/mine/unexplored{ + name = "Medical Asteroid" + }) +"bpx" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bpy" = ( +/obj/structure/table, +/obj/machinery/camera{ + c_tag = "Primary Tool Storage North"; + dir = 5; + icon_state = "camera"; + tag = "icon-camera (NORTHEAST)" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bpz" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bpA" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bpB" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bpC" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bpD" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/glass{ + name = "Primary Tool Storage" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bpE" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bpF" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bpG" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j2"; + dir = 1 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bpH" = ( +/obj/machinery/door/airlock/glass{ + name = "Bar" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bpI" = ( +/obj/machinery/door/airlock/glass{ + name = "Bar" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bpJ" = ( +/obj/structure/sign/barsign, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bpK" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"bpL" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bpM" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"bpN" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced, +/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/grille, +/turf/open/space, +/area/space) +"bpO" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"bpP" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bpQ" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/junction{ + tag = "icon-intact (NORTH)"; + icon_state = "intact"; + dir = 1 + }, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"bpR" = ( +/obj/machinery/door/airlock/glass_engineering{ + name = "Laser Room"; + req_access_txt = "10" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bpS" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bpT" = ( +/obj/machinery/door/airlock/glass_engineering{ + name = "Laser Room"; + req_access_txt = "10" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bpU" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bpV" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"bpW" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"bpX" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"bpY" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bpZ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bqa" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bqb" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"bqc" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/morgue) +"bqd" = ( +/obj/machinery/door/airlock/medical{ + name = "Morgue"; + req_access_txt = "6" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/morgue) +"bqe" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bqf" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (NORTH)"; + icon_state = "whiteblue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bqg" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (NORTH)"; + icon_state = "whiteblue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bqh" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (NORTH)"; + icon_state = "whiteblue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bqi" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "Morgue APC"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (NORTH)"; + icon_state = "whiteblue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/patients_rooms) +"bqj" = ( +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (NORTH)"; + icon_state = "whiteblue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bqk" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bql" = ( +/obj/machinery/door/airlock/medical{ + name = "Operating Theatre"; + req_access_txt = "45" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bqm" = ( +/obj/machinery/door/airlock/glass_medical{ + id_tag = ""; + name = "Surgery Observation"; + req_access_txt = "0" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"bqn" = ( +/obj/structure/sink{ + icon_state = "sink"; + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bqo" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bqp" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bqq" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bqr" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/machinery/holopad, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bqs" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bqt" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bqu" = ( +/obj/machinery/door/airlock/virology{ + name = "Break Room"; + req_access_txt = "39" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bqv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bqw" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bqx" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bqy" = ( +/obj/structure/table, +/obj/machinery/reagentgrinder, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bqz" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bqA" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bqB" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/asteroid, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bqC" = ( +/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/asteroid, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bqD" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/closed/wall, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bqE" = ( +/obj/structure/closet/crate, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bqF" = ( +/obj/structure/table, +/obj/machinery/light{ + dir = 8 + }, +/obj/item/device/analyzer, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bqG" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bqH" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bqI" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bqJ" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bqK" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bqL" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/structure/sign/directions/security{ + dir = 1; + icon_state = "direction_sec"; + pixel_x = 32; + pixel_y = 24; + tag = "icon-direction_sec (NORTH)" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bqM" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bqN" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bqO" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bqP" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bqQ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bqR" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Service Asteroid Hallway 7" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bqS" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bqT" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bqU" = ( +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bqV" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bqW" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/machinery/camera{ + c_tag = "Service Asteroid Hallway 8" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bqX" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bqY" = ( +/obj/structure/sign/map/left/ceres{ + pixel_y = 32 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bqZ" = ( +/obj/machinery/door/airlock/glass, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bra" = ( +/obj/machinery/camera{ + c_tag = "Engineering Asteroid Hallway 1" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"brb" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"brc" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"brd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bre" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 2; + icon_state = "pump_map"; + name = "Cooling Loop To Gas" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "Supermatter Containment Room APC"; + pixel_x = -23; + pixel_y = 2 + }, +/obj/structure/cable{ + icon_state = "0-4"; + d2 = 4 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"brf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"brg" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + icon_state = "intact"; + dir = 6 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"brh" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bri" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 1 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"brj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"brk" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"brl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"brm" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 10 + }, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"brn" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bro" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/sign/directions/evac{ + dir = 4; + icon_state = "direction_evac"; + pixel_x = 32; + pixel_y = 24; + tag = "icon-direction_evac (EAST)" + }, +/obj/structure/sign/directions/medical{ + dir = 4; + icon_state = "direction_med"; + pixel_x = 32; + pixel_y = 32; + tag = "icon-direction_med (EAST)" + }, +/obj/structure/sign/directions/security{ + dir = 1; + icon_state = "direction_sec"; + pixel_x = 32; + pixel_y = 40; + tag = "icon-direction_sec (NORTH)" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"brp" = ( +/obj/machinery/camera{ + c_tag = "Engineering Asteroid Hallway 6" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"brq" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"brr" = ( +/obj/structure/sign/map/left/ceres{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"brs" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"brt" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bru" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/sign/directions/security{ + dir = 1; + icon_state = "direction_sec"; + pixel_x = -32; + pixel_y = 24; + tag = "icon-direction_sec (NORTH)" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"brv" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/camera{ + c_tag = "Medbay Asteroid Hallway 3"; + dir = 8; + icon_state = "camera"; + network = list("SS13","QM"); + tag = "icon-camera (WEST)" + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"brw" = ( +/obj/machinery/disposal/deliveryChute{ + desc = "A chute for big and small criminals alike!"; + name = "Criminal Delivery Chute" + }, +/obj/machinery/door/window/brigdoor{ + name = "Criminal Deposit"; + req_access_txt = "2" + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"brx" = ( +/obj/structure/table, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/weapon/pen, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"bry" = ( +/obj/machinery/recharger, +/obj/structure/table, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/newscaster/security_unit{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"brz" = ( +/obj/structure/filingcabinet, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/machinery/camera{ + c_tag = "Medbay Security Checkpoint"; + dir = 6; + icon_state = "camera" + }, +/obj/structure/reagent_dispensers/peppertank{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"brA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/closet/secure_closet/security/med, +/turf/open/floor/plasteel/red/side{ + tag = "icon-red (NORTHEAST)"; + icon_state = "red"; + dir = 5; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"brB" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"brC" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"brD" = ( +/obj/structure/cable/orange{ + 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/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"brE" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"brF" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/obj/structure/sign/examroom{ + pixel_x = -32; + pixel_y = 32 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"brG" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"brH" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"brI" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"brJ" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"brK" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"brL" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"brM" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"brN" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"brO" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"brP" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"brQ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"brR" = ( +/obj/machinery/vending/medical, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"brS" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"brT" = ( +/obj/structure/table, +/obj/item/weapon/book/manual/wiki/infections, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"brU" = ( +/obj/structure/table, +/obj/item/clothing/suit/straight_jacket, +/obj/item/clothing/mask/muzzle, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"brV" = ( +/obj/structure/table/glass, +/obj/item/clothing/gloves/color/latex, +/obj/item/device/healthanalyzer, +/obj/item/clothing/glasses/hud/health, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/camera{ + c_tag = "Virology"; + dir = 5; + icon_state = "camera"; + network = list("SS13","CMO"); + tag = "icon-camera (NORTHEAST)" + }, +/obj/machinery/requests_console{ + department = "Virology"; + name = "Virology Requests Console"; + pixel_x = -32 + }, +/turf/open/floor/plasteel/whitegreen/side{ + tag = "icon-whitegreen (WEST)"; + icon_state = "whitegreen"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"brW" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"brX" = ( +/obj/machinery/smartfridge/chemistry/virology, +/turf/open/floor/plasteel/whitegreen/side{ + tag = "icon-whitegreen (EAST)"; + icon_state = "whitegreen"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"brY" = ( +/obj/structure/closet/wardrobe/virology_white, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"brZ" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plating, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bsa" = ( +/obj/structure/shuttle/engine/propulsion/burst{ + tag = "icon-propulsion (WEST)"; + icon_state = "propulsion"; + dir = 8 + }, +/turf/open/floor/plating, +/area/shuttle/pod_3) +"bsb" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/pod_3) +"bsc" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/awaymission/research/interior/gateway) +"bsd" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/awaymission/research/interior/gateway) +"bse" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bsf" = ( +/obj/structure/table, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = -32; + random_basetype = /obj/structure/sign/poster/official + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bsg" = ( +/obj/structure/table, +/obj/item/clothing/gloves/color/yellow, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bsh" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = -28; + pixel_y = 0 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bsi" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bsj" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 1 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bsk" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bsl" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bsm" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/junction{ + tag = "icon-pipe-j2 (WEST)"; + icon_state = "pipe-j2"; + dir = 8 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bsn" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bso" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + on = 1 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bsp" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bsq" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bsr" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bss" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bst" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 2; + on = 1 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bsu" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/item/device/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = 29; + pixel_y = 0 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bsv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 5 + }, +/obj/machinery/meter, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bsw" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 1 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bsx" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/components/trinary/filter/flipped{ + dir = 8; + filter_type = "co2"; + icon_state = "filter_off_f"; + name = "gas filter (CO2)"; + tag = "icon-filter_off_f (WEST)" + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bsy" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/obj/machinery/meter, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bsz" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/components/trinary/filter/flipped{ + dir = 8; + filter_type = "o2"; + icon_state = "filter_off_f"; + name = "gas filter (O2)"; + tag = "icon-filter_off_f (WEST)" + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bsA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/obj/machinery/meter, +/obj/machinery/camera{ + c_tag = "SM North"; + dir = 1; + icon_state = "camera"; + network = list("SS13","CE") + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bsB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/obj/machinery/meter, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bsC" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/components/trinary/filter/flipped{ + dir = 8; + filter_type = "plasma"; + icon_state = "filter_off_f"; + name = "gas filter (Plasma)"; + tag = "icon-filter_off_f (WEST)" + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bsD" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/components/trinary/filter/flipped{ + dir = 8; + filter_type = ""; + icon_state = "filter_off_f"; + name = "gas filter (Custom)"; + tag = "icon-filter_off_f (WEST)" + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bsE" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 10 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bsF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bsG" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 5 + }, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"bsH" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 8; + frequency = 1441; + id = null; + pixel_y = 1 + }, +/turf/open/floor/plating/airless, +/area/engine/supermatter) +"bsI" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = -28; + pixel_y = 0 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bsJ" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bsK" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bsL" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bsM" = ( +/obj/machinery/holopad, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 8 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bsN" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/arrival/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bsO" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/obj/machinery/computer/security/telescreen{ + desc = "Used to watch the questionable medical practices of Medbay from a safe distance."; + name = "Medbay Monitor"; + network = list("CMO"); + pixel_x = -32 + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"bsP" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"bsQ" = ( +/obj/structure/cable/orange{ + 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/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"bsR" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"bsS" = ( +/obj/machinery/door/airlock/glass_security{ + name = "Security Office"; + req_access_txt = "63" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"bsT" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bsU" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bsV" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bsW" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bsX" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bsY" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bsZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Medbay North"; + dir = 1; + icon_state = "camera"; + network = list("SS13") + }, +/obj/effect/landmark/lightsout, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bta" = ( +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"btb" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"btc" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/requests_console{ + announcementConsole = 0; + department = "Medbay"; + departmentType = 1; + name = "Medbay RC"; + pixel_x = 0; + pixel_y = -30; + pixel_z = 0 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"btd" = ( +/obj/structure/cable/orange{ + 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/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bte" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/landmark/start/medical_doctor, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"btf" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"btg" = ( +/obj/structure/table, +/obj/item/stack/packageWrap, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bth" = ( +/obj/structure/closet/l3closet/virology, +/turf/open/floor/plasteel/whitegreen/side{ + tag = "icon-whitegreen (NORTHWEST)"; + icon_state = "whitegreen"; + dir = 9; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bti" = ( +/obj/machinery/shower{ + pixel_y = 24 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"btj" = ( +/obj/machinery/shower{ + pixel_y = 24 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"btk" = ( +/obj/structure/closet/l3closet/virology, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/whitegreen/side{ + tag = "icon-whitegreen (NORTHEAST)"; + icon_state = "whitegreen"; + dir = 5; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"btl" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"btm" = ( +/obj/structure/table/glass, +/obj/item/weapon/storage/box/beakers{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/weapon/storage/box/syringes, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/airalarm{ + dir = 4; + icon_state = "alarm0"; + pixel_x = -22 + }, +/turf/open/floor/plasteel/whitegreen/side{ + tag = "icon-whitegreen (WEST)"; + icon_state = "whitegreen"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"btn" = ( +/obj/structure/chair/stool, +/obj/effect/landmark/start/virologist, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bto" = ( +/obj/machinery/computer/pandemic, +/turf/open/floor/plasteel/whitegreen/side{ + tag = "icon-whitegreen (EAST)"; + icon_state = "whitegreen"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"btp" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 4; + name = "Medical Escape Pod" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"btq" = ( +/turf/open/floor/plating, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"btr" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 4; + name = "Medical Escape Pod" + }, +/turf/open/floor/plating, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bts" = ( +/obj/machinery/door/airlock/shuttle{ + name = "Escape Pod Airlock" + }, +/obj/docking_port/mobile/pod{ + dir = 4; + id = "pod3"; + name = "escape pod 3"; + port_angle = 0 + }, +/turf/open/floor/plating, +/area/shuttle/pod_3) +"btt" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/item/weapon/storage/pod{ + pixel_y = 32 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/pod_3) +"btu" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/machinery/light/small, +/obj/machinery/computer/shuttle/pod{ + pixel_x = 0; + pixel_y = 32; + possible_destinations = "pod_asteroid3"; + shuttleId = "pod3" + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -32 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/pod_3) +"btv" = ( +/obj/structure/grille, +/obj/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/pod_3) +"btw" = ( +/obj/docking_port/stationary/random{ + dir = 4; + id = "pod_asteroid3"; + name = "asteroid" + }, +/turf/open/space, +/area/space) +"btx" = ( +/obj/item/stack/rods, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/awaymission/research/interior/gateway) +"bty" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/awaymission/research/interior/gateway) +"btz" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/awaymission/research/interior/gateway) +"btA" = ( +/obj/machinery/vending/tool, +/obj/structure/sign/map/left/ceres{ + pixel_x = -32 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"btB" = ( +/obj/structure/table, +/obj/item/weapon/wrench, +/obj/item/weapon/screwdriver, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"btC" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/window/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"btD" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"btE" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"btF" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/structure/sign/directions/engineering{ + dir = 4; + icon_state = "direction_eng"; + pixel_x = 32; + pixel_y = -24; + tag = "icon-direction_eng (EAST)" + }, +/obj/structure/sign/directions/medical{ + dir = 4; + icon_state = "direction_med"; + pixel_x = 32; + pixel_y = -32; + tag = "icon-direction_med (EAST)" + }, +/obj/structure/sign/directions/science{ + pixel_x = 32; + pixel_y = -40 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"btG" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/green/corner{ + tag = "icon-greencorner (WEST)"; + icon_state = "greencorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"btH" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"btI" = ( +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"btJ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"btK" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/sign/botany{ + pixel_x = 32; + pixel_y = -32 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"btL" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/green/corner{ + tag = "icon-greencorner (WEST)"; + icon_state = "greencorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"btM" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/green/corner{ + tag = "icon-greencorner (WEST)"; + icon_state = "greencorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"btN" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/green/corner{ + tag = "icon-greencorner (WEST)"; + icon_state = "greencorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"btO" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"btP" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"btQ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -28 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"btR" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"btS" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"btT" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"btU" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"btV" = ( +/obj/structure/window/reinforced, +/obj/machinery/camera{ + c_tag = "Service-Engineering Bridge 1"; + dir = 1 + }, +/turf/open/floor/engine, +/area/space) +"btW" = ( +/obj/structure/window/reinforced, +/obj/machinery/camera{ + c_tag = "Service-Engineering Bridge 2"; + dir = 1 + }, +/turf/open/floor/engine, +/area/space) +"btX" = ( +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"btY" = ( +/obj/item/device/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -29 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"btZ" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bua" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bub" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"buc" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bud" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bue" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"buf" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bug" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"buh" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Cooling Loop Bypass"; + on = 0 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bui" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"buj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"buk" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bul" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bum" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bun" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"buo" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bup" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"buq" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bur" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bus" = ( +/obj/item/device/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -29 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"but" = ( +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"buu" = ( +/obj/structure/window/reinforced, +/obj/machinery/camera{ + c_tag = "Medbay-Engineering Bridge"; + dir = 1 + }, +/turf/open/floor/engine, +/area/space) +"buv" = ( +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"buw" = ( +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bux" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"buy" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"buz" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/sign/directions/engineering{ + dir = 8; + icon_state = "direction_eng"; + pixel_x = -32; + pixel_y = -24; + tag = "icon-direction_eng (WEST)" + }, +/obj/structure/sign/directions/supply{ + dir = 1; + icon_state = "direction_supply"; + pixel_x = -32; + pixel_y = -32; + tag = "icon-direction_supply (NORTH)" + }, +/obj/structure/sign/directions/evac{ + pixel_x = -32; + pixel_y = -40 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"buA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/arrival/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"buB" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "Medbay Security Checkpoint APC"; + pixel_x = -25; + pixel_y = 1 + }, +/obj/structure/cable/orange, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"buC" = ( +/obj/structure/chair/office/dark{ + dir = 8 + }, +/obj/effect/landmark/start/depsec/medical, +/turf/open/floor/plasteel/red/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"buD" = ( +/turf/open/floor/plasteel/red/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"buE" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1; + on = 1 + }, +/turf/open/floor/plasteel/red/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"buF" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 6; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"buG" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"buH" = ( +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"buI" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"buJ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"buK" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/delivery{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"buL" = ( +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/delivery{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"buM" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"buN" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"buO" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"buP" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/whitegreen/side{ + tag = "icon-whitegreen (EAST)"; + icon_state = "whitegreen"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"buQ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"buR" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Virology Airlocks"; + dir = 5; + icon_state = "camera"; + network = list("SS13","CMO"); + tag = "icon-camera (NORTHEAST)" + }, +/turf/open/floor/plasteel/whitegreen/side{ + tag = "icon-whitegreen (WEST)"; + icon_state = "whitegreen"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"buS" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/whitegreen/side{ + tag = "icon-whitegreen (EAST)"; + icon_state = "whitegreen"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"buT" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/whitegreen/side{ + tag = "icon-whitegreen (WEST)"; + icon_state = "whitegreen"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"buU" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"buV" = ( +/obj/structure/table/glass, +/obj/item/weapon/book/manual/wiki/infections{ + pixel_y = 7 + }, +/obj/item/weapon/reagent_containers/syringe/antiviral, +/obj/item/weapon/reagent_containers/dropper, +/obj/item/weapon/reagent_containers/spray/cleaner, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/whitegreen/side{ + tag = "icon-whitegreen (WEST)"; + icon_state = "whitegreen"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"buW" = ( +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"buX" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"buY" = ( +/obj/structure/table, +/obj/item/weapon/hand_labeler, +/obj/item/device/radio/headset/headset_med, +/obj/structure/reagent_dispensers/virusfood{ + density = 0; + pixel_x = 30 + }, +/obj/item/stack/sheet/mineral/plasma{ + amount = 5 + }, +/turf/open/floor/plasteel/whitegreen/side{ + tag = "icon-whitegreen (EAST)"; + icon_state = "whitegreen"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"buZ" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plating/asteroid, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bva" = ( +/obj/structure/sign/pods{ + pixel_x = 32 + }, +/turf/open/floor/plating/asteroid, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bvb" = ( +/obj/machinery/light/small, +/turf/open/floor/plating, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bvc" = ( +/obj/machinery/gateway{ + dir = 9 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/awaymission/research/interior/gateway) +"bvd" = ( +/obj/machinery/gateway{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/awaymission/research/interior/gateway) +"bve" = ( +/obj/machinery/gateway{ + dir = 5 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/awaymission/research/interior/gateway) +"bvf" = ( +/obj/item/weapon/crowbar, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/awaymission/research/interior/gateway) +"bvg" = ( +/obj/item/clothing/head/cone, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bvh" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/item/device/assembly/mousetrap/armed, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bvi" = ( +/obj/structure/table, +/obj/item/weapon/storage/toolbox/electrical{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = -28; + pixel_y = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bvj" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bvk" = ( +/obj/structure/table, +/obj/item/weapon/storage/belt/utility, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bvl" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bvm" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bvn" = ( +/turf/open/floor/plasteel/green/corner{ + tag = "icon-greencorner (WEST)"; + icon_state = "greencorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bvo" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bvp" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bvq" = ( +/turf/open/floor/plasteel/green/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bvr" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bvs" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bvt" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Port Asteroid Maintenance"; + req_access_txt = "12" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bvu" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/structure/grille, +/turf/open/floor/plating/asteroid/airless, +/area/space) +"bvv" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"bvw" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"bvx" = ( +/obj/machinery/door/airlock/maintenance{ + name = "External Maintenance Access"; + req_access_txt = "12" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bvy" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bvz" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 5 + }, +/obj/structure/closet/secure_closet/engineering_personal, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bvA" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bvB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Gas to Cooling Loop"; + on = 0 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bvC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 4; + initialize_directions = 11 + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bvD" = ( +/obj/effect/turf_decal/stripes/end{ + tag = "icon-warn_end (EAST)"; + icon_state = "warn_end"; + dir = 4 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/door/poddoor/shutters{ + id = "SM1" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bvE" = ( +/obj/machinery/power/rad_collector{ + anchored = 1 + }, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bvF" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + icon_state = "intact"; + dir = 6 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bvG" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bvH" = ( +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bvI" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bvJ" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 10 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bvK" = ( +/obj/machinery/power/rad_collector{ + anchored = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4"; + d2 = 4 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bvL" = ( +/obj/effect/turf_decal/stripes/end{ + tag = "icon-warn_end (WEST)"; + icon_state = "warn_end"; + dir = 8 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/door/poddoor/shutters{ + id = "SM2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bvM" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 8 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bvN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Gas To Mix"; + on = 0 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bvO" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bvP" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + icon_state = "connector_map"; + dir = 8 + }, +/obj/machinery/camera{ + c_tag = "SM East"; + dir = 9; + icon_state = "camera"; + network = list("SS13","CE"); + tag = "icon-camera (NORTHWEST)" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bvQ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bvR" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bvS" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bvT" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Central Asteroid Maintenance"; + req_access_txt = "12" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bvU" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Central Asteroid Maintenance"; + req_access_txt = "12" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bvV" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"bvW" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"bvX" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"bvY" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/structure/sign/bluecross_2{ + pixel_x = 32 + }, +/turf/open/floor/plasteel/arrival/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bvZ" = ( +/obj/machinery/computer/secure_data, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = -28; + pixel_y = 0 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"bwa" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bwb" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/orange, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bwc" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bwd" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bwe" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bwf" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bwg" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bwh" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bwi" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bwj" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/whiteblue/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bwk" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/turf/open/floor/plasteel/whiteblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bwl" = ( +/obj/machinery/iv_drip, +/turf/open/floor/plasteel/whiteblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bwm" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/machinery/iv_drip, +/turf/open/floor/plasteel/whiteblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bwn" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/whiteblue/corner{ + tag = "icon-whitebluecorner (WEST)"; + icon_state = "whitebluecorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bwo" = ( +/obj/machinery/doorButtons/access_button{ + idDoor = "virology_airlock_exterior"; + idSelf = "virology_airlock_control"; + name = "Virology Access Button"; + pixel_x = 8; + pixel_y = -28; + req_access_txt = "39" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/whitegreen/side{ + tag = "icon-whitegreen (EAST)"; + icon_state = "whitegreen"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bwp" = ( +/obj/machinery/door/airlock/virology{ + autoclose = 0; + frequency = 1449; + icon_state = "door_locked"; + id_tag = "virology_airlock_exterior"; + locked = 1; + name = "Virology Exterior Airlock"; + req_access_txt = "39" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bwq" = ( +/obj/machinery/doorButtons/access_button{ + idDoor = "virology_airlock_exterior"; + idSelf = "virology_airlock_control"; + name = "Virology Access Button"; + pixel_x = 0; + pixel_y = -28; + req_access_txt = "39" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/whitegreen/side{ + tag = "icon-whitegreen (WEST)"; + icon_state = "whitegreen"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bwr" = ( +/obj/machinery/doorButtons/access_button{ + idDoor = "virology_airlock_interior"; + idSelf = "virology_airlock_control"; + name = "Virology Access Button"; + pixel_x = 0; + pixel_y = -28; + req_access_txt = "39" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/whitegreen/side{ + tag = "icon-whitegreen (EAST)"; + icon_state = "whitegreen"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bws" = ( +/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/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bwt" = ( +/obj/machinery/doorButtons/airlock_controller{ + idExterior = "virology_airlock_exterior"; + idInterior = "virology_airlock_interior"; + idSelf = "virology_airlock_control"; + name = "Virology Access Console"; + pixel_x = 0; + pixel_y = -22; + req_access_txt = "39" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/whitegreen/side{ + tag = "icon-whitegreen (WEST)"; + icon_state = "whitegreen"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bwu" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bwv" = ( +/obj/structure/table, +/obj/item/weapon/paper_bin{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/weapon/pen/red, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24 + }, +/turf/open/floor/plasteel/whitegreen/side{ + tag = "icon-whitegreen (EAST)"; + icon_state = "whitegreen"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bww" = ( +/turf/closed/wall, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bwx" = ( +/obj/item/weapon/computer_hardware/recharger/APC, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/awaymission/research/interior/gateway) +"bwy" = ( +/obj/machinery/gateway{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/awaymission/research/interior/gateway) +"bwz" = ( +/obj/machinery/gateway/centerstation, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/awaymission/research/interior/gateway) +"bwA" = ( +/obj/machinery/gateway{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/awaymission/research/interior/gateway) +"bwB" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/awaymission/research/interior/gateway) +"bwC" = ( +/obj/structure/barricade/wooden, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/awaymission/research/interior/gateway) +"bwD" = ( +/obj/item/weapon/paper{ + info = "
Nanotrasen Exploration and Colonization Program


Due to recent shutdowns of the Exploration and Colonization department shortly after this gateway was delievered on-site during station construction, this room has been condemmed and an engineering team will be on-site within the next few months to recollect the gate. Thank you for your cooperation."; + name = "NOTICE - GATEWAY STATUS" + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 8 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bwE" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bwF" = ( +/obj/structure/table, +/obj/machinery/power/apc{ + dir = 8; + name = "Primary Tool Storage APC"; + pixel_x = -24 + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bwG" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/holopad, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bwH" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bwI" = ( +/obj/structure/table, +/obj/item/device/multitool, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bwJ" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bwK" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/eastleft{ + name = "Hydroponics Desk"; + req_access_txt = "35" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bwL" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/darkgreen/side{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 4 + }, +/area/hydroponics) +"bwM" = ( +/obj/machinery/hydroponics/constructable, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bwN" = ( +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/obj/structure/sink{ + dir = 4; + icon_state = "sink"; + pixel_x = 11; + pixel_y = 0 + }, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bwO" = ( +/obj/structure/closet/crate/hydroponics, +/obj/item/weapon/shovel/spade, +/obj/item/weapon/wrench, +/obj/item/weapon/reagent_containers/glass/bucket, +/obj/item/weapon/wirecutters, +/turf/open/floor/plasteel/hydrofloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bwP" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/hydrofloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bwQ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plasteel/hydrofloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bwR" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Hydroponics"; + req_access_txt = "35" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bwS" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bwT" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bwU" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bwV" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/fans/tiny, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bwW" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bwX" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/plating/asteroid/airless, +/area/mine/unexplored{ + name = "Civilian Asteroid" + }) +"bwY" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/space, +/area/space) +"bwZ" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bxa" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bxb" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bxc" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bxd" = ( +/obj/machinery/airalarm{ + dir = 4; + icon_state = "alarm0"; + pixel_x = -22 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/yellow/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bxe" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=EngineeringWest3"; + location = "EngineeringWest2"; + name = "navigation beacon (Engineering-West 2)" + }, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bxf" = ( +/turf/open/floor/plasteel/yellow/corner{ + tag = "icon-yellowcorner (WEST)"; + icon_state = "yellowcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bxg" = ( +/obj/structure/closet/firecloset, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bxh" = ( +/obj/machinery/holopad, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bxi" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bxj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/general/visible, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bxk" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bxl" = ( +/obj/machinery/power/supermatter_shard/crystal, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bxm" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + icon_state = "manifold"; + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bxn" = ( +/obj/machinery/power/rad_collector{ + anchored = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4"; + d2 = 4 + }, +/obj/item/weapon/tank/internals/plasma, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bxo" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bxp" = ( +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 8 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bxq" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bxr" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/yellow/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bxs" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=EngineeringEast3"; + location = "EngineeringEast2"; + name = "navigation beacon (Engineering-East 2)" + }, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bxt" = ( +/obj/machinery/airalarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, +/turf/open/floor/plasteel/yellow/corner{ + tag = "icon-yellowcorner (WEST)"; + icon_state = "yellowcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bxu" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bxv" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 1 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bxw" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 1 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bxx" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/power/apc{ + dir = 1; + name = "Central Asteroid Maintence APC"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bxy" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bxz" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bxA" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bxB" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/structure/lattice/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/space, +/area/space) +"bxC" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/space, +/area/space) +"bxD" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/space) +"bxE" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8; + name = "Medbay Atmospherics Checkpoint"; + req_access_txt = "24" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bxF" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bxG" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bxH" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Mix Input"; + on = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bxI" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bxJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bxK" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bxL" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/window/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bxM" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bxN" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bxO" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = -3; + pixel_y = -3 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bxP" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bxQ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 2; + on = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bxR" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (EAST)"; + icon_state = "whiteblue"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bxS" = ( +/obj/structure/table/reinforced, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bxT" = ( +/obj/machinery/computer/med_data, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bxU" = ( +/obj/machinery/requests_console{ + announcementConsole = 0; + department = "Medbay"; + departmentType = 1; + name = "Medbay RC"; + pixel_x = 30; + pixel_y = 0; + pixel_z = 0 + }, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/mob/living/simple_animal/pet/cat/Runtime, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bxV" = ( +/obj/machinery/sleeper{ + dir = 4; + icon_state = "sleeper-open" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bxW" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bxX" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 6 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bxY" = ( +/obj/machinery/atmospherics/components/unary/cryo_cell{ + tag = "icon-cell-off (WEST)"; + icon_state = "cell-off"; + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bxZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/bed/roller, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (EAST)"; + icon_state = "whiteblue"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bya" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics_cloning) +"byb" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics_cloning) +"byc" = ( +/obj/machinery/door/airlock/glass_virology{ + name = "Monkey Pen"; + req_access_txt = "39" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"byd" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "Virology APC"; + pixel_x = -25; + pixel_y = 1 + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bye" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/grille/broken, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"byf" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"byg" = ( +/obj/machinery/gateway{ + dir = 10 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/awaymission/research/interior/gateway) +"byh" = ( +/obj/machinery/gateway, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/awaymission/research/interior/gateway) +"byi" = ( +/obj/machinery/gateway{ + dir = 6 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/awaymission/research/interior/gateway) +"byj" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/awaymission/research/interior/gateway) +"byk" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/structure/window/reinforced, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"byl" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bym" = ( +/obj/structure/table, +/obj/item/device/assembly/igniter, +/obj/item/device/assembly/igniter, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"byn" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"byo" = ( +/obj/item/weapon/twohanded/required/kirbyplants{ + tag = "icon-plant-18"; + icon_state = "plant-18" + }, +/turf/open/floor/plasteel/green/corner{ + tag = "icon-greencorner (WEST)"; + icon_state = "greencorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"byp" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/eastright{ + name = "Hydroponics Desk"; + req_access_txt = "35" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"byq" = ( +/obj/structure/chair/office/dark{ + dir = 8 + }, +/obj/effect/landmark/start/botanist, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"byr" = ( +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bys" = ( +/obj/effect/landmark/lightsout, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"byt" = ( +/turf/open/floor/plasteel/darkgreen/side{ + tag = "icon-darkgreen (NORTHEAST)"; + icon_state = "darkgreen"; + dir = 5; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"byu" = ( +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = -28; + pixel_y = 0 + }, +/turf/open/floor/plasteel/hydrofloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"byv" = ( +/turf/open/floor/plasteel/hydrofloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"byw" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/hydrofloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"byx" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/closet/emcloset, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"byy" = ( +/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/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"byz" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Port Asteroid Maintenance"; + req_access_txt = "12" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"byA" = ( +/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/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"byB" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"byC" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"byD" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/airlock/engineering{ + cyclelinkeddir = null; + name = "Engineering Foyer"; + req_access_txt = "0"; + req_one_access_txt = "10;24" + }, +/turf/open/floor/plasteel/yellow{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"byE" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"byF" = ( +/obj/structure/table, +/obj/item/weapon/pipe_dispenser, +/obj/machinery/camera{ + c_tag = "SM West"; + dir = 4; + icon_state = "camera"; + network = list("SS13","CE") + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"byG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"byH" = ( +/obj/machinery/power/rad_collector{ + anchored = 1 + }, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/obj/item/weapon/tank/internals/plasma, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"byI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 8 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"byJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Mix To Gas"; + on = 0 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"byK" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"byL" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ + dir = 8 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"byM" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"byN" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/engineering{ + cyclelinkeddir = null; + name = "Engineering Foyer"; + req_access_txt = "0"; + req_one_access_txt = "10;24" + }, +/turf/open/floor/plasteel/yellow{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"byO" = ( +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"byP" = ( +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"byQ" = ( +/turf/open/floor/plating/asteroid, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"byR" = ( +/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/open/floor/plating/asteroid, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"byS" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"byT" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/camera{ + c_tag = "Medbay Atmospherics Checkpoint"; + dir = 5; + icon_state = "camera"; + tag = "icon-camera (NORTHEAST)" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"byU" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"byV" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"byW" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Mix Output"; + on = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"byX" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/atmos{ + name = "Medbay Atmospherics Checkpoint"; + req_access_txt = "24" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"byY" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"byZ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bza" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bzb" = ( +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (EAST)"; + icon_state = "whiteblue"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bzc" = ( +/obj/structure/chair/office/light{ + dir = 8 + }, +/obj/effect/landmark/start/medical_doctor, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bzd" = ( +/obj/machinery/door/airlock/glass_medical{ + id_tag = null; + name = "Medbay"; + req_access_txt = "45" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bze" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/camera{ + c_tag = "Medbay East"; + dir = 9; + icon_state = "camera"; + tag = "icon-camera (NORTHWEST)" + }, +/obj/structure/noticeboard{ + dir = 8; + pixel_x = 27; + pixel_y = 0 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bzf" = ( +/obj/structure/table, +/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone, +/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bzg" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + on = 1 + }, +/obj/effect/landmark/start/medical_doctor, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bzh" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bzi" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + icon_state = "connector_map"; + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/machinery/camera{ + c_tag = "Cyrotubes"; + dir = 9; + icon_state = "camera"; + tag = "icon-camera (NORTHWEST)" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bzj" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "Medbay APC"; + pixel_x = -25; + pixel_y = 1 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bzk" = ( +/obj/structure/bed/roller, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (EAST)"; + icon_state = "whiteblue"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bzl" = ( +/obj/machinery/shower{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics_cloning) +"bzm" = ( +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics_cloning) +"bzn" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics_cloning) +"bzo" = ( +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (EAST)"; + icon_state = "whiteblue"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics_cloning) +"bzp" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1; + on = 1 + }, +/mob/living/carbon/monkey, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bzq" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + on = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bzr" = ( +/mob/living/carbon/monkey, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bzs" = ( +/obj/item/wallframe/apc, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/awaymission/research/interior/gateway) +"bzt" = ( +/obj/item/stack/rods, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/awaymission/research/interior/gateway) +"bzu" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/awaymission/research/interior/gateway) +"bzv" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/awaymission/research/interior/gateway) +"bzw" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/item/weapon/paper/pamphlet, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/awaymission/research/interior/gateway) +"bzx" = ( +/obj/item/clothing/head/cone, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bzy" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/storage/primary) +"bzz" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bzA" = ( +/obj/structure/table, +/obj/item/weapon/storage/toolbox/mechanical, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bzB" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/camera{ + c_tag = "Service Asteroid Hallway 3"; + dir = 4; + icon_state = "camera" + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bzC" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/airlock/glass{ + name = "Hydroponics"; + req_access_txt = "35" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bzD" = ( +/obj/machinery/door/airlock/glass{ + name = "Hydroponics"; + req_access_txt = "35" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bzE" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bzF" = ( +/turf/open/floor/plasteel/darkgreen/side{ + tag = "icon-darkgreen (SOUTHEAST)"; + icon_state = "darkgreen"; + dir = 6; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bzG" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bzH" = ( +/obj/structure/closet/secure_closet/hydroponics, +/turf/open/floor/plasteel/hydrofloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bzI" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel/hydrofloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bzJ" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/hydrofloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bzK" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bzL" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bzM" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 1 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bzN" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "Engineering Foyer APC"; + pixel_x = -25 + }, +/obj/structure/cable{ + icon_state = "0-4"; + d2 = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bzO" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel/yellow/corner{ + tag = "icon-yellowcorner (EAST)"; + icon_state = "yellowcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bzP" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (NORTH)"; + icon_state = "yellow"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bzQ" = ( +/obj/item/weapon/twohanded/required/kirbyplants{ + tag = "icon-plant-22"; + icon_state = "plant-22" + }, +/turf/open/floor/plasteel/yellow/corner{ + tag = "icon-yellowcorner (NORTH)"; + icon_state = "yellowcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bzR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/general/visible, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/button/door{ + id = "SM1"; + name = "Collector Shuttle Toggle"; + pixel_x = 24; + req_access_txt = "10" + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bzS" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 10 + }, +/obj/machinery/meter, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"bzT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/glass_engineering{ + heat_proof = 1; + name = "Supermatter Chamber"; + req_access_txt = "10" + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bzU" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + icon_state = "intact"; + dir = 6 + }, +/obj/machinery/meter, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"bzV" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 9 + }, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"bzW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/general/visible, +/obj/machinery/button/door{ + id = "SM2"; + name = "Collector Shuttle Toggle"; + pixel_x = -24; + req_access_txt = "10" + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bzX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bzY" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"bzZ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/item/weapon/twohanded/required/kirbyplants{ + tag = "icon-plant-22"; + icon_state = "plant-22" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/yellow/corner{ + tag = "icon-yellowcorner (EAST)"; + icon_state = "yellowcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bAa" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (NORTH)"; + icon_state = "yellow"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bAb" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/turf/open/floor/plasteel/yellow/corner{ + tag = "icon-yellowcorner (NORTH)"; + icon_state = "yellowcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bAc" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "Engineering Foyer APC"; + pixel_x = 23; + pixel_y = 2 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bAd" = ( +/turf/closed/mineral, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bAe" = ( +/obj/structure/closet/crate, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bAf" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating/asteroid, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bAg" = ( +/obj/structure/table, +/obj/item/weapon/wrench, +/obj/item/clothing/glasses/meson, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bAh" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bAi" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light/small, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bAj" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bAk" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bAl" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bAm" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/reagent_containers/food/drinks/britcup, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bAn" = ( +/obj/machinery/button/door{ + id = "medmain"; + name = "Medbay Foyer Doors"; + pixel_x = 0; + pixel_y = -24 + }, +/obj/machinery/requests_console{ + announcementConsole = 0; + department = "Medbay"; + departmentType = 1; + name = "Medbay RC"; + pixel_x = 30; + pixel_y = 0; + pixel_z = 0 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bAo" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/weapon/wrench/medical, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bAp" = ( +/obj/machinery/holopad, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bAq" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bAr" = ( +/obj/structure/bed/roller, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (EAST)"; + icon_state = "whiteblue"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bAs" = ( +/obj/machinery/shower{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics_cloning) +"bAt" = ( +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics_cloning) +"bAu" = ( +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics_cloning) +"bAv" = ( +/obj/machinery/dna_scannernew, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (EAST)"; + icon_state = "whiteblue"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics_cloning) +"bAw" = ( +/obj/structure/closet/crate, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating/asteroid, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bAx" = ( +/obj/machinery/light, +/mob/living/carbon/monkey, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"bAy" = ( +/obj/item/weapon/screwdriver, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/awaymission/research/interior/gateway) +"bAz" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/awaymission/research/interior/gateway) +"bAA" = ( +/obj/structure/table, +/obj/item/weapon/paper/pamphlet, +/obj/item/weapon/coin/silver, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/awaymission/research/interior/gateway) +"bAB" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/portable_atmospherics/scrubber, +/obj/machinery/camera{ + c_tag = "Primary Tool Storage South"; + dir = 5; + icon_state = "camera"; + tag = "icon-camera (NORTHEAST)" + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/storage/primary) +"bAC" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bAD" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/newscaster{ + pixel_x = -28; + pixel_y = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bAE" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Hydroponics West"; + dir = 4; + icon_state = "camera" + }, +/turf/open/floor/plasteel/green/side{ + tag = "icon-green (WEST)"; + icon_state = "green"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bAF" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bAG" = ( +/obj/machinery/vending/hydronutrients, +/turf/open/floor/plasteel/green/side{ + tag = "icon-green (NORTH)"; + icon_state = "green"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bAH" = ( +/obj/machinery/vending/hydroseeds, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/turf/open/floor/plasteel/green/side{ + tag = "icon-green (NORTH)"; + icon_state = "green"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bAI" = ( +/turf/open/floor/plasteel/darkgreen/side{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 4 + }, +/area/hydroponics) +"bAJ" = ( +/obj/structure/sink{ + dir = 4; + icon_state = "sink"; + pixel_x = 11; + pixel_y = 0 + }, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bAK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/window{ + dir = 8; + icon_state = "right"; + name = "Hydroponics Delievery Chute"; + opacity = 1; + req_access_txt = "33"; + tag = "icon-right (WEST)" + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bAL" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/disposaloutlet{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bAM" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 2; + icon_state = "pipe-j1s"; + name = "disposal pipe - Hydroponics"; + sortType = 21 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bAN" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bAO" = ( +/obj/structure/rack, +/obj/item/weapon/storage/bag/ore, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bAP" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"bAQ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bAR" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bAS" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bAT" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/yellow/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bAU" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/general/visible, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bAV" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/portable_atmospherics/canister, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bAW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 2; + icon_state = "pump_map"; + name = "Chamber To Filter" + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bAX" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bAY" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Gas To Chamber"; + on = 0 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bAZ" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bBa" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bBb" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"bBc" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/yellow/corner{ + tag = "icon-yellowcorner (WEST)"; + icon_state = "yellowcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bBd" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bBe" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 24 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bBf" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/engineering) +"bBg" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating/asteroid, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bBh" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bBi" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bBj" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/arrival/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bBk" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/white/side{ + tag = "icon-whitehall (EAST)"; + icon_state = "whitehall"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bBl" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bBm" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/machinery/holopad, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bBn" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (EAST)"; + icon_state = "whiteblue"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bBo" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/weapon/pen, +/obj/item/weapon/folder, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bBp" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bBq" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = -28; + pixel_y = 0 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bBr" = ( +/obj/structure/table, +/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone, +/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = -28; + pixel_y = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bBs" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bBt" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + icon_state = "connector_map"; + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bBu" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/camera{ + c_tag = "Medbay West"; + dir = 5; + icon_state = "camera"; + network = list("SS13"); + tag = "icon-camera (NORTHEAST)" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bBv" = ( +/obj/machinery/shower{ + dir = 4 + }, +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics_cloning) +"bBw" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/start/geneticist, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics_cloning) +"bBx" = ( +/obj/machinery/computer/cloning, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = 28; + pixel_y = 0 + }, +/obj/structure/sign/nosmoking_2{ + pixel_x = 32 + }, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (EAST)"; + icon_state = "whiteblue"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics_cloning) +"bBy" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/portable_atmospherics/pump, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/storage/primary) +"bBz" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/portable_atmospherics/pump, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/storage/primary) +"bBA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bBB" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bBC" = ( +/obj/machinery/door/airlock/glass{ + name = "Primary Tool Storage" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bBD" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bBE" = ( +/turf/open/floor/plasteel/green/side{ + tag = "icon-green (WEST)"; + icon_state = "green"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bBF" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bBG" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bBH" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 2; + on = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bBI" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/darkgreen/side{ + tag = "icon-darkgreen (NORTHEAST)"; + icon_state = "darkgreen"; + dir = 5; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bBJ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/camera{ + c_tag = "Hydroponics Backroom"; + dir = 9; + icon_state = "camera"; + tag = "icon-camera (NORTHWEST)" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/hydrofloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bBK" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bBL" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bBM" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bBN" = ( +/turf/closed/mineral/random/labormineral, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bBO" = ( +/obj/machinery/door/airlock/maintenance{ + name = "External Maintenance Access"; + req_access_txt = "12" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bBP" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (SOUTHEAST)"; + icon_state = "intact"; + dir = 6 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bBQ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (EAST)"; + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bBR" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (EAST)"; + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bBS" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (EAST)"; + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bBT" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/donkpockets, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (EAST)"; + icon_state = "intact"; + dir = 4 + }, +/obj/item/device/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = 29; + pixel_y = 0 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (EAST)"; + icon_state = "yellow"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bBU" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (SOUTHWEST)"; + icon_state = "intact"; + dir = 10 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bBV" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bBW" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bBX" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"bBY" = ( +/obj/machinery/door/airlock/glass_engineering{ + heat_proof = 1; + name = "Supermatter Chamber"; + req_access_txt = "10" + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bBZ" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bCa" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/donkpockets, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = -28; + pixel_y = 0 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bCb" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bCc" = ( +/turf/open/floor/plasteel/red/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bCd" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "0-2"; + d2 = 2 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plating/airless, +/area/security/checkpoint/engineering) +"bCe" = ( +/obj/structure/closet/secure_closet/security/engine, +/obj/machinery/newscaster/security_unit{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/red/side{ + tag = "icon-red (NORTHWEST)"; + icon_state = "red"; + dir = 9; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/engineering) +"bCf" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 2; + on = 1 + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/engineering) +"bCg" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "Engineering Security Checkpoint APC"; + pixel_x = 23; + pixel_y = 2 + }, +/obj/structure/cable{ + icon_state = "0-2"; + d2 = 2 + }, +/obj/structure/reagent_dispensers/peppertank{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/red/side{ + tag = "icon-red (NORTHEAST)"; + icon_state = "red"; + dir = 5; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/engineering) +"bCh" = ( +/obj/structure/janitorialcart, +/obj/item/weapon/mop, +/obj/item/weapon/reagent_containers/glass/bucket, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bCi" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 1 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bCj" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bCk" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/arrival/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bCl" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white/side{ + tag = "icon-whitehall (EAST)"; + icon_state = "whitehall"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bCm" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bCn" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bCo" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bCp" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bCq" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/whiteblue/corner{ + tag = "icon-whitebluecorner (EAST)"; + icon_state = "whitebluecorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bCr" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (NORTH)"; + icon_state = "whiteblue"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bCs" = ( +/obj/machinery/door/airlock/glass_medical{ + id_tag = "medmain"; + name = "Medbay"; + req_access_txt = "5" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bCt" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bCu" = ( +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bCv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bCw" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bCx" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bCy" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (EAST)"; + icon_state = "whiteblue"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bCz" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics_cloning) +"bCA" = ( +/obj/machinery/disposal/bin, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics_cloning) +"bCB" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 2; + on = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics_cloning) +"bCC" = ( +/obj/machinery/clonepod, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (EAST)"; + icon_state = "whiteblue"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics_cloning) +"bCD" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "Cloning APC"; + pixel_x = -25; + pixel_y = 1 + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics_cloning) +"bCE" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bCF" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bCG" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/item/device/assembly/mousetrap/armed, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bCH" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bCI" = ( +/obj/machinery/airalarm{ + dir = 1; + icon_state = "alarm0"; + pixel_y = -22 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bCJ" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/item/weapon/twohanded/required/kirbyplants{ + icon_state = "plant-22" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"bCK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bCL" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bCM" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/holopad, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bCN" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bCO" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bCP" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bCQ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/darkgreen/side{ + tag = "icon-darkgreen (SOUTHEAST)"; + icon_state = "darkgreen"; + dir = 6; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bCR" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bCS" = ( +/obj/structure/closet/secure_closet/hydroponics, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/hydrofloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bCT" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/turf/open/floor/plasteel/hydrofloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bCU" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/plantgenes, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/hydrofloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bCV" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "Port Asteroid Maintenance APC"; + pixel_x = -23; + pixel_y = 2 + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bCW" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bCX" = ( +/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/item/device/assembly/mousetrap/armed, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bCY" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bCZ" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/closet/crate, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating/asteroid, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bDa" = ( +/obj/structure/girder, +/turf/open/floor/plating/asteroid, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bDb" = ( +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/asteroid, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bDc" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating/asteroid, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bDd" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 1 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bDe" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (SOUTHEAST)"; + icon_state = "intact"; + dir = 6 + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 1 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bDf" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (EAST)"; + icon_state = "intact"; + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bDg" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (NORTHWEST)"; + icon_state = "intact"; + dir = 9 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bDh" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/obj/machinery/camera{ + c_tag = "Engineering Lobby West"; + dir = 4; + icon_state = "camera"; + network = list("SS13","CE") + }, +/obj/machinery/newscaster{ + pixel_x = -28 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bDi" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bDj" = ( +/obj/structure/table, +/obj/machinery/microwave, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (EAST)"; + icon_state = "yellow"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bDk" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bDl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4"; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bDm" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 5 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/meter, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bDn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bDo" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/trinary/filter{ + tag = "icon-filter_off (WEST)"; + icon_state = "filter_off"; + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bDp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/obj/structure/sign/radiation{ + pixel_y = 32 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bDq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/general/visible, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bDr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Gas To Filter"; + on = 0 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bDs" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/general/visible, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bDt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/obj/structure/sign/radiation{ + pixel_y = 32 + }, +/obj/machinery/meter, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bDu" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/general/visible, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bDv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 10 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bDw" = ( +/obj/structure/table, +/obj/machinery/microwave, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bDx" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bDy" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bDz" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bDA" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plating/airless, +/area/security/checkpoint/engineering) +"bDB" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/engineering) +"bDC" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/engineering) +"bDD" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/engineering) +"bDE" = ( +/obj/structure/sink{ + icon_state = "sink"; + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bDF" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Broom Closet"; + req_access_txt = "0" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bDG" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/arrival/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bDH" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/machinery/light, +/obj/structure/sign/chemistry{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bDI" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1; + on = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bDJ" = ( +/obj/machinery/camera{ + c_tag = "Medbay Lobby"; + dir = 1; + icon_state = "camera"; + network = list("SS13") + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bDK" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bDL" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/airalarm{ + dir = 1; + icon_state = "alarm0"; + pixel_y = -22 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bDM" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bDN" = ( +/obj/machinery/door/airlock/glass_medical{ + id_tag = "medmain"; + name = "Medbay"; + req_access_txt = "5" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bDO" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bDP" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bDQ" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bDR" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bDS" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 5 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bDT" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bDU" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bDV" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (EAST)"; + icon_state = "whiteblue"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bDW" = ( +/obj/machinery/door/airlock/glass_medical{ + id_tag = "cloningmain"; + name = "Genetics"; + req_access_txt = "0"; + req_one_access_txt = "5;9" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics_cloning) +"bDX" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics_cloning) +"bDY" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/obj/machinery/holopad, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics_cloning) +"bDZ" = ( +/obj/structure/table, +/obj/item/weapon/book/manual/medical_cloning{ + pixel_y = 6 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics_cloning) +"bEa" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bEb" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bEc" = ( +/obj/structure/disposaloutlet{ + icon_state = "outlet"; + dir = 1 + }, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/plating/airless, +/area/space) +"bEd" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bEe" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bEf" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bEg" = ( +/obj/machinery/camera{ + c_tag = "Hydroponics East"; + dir = 9; + icon_state = "camera"; + tag = "icon-camera (NORTHWEST)" + }, +/obj/structure/sink{ + dir = 4; + icon_state = "sink"; + pixel_x = 11; + pixel_y = 0 + }, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bEh" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/chem_master/condimaster, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/hydrofloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bEi" = ( +/obj/structure/grille, +/turf/open/floor/plating/asteroid, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bEj" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (SOUTHEAST)"; + icon_state = "intact"; + dir = 6 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bEk" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (EAST)"; + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bEl" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (NORTHWEST)"; + icon_state = "intact"; + dir = 9 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bEm" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bEn" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 2; + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bEo" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/cups, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (EAST)"; + icon_state = "yellow"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bEp" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bEq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bEr" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable/yellow{ + icon_state = "1-4"; + d1 = 1; + d2 = 4 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bEs" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bEt" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bEu" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bEv" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bEw" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bEx" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8"; + tag = "" + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bEy" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Atmos To Loop"; + on = 0 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bEz" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bEA" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/cups, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment, +/obj/machinery/camera{ + c_tag = "Engineering Lobby East"; + dir = 4; + icon_state = "camera"; + network = list("SS13","CE") + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bEB" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bEC" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bED" = ( +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bEE" = ( +/obj/structure/table/reinforced, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/engineering) +"bEF" = ( +/obj/structure/chair/office/dark{ + dir = 8 + }, +/obj/effect/landmark/start/depsec/engineering, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/engineering) +"bEG" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/engineering) +"bEH" = ( +/obj/structure/table, +/obj/machinery/recharger, +/obj/machinery/camera{ + c_tag = "Engineering Security Checkpoint"; + dir = 9; + icon_state = "camera"; + tag = "icon-camera (NORTHWEST)" + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = 28; + pixel_y = 0 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/engineering) +"bEI" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bEJ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/structure/sign/bluecross_2{ + pixel_x = 32 + }, +/turf/open/floor/plasteel/arrival/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bEK" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bEL" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/northleft{ + name = "Chemistry Desk"; + req_access_txt = "33" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bEM" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bEN" = ( +/obj/machinery/smartfridge/chemistry, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bEO" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/button/door{ + id = "medmain"; + name = "Medbay Doors"; + normaldoorcontrol = 1; + pixel_x = -24 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bEP" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/delivery{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bEQ" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/delivery{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bER" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bES" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bET" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/whiteblue/corner{ + tag = "icon-whitebluecorner (EAST)"; + icon_state = "whitebluecorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bEU" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics_cloning) +"bEV" = ( +/obj/structure/closet/wardrobe/white, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics_cloning) +"bEW" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics_cloning) +"bEX" = ( +/obj/machinery/button/door{ + id = "cloningmain"; + name = "Cloning Door"; + normaldoorcontrol = 1; + pixel_x = 0; + pixel_y = -24 + }, +/obj/machinery/camera{ + c_tag = "Cloning"; + dir = 10; + icon_state = "camera"; + network = list("SS13","CMO"); + tag = "icon-camera (SOUTHWEST)" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics_cloning) +"bEY" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/rxglasses{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/weapon/storage/box/bodybags, +/obj/item/weapon/pen, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics_cloning) +"bEZ" = ( +/turf/closed/wall/rust, +/area/space) +"bFa" = ( +/obj/structure/closet/emcloset, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bFb" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bFc" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Port Asteroid Maintenance"; + req_access_txt = "12" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bFd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bFe" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bFf" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bFg" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bFh" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bFi" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/darkgreen/side{ + tag = "icon-darkgreen (NORTHEAST)"; + icon_state = "darkgreen"; + dir = 5; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bFj" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/glass{ + name = "Hydroponics"; + req_access_txt = "35" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bFk" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/hydrofloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bFl" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/structure/table, +/obj/machinery/reagentgrinder, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plasteel/hydrofloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bFm" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bFn" = ( +/obj/structure/closet, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bFo" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating/asteroid, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bFp" = ( +/obj/structure/closet/firecloset/full, +/turf/open/floor/plating/asteroid, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bFq" = ( +/obj/effect/turf_decal/stripes/asteroid/line, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bFr" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bFs" = ( +/obj/machinery/vending/snack, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bFt" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bFu" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bFv" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (EAST)"; + icon_state = "yellow"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bFw" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (NORTHEAST)"; + icon_state = "intact"; + dir = 5 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bFx" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"bFy" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"bFz" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 10 + }, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"bFA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/closet/radiation, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bFB" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/closet/radiation, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bFC" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bFD" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bFE" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/camera{ + c_tag = "SM South"; + dir = 1; + icon_state = "camera"; + network = list("SS13","CE") + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bFF" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bFG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/closet/radiation, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"bFH" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + tag = "icon-intact (SOUTHEAST)"; + icon_state = "intact"; + dir = 6 + }, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"bFI" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 9 + }, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"bFJ" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bFK" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bFL" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bFM" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/door/airlock/glass_security{ + name = "Prisoner Processing"; + req_access_txt = "2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/engineering) +"bFN" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/engineering) +"bFO" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/engineering) +"bFP" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1 + }, +/obj/machinery/computer/security/telescreen{ + desc = "Used to watch the CE's wrench monkeys incase they build another disposal 'ride'."; + name = "Engineering Monitor"; + network = list("CE") + }, +/obj/structure/table, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/engineering) +"bFQ" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/landmark/lightsout, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bFR" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/camera{ + c_tag = "Medbay Asteroid Hallway 2"; + dir = 8; + icon_state = "camera"; + network = list("SS13","QM"); + tag = "icon-camera (WEST)" + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bFS" = ( +/obj/machinery/chem_master, +/turf/open/floor/plasteel/whiteyellow/side{ + tag = "icon-whiteyellow (NORTHWEST)"; + icon_state = "whiteyellow"; + dir = 9; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bFT" = ( +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/effect/landmark/start/chemist, +/turf/open/floor/plasteel/whiteyellow/side{ + tag = "icon-whiteyellow (NORTH)"; + icon_state = "whiteyellow"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bFU" = ( +/obj/structure/table/glass, +/obj/item/weapon/storage/box/beakers{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/dropper, +/turf/open/floor/plasteel/whiteyellow/side{ + tag = "icon-whiteyellow (NORTH)"; + icon_state = "whiteyellow"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bFV" = ( +/turf/open/floor/plasteel/whiteyellow/side{ + tag = "icon-whiteyellow (NORTH)"; + icon_state = "whiteyellow"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bFW" = ( +/obj/machinery/chem_master, +/turf/open/floor/plasteel/whiteyellow/side{ + tag = "icon-whiteyellow (NORTH)"; + icon_state = "whiteyellow"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bFX" = ( +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/turf/open/floor/plasteel/whiteyellow/side{ + tag = "icon-whiteyellow (NORTH)"; + icon_state = "whiteyellow"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bFY" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel/whiteyellow/side{ + tag = "icon-whiteyellow (NORTHEAST)"; + icon_state = "whiteyellow"; + dir = 5; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bFZ" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/eastleft{ + name = "Chemistry Desk"; + req_access_txt = "33" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bGa" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/whiteblue/corner{ + tag = "icon-whitebluecorner (WEST)"; + icon_state = "whitebluecorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bGb" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bGc" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bGd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bGe" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Medbay South"; + dir = 6; + icon_state = "camera" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bGf" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bGg" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bGh" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bGi" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bGj" = ( +/obj/machinery/door/airlock/glass_research{ + name = "Genetics Research"; + req_access_txt = "0"; + req_one_access_txt = "5;9" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bGk" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bGl" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bGm" = ( +/obj/item/weapon/storage/toolbox/mechanical/old, +/turf/open/floor/plating, +/area/space) +"bGn" = ( +/obj/structure/girder, +/obj/item/stack/sheet/metal, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bGo" = ( +/obj/machinery/light/small, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bGp" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bGq" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bGr" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bGs" = ( +/obj/structure/table, +/obj/item/seeds/grape, +/obj/item/seeds/grape, +/turf/open/floor/plasteel/green/side{ + tag = "icon-green (NORTHWEST)"; + icon_state = "green"; + dir = 9; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bGt" = ( +/obj/structure/table, +/obj/machinery/light, +/obj/item/seeds/apple, +/obj/item/seeds/chili, +/turf/open/floor/plasteel/green/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bGu" = ( +/obj/structure/table, +/obj/item/weapon/shovel/spade, +/turf/open/floor/plasteel/green/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bGv" = ( +/obj/machinery/biogenerator, +/turf/open/floor/plasteel/green/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bGw" = ( +/obj/machinery/seed_extractor, +/turf/open/floor/plasteel/green/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bGx" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1; + on = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bGy" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bGz" = ( +/obj/structure/reagent_dispensers/watertank/high, +/obj/item/weapon/reagent_containers/glass/bucket, +/turf/open/floor/plasteel/darkgreen/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bGA" = ( +/obj/structure/reagent_dispensers/watertank/high, +/obj/item/weapon/reagent_containers/glass/bucket, +/turf/open/floor/plasteel/darkgreen/side{ + tag = "icon-darkgreen (SOUTHEAST)"; + icon_state = "darkgreen"; + dir = 6; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bGB" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/hydrofloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bGC" = ( +/obj/structure/table, +/obj/item/weapon/book/manual/hydroponics_pod_people, +/obj/item/weapon/paper/hydroponics, +/obj/item/stack/packageWrap, +/obj/item/device/destTagger, +/turf/open/floor/plasteel/hydrofloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bGD" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "Hydroponics APC"; + pixel_x = -23; + pixel_y = 2 + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bGE" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bGF" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bGG" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Atmospehrics Maintenance"; + req_access_txt = "12;24" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bGH" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bGI" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bGJ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bGK" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bGL" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bGM" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bGN" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (EAST)"; + icon_state = "yellow"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bGO" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bGP" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "Engineering APC"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1; + d2 = 2 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bGQ" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bGR" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 5 + }, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"bGS" = ( +/obj/machinery/door/airlock/glass_engineering{ + name = "Supermatter Engine Room"; + req_access_txt = "10" + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bGT" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1; + d2 = 2 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bGU" = ( +/obj/machinery/door/airlock/glass_engineering{ + name = "Supermatter Engine Room"; + req_access_txt = "10" + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"bGV" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bGW" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/sign/map/left/ceres{ + pixel_y = 32 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bGX" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/yellow/corner{ + tag = "icon-yellowcorner (NORTH)"; + icon_state = "yellowcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bGY" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bGZ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bHa" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/security/checkpoint/engineering) +"bHb" = ( +/obj/machinery/computer/secure_data, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/engineering) +"bHc" = ( +/obj/machinery/airalarm{ + dir = 1; + icon_state = "alarm0"; + pixel_y = -22 + }, +/obj/structure/filingcabinet, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/engineering) +"bHd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/item/weapon/twohanded/required/kirbyplants{ + tag = "icon-plant-21"; + icon_state = "plant-21" + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 6; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/engineering) +"bHe" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bHf" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bHg" = ( +/obj/machinery/chem_dispenser, +/turf/open/floor/plasteel/whiteyellow/side{ + tag = "icon-whiteyellow (WEST)"; + icon_state = "whiteyellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bHh" = ( +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bHi" = ( +/obj/machinery/chem_heater, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bHj" = ( +/obj/machinery/chem_dispenser, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bHk" = ( +/turf/open/floor/plasteel/whiteyellow/side{ + tag = "icon-whiteyellow (EAST)"; + icon_state = "whiteyellow"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bHl" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (WEST)"; + icon_state = "whiteblue"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bHm" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bHn" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bHo" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bHp" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = -32 + }, +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bHq" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bHr" = ( +/obj/machinery/disposal/bin, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bHs" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/junction, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bHt" = ( +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (EAST)"; + icon_state = "whitepurple"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bHu" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bHv" = ( +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bHw" = ( +/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/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bHx" = ( +/obj/item/weapon/coin/gold, +/turf/open/floor/plating, +/area/space) +"bHy" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bHz" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance, +/obj/item/weapon/electronics/airlock, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bHA" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bHB" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Port Asteroid Maintenance"; + req_access_txt = "12" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bHC" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bHD" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bHE" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bHF" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bHG" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 2; + icon_state = "pipe-j1s"; + name = "disposal pipe - Library"; + sortType = 16 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bHH" = ( +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/atmos) +"bHI" = ( +/obj/machinery/portable_atmospherics/canister/freon, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/atmos) +"bHJ" = ( +/obj/machinery/portable_atmospherics/canister/toxins, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/atmos) +"bHK" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/atmos) +"bHL" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bHM" = ( +/obj/structure/closet/firecloset/full, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bHN" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bHO" = ( +/obj/structure/table, +/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bHP" = ( +/obj/structure/table, +/obj/item/stack/sheet/glass/fifty, +/obj/machinery/power/apc{ + dir = 1; + name = "Atmospherics APC"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1; + d2 = 2 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bHQ" = ( +/obj/structure/table, +/obj/item/weapon/grenade/chem_grenade/metalfoam, +/obj/item/weapon/grenade/chem_grenade/metalfoam, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bHR" = ( +/obj/structure/rack, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/head/welding, +/obj/item/clothing/head/welding, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bHS" = ( +/obj/structure/tank_dispenser, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (EAST)"; + icon_state = "yellow"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bHT" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bHU" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bHV" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bHW" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bHX" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (EAST)"; + icon_state = "yellow"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bHY" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bHZ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bIa" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bIb" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bIc" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/item/weapon/twohanded/required/kirbyplants{ + icon_state = "plant-20"; + luminosity = 2; + tag = "icon-plant-20" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bId" = ( +/obj/structure/table, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bIe" = ( +/obj/structure/table, +/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/sheet/metal/fifty, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bIf" = ( +/obj/structure/table, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/mob/living/simple_animal/parrot/Poly, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bIg" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bIh" = ( +/obj/structure/table, +/obj/item/stack/sheet/plasteel/fifty, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bIi" = ( +/obj/structure/table, +/obj/item/stack/sheet/rglass{ + amount = 50 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bIj" = ( +/obj/structure/table, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bIk" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bIl" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bIm" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (EAST)"; + icon_state = "yellow"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bIn" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bIo" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/yellow/corner{ + tag = "icon-yellowcorner (WEST)"; + icon_state = "yellowcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bIp" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bIq" = ( +/obj/machinery/vending/cola, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (EAST)"; + icon_state = "yellow"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bIr" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bIs" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bIt" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bIu" = ( +/obj/machinery/requests_console{ + department = "Chemistry"; + departmentType = 2; + name = "Chemistry RC"; + pixel_x = -30; + pixel_y = 0 + }, +/mob/living/simple_animal/bot/cleanbot{ + name = "Na2CO3" + }, +/turf/open/floor/plasteel/whiteyellow/corner{ + tag = "icon-whiteyellowcorner (NORTH)"; + icon_state = "whiteyellowcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bIv" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bIw" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bIx" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/holopad, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bIy" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bIz" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bIA" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/whiteyellow/side{ + tag = "icon-whiteyellow (EAST)"; + icon_state = "whiteyellow"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bIB" = ( +/obj/machinery/door/airlock/glass_medical{ + id_tag = null; + name = "Chemistry Lab"; + req_access_txt = "5; 33" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bIC" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (WEST)"; + icon_state = "whiteblue"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bID" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j2"; + dir = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bIE" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bIF" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bIG" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bIH" = ( +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/obj/effect/landmark/start/geneticist, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bII" = ( +/obj/machinery/computer/scan_consolenew, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (EAST)"; + icon_state = "whitepurple"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bIJ" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/mob/living/carbon/monkey, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bIK" = ( +/obj/structure/flora/tree/palm, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bIL" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bIM" = ( +/obj/structure/rack, +/obj/item/clothing/suit/space/fragile, +/obj/item/clothing/head/helmet/space/fragile, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bIN" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bIO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bIP" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bIQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bIR" = ( +/obj/structure/disposaloutlet{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bIS" = ( +/obj/machinery/disposal/deliveryChute{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/space) +"bIT" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/space) +"bIU" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plating, +/area/space) +"bIV" = ( +/obj/machinery/airalarm{ + dir = 4; + icon_state = "alarm0"; + pixel_x = -22 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bIW" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bIX" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bIY" = ( +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/fitness) +"bIZ" = ( +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = 28 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/fitness) +"bJa" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 2; + on = 1 + }, +/obj/machinery/camera{ + c_tag = "Fitness North" + }, +/obj/item/weapon/twohanded/required/kirbyplants{ + tag = "icon-applebush"; + icon_state = "applebush" + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/fitness) +"bJb" = ( +/mob/living/simple_animal/crab{ + desc = "The local trainer hired to keep the crew in shape by aggressively snipping at them."; + name = "Crabohydrates" + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/fitness) +"bJc" = ( +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = 0; + pixel_y = 32; + random_basetype = /obj/structure/sign/poster/official + }, +/obj/structure/table, +/obj/item/weapon/folder/red{ + pixel_x = 8; + pixel_y = 6 + }, +/obj/item/weapon/folder/yellow{ + pixel_x = -2; + pixel_y = 2 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/fitness) +"bJd" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/structure/filingcabinet, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/fitness) +"bJe" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bJf" = ( +/obj/structure/bookcase{ + name = "Forbidden Knowledge" + }, +/turf/open/floor/plasteel/chapel{ + tag = "icon-chapel (NORTH)"; + icon_state = "chapel"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bJg" = ( +/obj/structure/table/wood, +/obj/item/device/taperecorder{ + pixel_y = 0 + }, +/obj/item/device/camera, +/obj/item/device/radio/intercom{ + pixel_y = 25 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bJh" = ( +/obj/structure/table/wood, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/weapon/pen/invisible, +/obj/item/stack/packageWrap, +/obj/item/device/destTagger, +/turf/open/floor/plasteel/chapel{ + tag = "icon-chapel (EAST)"; + icon_state = "chapel"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bJi" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/disposaloutlet, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bJj" = ( +/obj/structure/table/wood, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bJk" = ( +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/obj/item/weapon/twohanded/required/kirbyplants{ + icon_state = "plant-22" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bJl" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 24 + }, +/obj/machinery/power/apc{ + dir = 4; + name = "Library APC"; + pixel_x = 23; + pixel_y = 2 + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bJm" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bJn" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bJo" = ( +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bJp" = ( +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bJq" = ( +/obj/structure/fireplace, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bJr" = ( +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bJs" = ( +/obj/structure/chair/comfy/black{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bJt" = ( +/obj/structure/rack, +/obj/item/weapon/grown/log, +/obj/item/weapon/grown/log, +/obj/item/weapon/grown/log, +/obj/item/weapon/grown/log, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/obj/item/weapon/hatchet, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bJu" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bJv" = ( +/obj/machinery/portable_atmospherics/canister/water_vapor, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/atmos) +"bJw" = ( +/obj/machinery/camera{ + c_tag = "Atmospherics North-West"; + dir = 4; + icon_state = "camera"; + network = list("SS13","CE") + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bJx" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bJy" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bJz" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bJA" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bJB" = ( +/obj/structure/chair/office/dark{ + dir = 4 + }, +/obj/effect/landmark/start/atmospheric_technician, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (EAST)"; + icon_state = "yellow"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bJC" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "atmodesk" + }, +/obj/machinery/door/window/eastright{ + req_access_txt = "24" + }, +/turf/open/floor/plasteel/yellow{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bJD" = ( +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bJE" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bJF" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bJG" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 4 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (EAST)"; + icon_state = "yellow"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bJH" = ( +/obj/machinery/door/airlock/engineering{ + cyclelinkeddir = null; + name = "Engine Room"; + req_access_txt = "10;11" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/yellow{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bJI" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bJJ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4"; + tag = "" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bJK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bJL" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bJM" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/effect/landmark/start/station_engineer, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bJN" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bJO" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bJP" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/landmark/start/station_engineer, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bJQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bJR" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bJS" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bJT" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (EAST)"; + icon_state = "yellow"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bJU" = ( +/obj/machinery/door/airlock/engineering{ + cyclelinkeddir = null; + name = "Engine Room"; + req_access_txt = "10;11" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/yellow{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bJV" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 4 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bJW" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bJX" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bJY" = ( +/obj/machinery/vending/cigarette, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (EAST)"; + icon_state = "yellow"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bJZ" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/gravity_generator) +"bKa" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bKb" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bKc" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bKd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bKe" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 24 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/whiteyellow/corner{ + tag = "icon-whiteyellowcorner (EAST)"; + icon_state = "whiteyellowcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bKf" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bKg" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (SOUTHWEST)"; + icon_state = "whiteblue"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bKh" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/whiteblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bKi" = ( +/turf/open/floor/plasteel/whiteblue/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"bKj" = ( +/obj/structure/table, +/obj/item/weapon/folder/white, +/obj/item/weapon/gun/syringe, +/obj/item/weapon/reagent_containers/dropper, +/obj/item/weapon/soap/nanotrasen, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bKk" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/o2{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/weapon/storage/firstaid/o2, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bKl" = ( +/obj/structure/table, +/obj/item/device/radio/intercom, +/obj/item/weapon/storage/firstaid/toxin{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/weapon/storage/firstaid/toxin, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = -3; + pixel_y = -3 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bKm" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/fire{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/weapon/storage/firstaid/fire, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bKn" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/brute{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/weapon/storage/firstaid/brute, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bKo" = ( +/obj/structure/disposalpipe/trunk, +/obj/structure/disposaloutlet, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bKp" = ( +/obj/structure/closet/secure_closet/medical1, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = -28; + pixel_y = 0 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bKq" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bKr" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bKs" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bKt" = ( +/obj/machinery/dna_scannernew, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (EAST)"; + icon_state = "whitepurple"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bKu" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating/asteroid, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bKv" = ( +/obj/structure/disposalpipe/junction{ + tag = "icon-pipe-j2 (WEST)"; + icon_state = "pipe-j2"; + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bKw" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 1; + icon_state = "pipe-j2s"; + name = "disposal pipe - Engineering"; + sortType = 4; + tag = "icon-pipe-j2s (NORTH)" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bKx" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bKy" = ( +/obj/item/chair, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bKz" = ( +/obj/structure/weightlifter, +/obj/structure/extinguisher_cabinet{ + pixel_x = -24 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bKA" = ( +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bKB" = ( +/obj/structure/stacklifter, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bKC" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bKD" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bKE" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/table, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/fitness) +"bKF" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/fitness) +"bKG" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/structure/chair/office/dark, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/fitness) +"bKH" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/newscaster{ + pixel_x = 28; + pixel_y = 4 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/fitness) +"bKI" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bKJ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bKK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bKL" = ( +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = -28; + pixel_y = 0 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bKM" = ( +/obj/structure/chair/comfy/brown{ + dir = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bKN" = ( +/obj/structure/destructible/cult/tome, +/obj/item/clothing/under/suit_jacket/red, +/obj/item/weapon/book/codex_gigas, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bKO" = ( +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bKP" = ( +/obj/machinery/door/window{ + dir = 8; + icon_state = "right"; + name = "Library Desk"; + opacity = 1; + req_access_txt = "37"; + tag = "icon-right (WEST)" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bKQ" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = 32; + random_basetype = /obj/structure/sign/poster/official + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bKR" = ( +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bKS" = ( +/obj/structure/chair/comfy/black{ + tag = "icon-comfychair (NORTH)"; + icon_state = "comfychair"; + dir = 1 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bKT" = ( +/obj/structure/table/wood, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bKU" = ( +/obj/structure/chair/comfy/black{ + tag = "icon-comfychair (NORTH)"; + icon_state = "comfychair"; + dir = 1 + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bKV" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 28 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bKW" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/grille, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bKX" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bKY" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/atmos) +"bKZ" = ( +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/atmos) +"bLa" = ( +/obj/machinery/door/airlock/engineering{ + cyclelinkeddir = null; + name = "Atmospherics Storage"; + req_access_txt = "24" + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/atmos) +"bLb" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4"; + tag = "" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bLc" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bLd" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bLe" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/machinery/button/door{ + id = "atmodesk"; + name = "Atmospherics Desk Shutters"; + pixel_x = 24 + }, +/obj/item/weapon/twohanded/required/kirbyplants{ + tag = "icon-plant-13"; + icon_state = "plant-13" + }, +/turf/open/floor/plasteel/yellow/side{ + dir = 6 + }, +/area/atmos) +"bLf" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bLg" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (SOUTHWEST)"; + icon_state = "yellow"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bLh" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bLi" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/pump, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bLj" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (SOUTHEAST)"; + icon_state = "yellow"; + dir = 6; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bLk" = ( +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bLl" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bLm" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bLn" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bLo" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bLp" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bLq" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bLr" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bLs" = ( +/obj/structure/table, +/obj/item/weapon/storage/toolbox/electrical{ + pixel_x = -4; + pixel_x = 1; + pixel_y = 5 + }, +/obj/item/weapon/storage/box/lights/mixed, +/obj/item/weapon/storage/box/lights/mixed, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bLt" = ( +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (EAST)"; + icon_state = "yellow"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bLu" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (SOUTHWEST)"; + icon_state = "yellow"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bLv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bLw" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bLx" = ( +/obj/structure/table, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/item/stack/packageWrap, +/obj/item/device/destTagger, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (SOUTHEAST)"; + icon_state = "yellow"; + dir = 6; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"bLy" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/table, +/obj/item/device/geiger_counter, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/gravity_generator) +"bLz" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/gravity_generator) +"bLA" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bLB" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bLC" = ( +/obj/structure/closet/secure_closet/chemical, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bLD" = ( +/obj/structure/table/glass, +/obj/item/hand_labeler_refill, +/obj/item/hand_labeler_refill, +/obj/item/weapon/hand_labeler, +/obj/item/stack/packageWrap, +/obj/machinery/light, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bLE" = ( +/obj/structure/table/glass, +/obj/item/stack/cable_coil/random, +/obj/item/stack/cable_coil/random, +/obj/item/weapon/book/manual/wiki/chemistry, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bLF" = ( +/obj/structure/table/glass, +/obj/item/weapon/reagent_containers/glass/bottle/epinephrine, +/obj/item/stack/sheet/mineral/plasma{ + layer = 2.9 + }, +/obj/item/stack/sheet/mineral/plasma{ + layer = 2.9 + }, +/obj/machinery/camera{ + c_tag = "Chemistry"; + dir = 10; + icon_state = "camera"; + network = list("SS13","CMO"); + tag = "icon-camera (SOUTHWEST)" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bLG" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bLH" = ( +/obj/structure/table/glass, +/obj/machinery/reagentgrinder, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bLI" = ( +/obj/structure/table/glass, +/obj/item/weapon/storage/box/syringes, +/obj/item/clothing/glasses/science{ + pixel_x = 2; + pixel_y = 4 + }, +/obj/item/clothing/glasses/science, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bLJ" = ( +/obj/structure/table/glass, +/obj/item/weapon/grenade/chem_grenade, +/obj/item/weapon/grenade/chem_grenade, +/obj/item/weapon/grenade/chem_grenade, +/obj/item/weapon/grenade/chem_grenade, +/obj/item/weapon/screwdriver{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/machinery/light, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bLK" = ( +/obj/structure/closet/wardrobe/chemistry_white, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bLL" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bLM" = ( +/obj/machinery/door/airlock/glass_medical{ + id_tag = null; + name = "Medbay Storage"; + req_access_txt = "45" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bLN" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bLO" = ( +/obj/structure/table, +/obj/structure/bedsheetbin{ + pixel_x = 2 + }, +/obj/item/clothing/suit/straight_jacket, +/obj/item/clothing/mask/muzzle, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bLP" = ( +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bLQ" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bLR" = ( +/obj/structure/closet/secure_closet/personal/patient, +/obj/machinery/requests_console{ + department = "Genetics"; + departmentType = 0; + name = "Genetics Requests Console"; + pixel_x = -30; + pixel_y = 0 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bLS" = ( +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bLT" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bLU" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + on = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bLV" = ( +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (EAST)"; + icon_state = "whitepurple"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bLW" = ( +/obj/machinery/door/window/westleft{ + name = "Monkey Pen"; + req_access_txt = "9" + }, +/mob/living/carbon/monkey, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bLX" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bLY" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/girder, +/obj/structure/grille, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bLZ" = ( +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 1 + }, +/obj/structure/girder, +/obj/structure/grille, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bMa" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 1; + icon_state = "pipe-j2s"; + name = "disposal pipe - Atmospherics"; + sortType = 6; + tag = "icon-pipe-j2s (NORTH)" + }, +/obj/structure/grille/broken, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bMb" = ( +/obj/structure/grille/broken, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bMc" = ( +/obj/structure/table, +/obj/item/weapon/storage/fancy/cigarettes, +/turf/open/floor/plating/airless, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bMd" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bMe" = ( +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = -32; + random_basetype = /obj/structure/sign/poster/official + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bMf" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bMg" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bMh" = ( +/obj/structure/table, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/fitness) +"bMi" = ( +/obj/structure/table, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/weapon/pen, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/fitness) +"bMj" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/window/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bMk" = ( +/obj/machinery/light/small, +/turf/open/floor/plasteel/chapel{ + tag = "icon-chapel (WEST)"; + icon_state = "chapel"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bMl" = ( +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bMm" = ( +/turf/open/floor/plasteel/chapel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bMn" = ( +/obj/structure/table/wood, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bMo" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bMp" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bMq" = ( +/obj/machinery/door/airlock/glass{ + name = "Library" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bMr" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bMs" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bMt" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/obj/machinery/light_switch{ + pixel_x = 24 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bMu" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/item/device/assembly/mousetrap/armed, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bMv" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/camera{ + c_tag = "Atmospherics Storage"; + dir = 4; + icon_state = "camera"; + network = list("SS13","CE") + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/atmos) +"bMw" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/atmos) +"bMx" = ( +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/atmos) +"bMy" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/atmos) +"bMz" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 5 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bMA" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 10 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bMB" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bMC" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bMD" = ( +/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 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/atmos{ + name = "Atmospherics"; + req_access_txt = "24" + }, +/turf/open/floor/plasteel/yellow{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bME" = ( +/obj/machinery/camera{ + c_tag = "Engineering West"; + dir = 4; + icon_state = "camera"; + network = list("SS13","CE") + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bMF" = ( +/obj/structure/table, +/obj/item/weapon/storage/toolbox/mechanical, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bMG" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/table, +/obj/item/weapon/storage/toolbox/electrical{ + pixel_x = -4; + pixel_x = 1; + pixel_y = 5 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bMH" = ( +/obj/structure/table, +/obj/item/weapon/book/manual/wiki/engineering_construction, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bMI" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 2; + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bMJ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bMK" = ( +/obj/effect/landmark/start/station_engineer, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bML" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/table, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/item/weapon/book/manual/wiki/engineering_guide, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bMM" = ( +/obj/structure/table, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bMN" = ( +/obj/structure/table, +/obj/item/clothing/head/welding, +/obj/item/clothing/head/welding, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bMO" = ( +/obj/structure/closet/secure_closet/engineering_personal, +/obj/item/weapon/pickaxe/mini, +/obj/machinery/camera{ + c_tag = "Engineering East"; + dir = 9; + icon_state = "camera"; + network = list("SS13","CE"); + tag = "icon-camera (NORTHWEST)" + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (EAST)"; + icon_state = "yellow"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bMP" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/engineering{ + cyclelinkeddir = null; + name = "Gravity Generator"; + req_access_txt = "10;11" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/gravity_generator) +"bMQ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/gravity_generator) +"bMR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/gravity_generator) +"bMS" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/structure/closet/secure_closet/medical3, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bMT" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bMU" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bMV" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bMW" = ( +/obj/effect/landmark/start/medical_doctor, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bMX" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bMY" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/landmark/start/medical_doctor, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bMZ" = ( +/obj/structure/sink{ + dir = 4; + icon_state = "sink"; + pixel_x = 11; + pixel_y = 0 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bNa" = ( +/obj/structure/closet/wardrobe/genetics_white, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bNb" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bNc" = ( +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/effect/landmark/start/geneticist, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bNd" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/rack, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/item/weapon/weldingtool/hugetank, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bNe" = ( +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 1 + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bNf" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 1; + icon_state = "pipe-j2s"; + name = "disposal pipe - Genetics"; + sortType = 23; + tag = "icon-pipe-j2s (NORTH)" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bNg" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bNh" = ( +/obj/structure/weightlifter, +/obj/machinery/camera{ + c_tag = "Fitness West"; + dir = 4; + network = list("SS13") + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bNi" = ( +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bNj" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bNk" = ( +/obj/effect/landmark/lightsout, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bNl" = ( +/obj/machinery/door/airlock/glass{ + name = "Fitness Area" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bNm" = ( +/obj/machinery/door/morgue{ + name = "Private Study"; + req_access_txt = "37" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bNn" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bNo" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bNp" = ( +/obj/machinery/door/airlock/glass{ + name = "Library" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bNq" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bNr" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bNs" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bNt" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bNu" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bNv" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -24 + }, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bNw" = ( +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ + dir = 8 + }, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bNx" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + icon_state = "intact"; + dir = 10 + }, +/turf/open/floor/plasteel/yellow/corner{ + tag = "icon-yellowcorner (WEST)"; + icon_state = "yellowcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bNy" = ( +/obj/effect/landmark/lightsout, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bNz" = ( +/mob/living/simple_animal/pet/dog/pug{ + desc = "It's Spaghetti, the official pug of Atmospherics. Appropriately named after the jumbled mess of piping."; + name = "Spaghetti" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bNA" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/camera{ + c_tag = "Atmospherics North"; + dir = 9; + icon_state = "camera"; + network = list("SS13","CE"); + tag = "icon-camera (NORTHWEST)" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bNB" = ( +/obj/machinery/space_heater, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bNC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bND" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bNE" = ( +/obj/structure/reagent_dispensers/watertank/high, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bNF" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bNG" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bNH" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bNI" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bNJ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bNK" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bNL" = ( +/obj/machinery/suit_storage_unit/ce, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/window/brigdoor/westright{ + name = "Chief Engineer's Hardsuit"; + req_access_txt = "56" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bNM" = ( +/obj/structure/closet/radiation, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/gravity_generator) +"bNN" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/gravity_generator) +"bNO" = ( +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/gravity_generator) +"bNP" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/gravity_generator) +"bNQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/gravity_generator) +"bNR" = ( +/obj/machinery/gravity_generator/main/station, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/gravity_generator) +"bNS" = ( +/obj/structure/closet/crate, +/turf/open/floor/plating/asteroid, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bNT" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bNU" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bNV" = ( +/obj/machinery/door/airlock/maintenance{ + name = "External Maintenance Access"; + req_access_txt = "12" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bNW" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 8 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bNX" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "Chemistry APC"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"bNY" = ( +/obj/structure/plasticflaps, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bNZ" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bOa" = ( +/obj/structure/closet/secure_closet/medical3, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bOb" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bOc" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bOd" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bOe" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bOf" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bOg" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/obj/machinery/requests_console{ + announcementConsole = 0; + department = "Medbay"; + departmentType = 1; + name = "Medbay RC"; + pixel_x = 30; + pixel_y = 0; + pixel_z = 0 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bOh" = ( +/obj/structure/table/glass, +/obj/item/weapon/storage/box/disks{ + pixel_x = 2; + pixel_y = 2 + }, +/turf/open/floor/plasteel/whitepurple/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bOi" = ( +/obj/structure/table/glass, +/obj/item/weapon/storage/box/rxglasses, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/plasteel/whitepurple/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bOj" = ( +/obj/structure/table/glass, +/obj/item/weapon/folder/white, +/obj/item/device/radio/headset/headset_medsci, +/obj/item/weapon/storage/pill_bottle/mutadone, +/obj/item/weapon/storage/pill_bottle/mannitol, +/obj/structure/extinguisher_cabinet{ + pixel_y = -32 + }, +/obj/machinery/camera{ + c_tag = "Genetics"; + dir = 10; + icon_state = "camera"; + network = list("SS13","CMO"); + tag = "icon-camera (SOUTHWEST)" + }, +/turf/open/floor/plasteel/whitepurple/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bOk" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/whitepurple/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bOl" = ( +/obj/machinery/dna_scannernew, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (SOUTHEAST)"; + icon_state = "whitepurple"; + dir = 6; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bOm" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bOn" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bOo" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/grille/broken, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bOp" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bOq" = ( +/obj/machinery/door/airlock/maintenance{ + name = "External Maintenance Access"; + req_access_txt = "12" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bOr" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bOs" = ( +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 1 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bOt" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 1; + icon_state = "pipe-j2s"; + name = "disposal pipe - Chemistry"; + sortType = 11; + tag = "icon-pipe-j2s (NORTH)" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bOu" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bOv" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bOw" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "Fitness APC"; + pixel_x = 23; + pixel_y = 2 + }, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bOx" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_x = -32 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bOy" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bOz" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bOA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bOB" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/holopad, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bOC" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/window/fulltile, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bOD" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Service Asteroid Hallway 4"; + dir = 4; + icon_state = "camera" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bOE" = ( +/obj/structure/table/wood, +/obj/machinery/computer/libraryconsole/bookmanagement{ + pixel_y = 0 + }, +/obj/machinery/light_switch{ + pixel_y = 28 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bOF" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/photocopier, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bOG" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bOH" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bOI" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bOJ" = ( +/obj/structure/chair/office/dark, +/obj/effect/landmark/start/assistant, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bOK" = ( +/obj/structure/chair/office/dark, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bOL" = ( +/obj/item/weapon/twohanded/required/kirbyplants{ + icon_state = "plant-22" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bOM" = ( +/obj/structure/grille, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bON" = ( +/obj/machinery/pipedispenser/disposal/transit_tube, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bOO" = ( +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bOP" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 2; + name = "Waste To Filter"; + on = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bOQ" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Canister To Waste"; + on = 0; + target_pressure = 101 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bOR" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/requests_console{ + department = "Atmospherics"; + departmentType = 4; + name = "Atmos RC"; + pixel_x = 30; + pixel_y = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bOS" = ( +/obj/machinery/space_heater, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/camera{ + c_tag = "Atmospherics Airlock"; + dir = 5; + icon_state = "camera"; + network = list("SS13","CE"); + tag = "icon-camera (NORTHEAST)" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bOT" = ( +/obj/machinery/light/small, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bOU" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bOV" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bOW" = ( +/obj/machinery/vending/engivend, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (SOUTHWEST)"; + icon_state = "yellow"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bOX" = ( +/obj/machinery/vending/tool, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bOY" = ( +/obj/structure/closet/secure_closet/engineering_welding, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bOZ" = ( +/obj/structure/closet/secure_closet/engineering_electrical, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bPa" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bPb" = ( +/obj/machinery/light, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bPc" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/sign/enginesafety{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bPd" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Engineering South"; + dir = 1; + icon_state = "camera"; + network = list("SS13","CE") + }, +/obj/item/device/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -29 + }, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bPe" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bPf" = ( +/obj/machinery/light, +/obj/structure/rack, +/obj/item/weapon/pickaxe/mini, +/obj/item/weapon/pickaxe/mini, +/obj/item/weapon/pickaxe/mini, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bPg" = ( +/obj/structure/rack, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/gloves/color/black, +/obj/item/weapon/extinguisher, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bPh" = ( +/obj/structure/rack, +/obj/item/clothing/glasses/meson/engine, +/obj/item/clothing/glasses/meson/engine, +/obj/item/device/geiger_counter, +/obj/item/device/geiger_counter, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bPi" = ( +/obj/structure/rack, +/obj/item/weapon/storage/belt/utility, +/obj/item/weapon/storage/belt/utility, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bPj" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bPk" = ( +/obj/structure/closet/firecloset/full, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (SOUTHEAST)"; + icon_state = "yellow"; + dir = 6; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bPl" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/obj/machinery/camera{ + c_tag = "Gravity Generator Airlock"; + dir = 1; + icon_state = "camera"; + network = list("SS13","CE") + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/gravity_generator) +"bPm" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/light/small, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/gravity_generator) +"bPn" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/gravity_generator) +"bPo" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/door/airlock/engineering{ + cyclelinkeddir = null; + name = "Gravity Generator"; + req_access_txt = "10;11" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/gravity_generator) +"bPp" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/camera{ + c_tag = "Gravity Generator"; + dir = 1; + icon_state = "camera"; + network = list("SS13","CE") + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/gravity_generator) +"bPq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/gravity_generator) +"bPr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/gravity_generator) +"bPs" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/power/apc{ + dir = 4; + name = "Gravity Generator APC"; + pixel_x = 23; + pixel_y = 2 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/gravity_generator) +"bPt" = ( +/obj/structure/grille/broken, +/turf/open/floor/plating/asteroid, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bPu" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bPv" = ( +/obj/machinery/door/airlock/maintenance{ + name = "External Maintenance Access"; + req_access_txt = "12" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bPw" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bPx" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bPy" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4"; + tag = "" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bPz" = ( +/obj/machinery/door/airlock/maintenance{ + name = "External Maintenance Access"; + req_access_txt = "12" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; + tag = "" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bPA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bPB" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bPC" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bPD" = ( +/obj/machinery/door/airlock/maintenance{ + name = "External Maintenance Access"; + req_access_txt = "12" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bPE" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 8 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bPF" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bPG" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bPH" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/beakers{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/weapon/storage/box/syringes, +/obj/item/weapon/reagent_containers/glass/bottle/epinephrine{ + pixel_x = 7; + pixel_y = -3 + }, +/obj/item/weapon/reagent_containers/glass/bottle/morphine{ + pixel_x = 8; + pixel_y = -3 + }, +/obj/item/weapon/reagent_containers/syringe{ + pixel_x = 6; + pixel_y = -3 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bPI" = ( +/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/neck/stethoscope, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/light, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bPJ" = ( +/obj/structure/table, +/obj/item/weapon/hand_labeler, +/obj/item/weapon/gun/syringe, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bPK" = ( +/obj/structure/table, +/obj/item/weapon/reagent_containers/spray/cleaner, +/obj/item/clothing/glasses/hud/health, +/obj/item/clothing/glasses/hud/health, +/obj/item/clothing/glasses/hud/health, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bPL" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/bodybags{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/weapon/storage/box/rxglasses, +/obj/item/stack/packageWrap, +/obj/item/device/destTagger, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bPM" = ( +/obj/structure/closet/l3closet, +/obj/machinery/camera{ + c_tag = "Medbay Storage"; + dir = 10; + icon_state = "camera"; + network = list("SS13","CMO"); + tag = "icon-camera (SOUTHWEST)" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bPN" = ( +/obj/structure/closet/wardrobe/white/medical, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bPO" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bPP" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Genetics Research"; + req_access_txt = "9" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bPQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bPR" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bPS" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bPT" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bPU" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bPV" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 1; + icon_state = "pipe-j2s"; + name = "disposal pipe - Medbay"; + sortType = 9; + tag = "icon-pipe-j2s (NORTH)" + }, +/obj/item/weapon/wrench, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bPW" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bPX" = ( +/obj/structure/weightlifter, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bPY" = ( +/obj/structure/stacklifter, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bPZ" = ( +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bQa" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bQb" = ( +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bQc" = ( +/obj/effect/landmark/lightsout, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bQd" = ( +/obj/machinery/libraryscanner, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bQe" = ( +/obj/structure/chair/office/dark, +/obj/effect/landmark/start/librarian, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bQf" = ( +/obj/machinery/holopad, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bQg" = ( +/obj/structure/table/wood, +/obj/item/device/camera_film, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bQh" = ( +/obj/structure/table/wood, +/obj/machinery/computer/libraryconsole, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bQi" = ( +/obj/structure/table/wood, +/obj/item/toy/cards/deck, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bQj" = ( +/obj/structure/table/wood, +/obj/item/weapon/folder/blue, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bQk" = ( +/obj/structure/table/wood, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/weapon/pen/fourcolor, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bQl" = ( +/obj/machinery/camera{ + c_tag = "Library East"; + dir = 9; + icon_state = "camera"; + tag = "icon-camera (NORTHWEST)" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bQm" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "Lounge APC"; + pixel_x = -23; + pixel_y = 2 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bQn" = ( +/turf/open/floor/engine/n2, +/area/atmos) +"bQo" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 4; + frequency = 1441; + id = "n2_in" + }, +/turf/open/floor/engine/n2, +/area/atmos) +"bQp" = ( +/obj/machinery/meter, +/obj/structure/grille, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bQq" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bQr" = ( +/obj/machinery/atmospherics/components/trinary/filter{ + dir = 2; + filter_type = "n2"; + name = "nitogren filter"; + on = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bQs" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bQt" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Atmos To Chamber"; + on = 0; + target_pressure = 101 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bQu" = ( +/obj/machinery/holopad, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bQv" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bQw" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/atmos{ + name = "Atmospherics"; + req_access_txt = "24" + }, +/turf/open/floor/plasteel/yellow{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bQx" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall, +/area/engine/engineering) +"bQy" = ( +/turf/closed/wall, +/area/engine/engineering) +"bQz" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Engineering Miscellaneous Storage"; + req_access_txt = "10" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bQA" = ( +/obj/machinery/door/airlock/engineering{ + cyclelinkeddir = null; + name = "SMES Room"; + req_access_txt = "10;11" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/yellow{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bQB" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bQC" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bQD" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bQE" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable/yellow{ + icon_state = "1-4"; + d1 = 1; + d2 = 4 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8"; + tag = "" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bQF" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bQG" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bQH" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bQI" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bQJ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bQK" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bQL" = ( +/obj/structure/table, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bQM" = ( +/obj/structure/closet/firecloset/full, +/turf/open/floor/plating/asteroid, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bQN" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/item/device/assembly/mousetrap/armed, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bQO" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Medical Storage"; + req_access_txt = "45" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bQP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/window/brigdoor/northright{ + name = "Chief Medical Officer's Hardsuit"; + req_access_txt = "40" + }, +/obj/machinery/suit_storage_unit/cmo, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bQQ" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "Genetics APC"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"bQR" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 1 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bQS" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bQT" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bQU" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bQV" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/structure/closet/firecloset/full, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bQW" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/closet/firecloset/full, +/turf/open/floor/plating/airless, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bQX" = ( +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j2"; + dir = 1 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bQY" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bQZ" = ( +/obj/structure/window/reinforced{ + dir = 1; + layer = 2.9 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bRa" = ( +/obj/structure/window/reinforced{ + dir = 1; + layer = 2.9 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bRb" = ( +/obj/structure/window/reinforced{ + dir = 1; + layer = 2.9 + }, +/obj/machinery/door/window/eastleft, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bRc" = ( +/obj/structure/table/wood, +/obj/machinery/camera{ + c_tag = "Library West"; + dir = 4; + icon_state = "camera" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bRd" = ( +/obj/structure/table/wood, +/obj/item/device/flashlight/lamp/green, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bRe" = ( +/obj/structure/table/wood, +/obj/item/weapon/pen/fourcolor, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bRf" = ( +/obj/structure/table/wood, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/weapon/pen, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bRg" = ( +/obj/structure/chair/office/dark{ + dir = 1 + }, +/obj/structure/sign/map/left/ceres{ + pixel_x = -32 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bRh" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bRi" = ( +/obj/structure/table/wood, +/obj/item/weapon/storage/pill_bottle/dice, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bRj" = ( +/obj/structure/table/wood, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bRk" = ( +/obj/structure/table/wood, +/obj/item/toy/cards/deck/cas, +/obj/item/toy/cards/deck/cas/black, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bRl" = ( +/obj/machinery/photocopier, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bRm" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/engine/n2, +/area/atmos) +"bRn" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/turf/open/floor/engine/n2, +/area/atmos) +"bRo" = ( +/obj/machinery/air_sensor{ + frequency = 1441; + id_tag = "n2_sensor" + }, +/turf/open/floor/engine/n2, +/area/atmos) +"bRp" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating, +/area/atmos) +"bRq" = ( +/obj/machinery/computer/atmos_control/tank{ + 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, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bRr" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + icon_state = "intact"; + dir = 5 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bRs" = ( +/obj/machinery/atmospherics/pipe/manifold/yellow/visible, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bRt" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bRu" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bRv" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bRw" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bRx" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + icon_state = "intact"; + dir = 10 + }, +/obj/structure/sign/atmosplaque{ + pixel_y = 32 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bRy" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/visible, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bRz" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bRA" = ( +/obj/machinery/suit_storage_unit/atmos, +/turf/open/floor/plasteel/delivery{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bRB" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (NORTHWEST)"; + icon_state = "yellow"; + dir = 9; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bRC" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (NORTH)"; + icon_state = "yellow"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bRD" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (NORTH)"; + icon_state = "yellow"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bRE" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (NORTH)"; + icon_state = "yellow"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bRF" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (NORTH)"; + icon_state = "yellow"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bRG" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/table, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (NORTH)"; + icon_state = "yellow"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bRH" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (NORTH)"; + icon_state = "yellow"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bRI" = ( +/obj/machinery/power/smes/engineering, +/obj/structure/cable{ + icon_state = "0-4"; + d2 = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/sign/electricshock{ + pixel_y = 32 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bRJ" = ( +/obj/machinery/power/smes/engineering, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + icon_state = "0-4"; + d2 = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bRK" = ( +/obj/machinery/power/smes/engineering, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + icon_state = "0-4"; + d2 = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bRL" = ( +/obj/machinery/power/smes/engineering, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + icon_state = "0-4"; + d2 = 4 + }, +/obj/structure/sign/electricshock{ + pixel_y = 32 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bRM" = ( +/obj/machinery/computer/station_alert, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bRN" = ( +/obj/machinery/modular_computer/console/preset/engineering, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bRO" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/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/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bRP" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bRQ" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bRR" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/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/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bRS" = ( +/obj/structure/table, +/obj/structure/table, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bRT" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bRU" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "Medbay Storage APC"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"bRV" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 1 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bRW" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating/asteroid, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bRX" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bRY" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bRZ" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bSa" = ( +/obj/structure/weightlifter, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bSb" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bSc" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bSd" = ( +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bSe" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bSf" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bSg" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bSh" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -24 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bSi" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bSj" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bSk" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/glass{ + name = "Library" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bSl" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bSm" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bSn" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = 32; + random_basetype = /obj/structure/sign/poster/official + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bSo" = ( +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = 0; + pixel_y = -32; + random_basetype = /obj/structure/sign/poster/official + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bSp" = ( +/obj/structure/chair/office/dark{ + dir = 1 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bSq" = ( +/obj/structure/chair/office/dark{ + dir = 1 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bSr" = ( +/obj/machinery/light, +/obj/machinery/bookbinder, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bSs" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bSt" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bSu" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bSv" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + external_pressure_bound = 0; + frequency = 1441; + id_tag = "n2_out"; + initialize_directions = 1; + internal_pressure_bound = 4000; + name = "n2 vent"; + on = 1; + pressure_checks = 2; + pump_direction = 0 + }, +/turf/open/floor/engine/n2, +/area/atmos) +"bSw" = ( +/obj/machinery/meter, +/obj/structure/grille, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bSx" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bSy" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bSz" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "N2 to Airmix"; + on = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bSA" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bSB" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 10; + initialize_directions = 10 + }, +/obj/effect/landmark/start/atmospheric_technician, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bSC" = ( +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (EAST)"; + icon_state = "yellow"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bSD" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall, +/area/atmos) +"bSE" = ( +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bSF" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bSG" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bSH" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bSI" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/suit_storage_unit/atmos, +/turf/open/floor/plasteel/delivery{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bSJ" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bSK" = ( +/obj/machinery/light/small, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bSL" = ( +/obj/structure/reagent_dispensers/watertank/high, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bSM" = ( +/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/computer/solar_control, +/obj/item/weapon/electronics/tracker, +/obj/item/weapon/paper/solar, +/obj/machinery/light/small, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bSN" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"bSO" = ( +/obj/structure/table, +/obj/item/weapon/book/manual/engineering_particle_accelerator, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bSP" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bSQ" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bSR" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bSS" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bST" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bSU" = ( +/obj/machinery/power/terminal{ + icon_state = "term"; + dir = 1 + }, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bSV" = ( +/obj/machinery/power/terminal{ + icon_state = "term"; + dir = 1 + }, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bSW" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/chair/office/dark{ + dir = 1 + }, +/obj/effect/landmark/start/station_engineer, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bSX" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "Engineering SMES Storage APC"; + pixel_x = 23; + pixel_y = 2 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bSY" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 2 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bSZ" = ( +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bTa" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bTb" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bTc" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light/small, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bTd" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bTe" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bTf" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bTg" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bTh" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/sortjunction{ + dir = 8; + icon_state = "pipe-j2s"; + name = "disposal pipe - Atmospherics"; + sortType = 6 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bTi" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/sortjunction{ + dir = 8; + icon_state = "pipe-j2s"; + name = "disposal pipe - Engineering"; + sortType = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bTj" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bTk" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/item/device/assembly/mousetrap/armed, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bTl" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bTm" = ( +/obj/machinery/disposal/deliveryChute, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bTn" = ( +/obj/machinery/newscaster{ + pixel_x = -28; + pixel_y = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bTo" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bTp" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bTq" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bTr" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/glass{ + name = "Library" + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bTs" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bTt" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bTu" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bTv" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bTw" = ( +/obj/machinery/door/morgue{ + name = "Explicit Section" + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bTx" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bTy" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bTz" = ( +/obj/structure/closet/crate, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating/asteroid, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bTA" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 5 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/camera{ + c_tag = "Atmospheric Tanks 2"; + dir = 5; + icon_state = "camera"; + network = list("SS13","CE"); + tag = "icon-camera (NORTHEAST)" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bTB" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "N2 to Pure" + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bTC" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + icon_state = "intact"; + dir = 10 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bTD" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bTE" = ( +/obj/structure/closet/secure_closet/atmospherics, +/obj/item/weapon/pickaxe/mini, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (EAST)"; + icon_state = "yellow"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bTF" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bTG" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + tag = "icon-connector_map (EAST)"; + icon_state = "connector_map"; + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister, +/turf/open/floor/plasteel/delivery{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bTH" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + icon_state = "intact"; + dir = 10 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bTI" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Canister To Waste"; + on = 0; + target_pressure = 101 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bTJ" = ( +/obj/structure/fireaxecabinet{ + pixel_x = 32 + }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bTK" = ( +/turf/closed/wall, +/area/atmos) +"bTL" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/closed/wall, +/area/atmos) +"bTM" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bTN" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bTO" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bTP" = ( +/obj/structure/table, +/obj/item/weapon/book/manual/wiki/engineering_construction, +/obj/item/weapon/book/manual/wiki/engineering_guide, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bTQ" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bTR" = ( +/obj/effect/landmark/start/station_engineer, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bTS" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bTT" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bTU" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bTV" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bTW" = ( +/obj/machinery/airalarm{ + dir = 1; + icon_state = "alarm0"; + pixel_y = -22 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Engineering Power Storage"; + dir = 1; + icon_state = "camera"; + network = list("SS13","CE") + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bTX" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/yellow/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bTY" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/window{ + dir = 8; + icon_state = "right"; + name = "Engineering Delievery Chute"; + opacity = 1; + req_access_txt = "10"; + tag = "icon-right (WEST)" + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bTZ" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/disposaloutlet{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bUa" = ( +/obj/structure/closet, +/turf/open/floor/plating/asteroid, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bUb" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/fans/tiny, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bUc" = ( +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = -28; + pixel_y = 0 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bUd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bUe" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bUf" = ( +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 8 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bUg" = ( +/obj/machinery/light/small, +/turf/open/floor/plating/asteroid, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bUh" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bUi" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bUj" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/cups, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/fitness) +"bUk" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 2; + on = 1 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/fitness) +"bUl" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/fitness) +"bUm" = ( +/obj/structure/window/reinforced, +/obj/machinery/door/window/westright, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bUn" = ( +/obj/structure/window/reinforced, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bUo" = ( +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bUp" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/brute, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bUq" = ( +/obj/structure/noticeboard{ + dir = 8; + icon_state = "nboard00"; + pixel_x = 32; + pixel_y = 0; + tag = "icon-nboard00 (WEST)" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bUr" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 1 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bUs" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bUt" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/item/weapon/twohanded/required/kirbyplants{ + tag = "icon-plant-21"; + icon_state = "plant-21" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bUu" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bUv" = ( +/obj/item/weapon/twohanded/required/kirbyplants{ + tag = "icon-plant-21"; + icon_state = "plant-21" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bUw" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1 + }, +/obj/item/weapon/twohanded/required/kirbyplants{ + tag = "icon-plant-21"; + icon_state = "plant-21" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bUx" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bUy" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bUz" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bUA" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bUB" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/closet/crate, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bUC" = ( +/turf/open/floor/engine/o2{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bUD" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 4; + frequency = 1441; + id = "o2_in" + }, +/turf/open/floor/engine/o2{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bUE" = ( +/obj/machinery/atmospherics/components/trinary/filter{ + dir = 2; + filter_type = "o2"; + name = "oxygen filter"; + on = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bUF" = ( +/obj/machinery/atmospherics/pipe/manifold4w/yellow/visible, +/obj/machinery/meter, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bUG" = ( +/obj/machinery/atmospherics/pipe/manifold/yellow/visible{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bUH" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + tag = "icon-connector_map (EAST)"; + icon_state = "connector_map"; + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bUI" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + tag = "icon-intact (WEST)"; + icon_state = "intact"; + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bUJ" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + tag = "icon-intact (WEST)"; + icon_state = "intact"; + dir = 8 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (EAST)"; + icon_state = "yellow"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bUK" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 10; + initialize_directions = 10 + }, +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bUL" = ( +/obj/machinery/portable_atmospherics/canister, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bUM" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + tag = "icon-intact (SOUTHEAST)"; + icon_state = "intact"; + dir = 6 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bUN" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Waste to Filter"; + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bUO" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ + tag = "icon-manifold (NORTH)"; + name = "scrubbers pipe"; + icon_state = "manifold"; + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bUP" = ( +/obj/machinery/meter{ + frequency = 1441; + id_tag = "waste_meter"; + name = "Waste Loop" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ + tag = "icon-manifold (EAST)"; + name = "scrubbers pipe"; + icon_state = "manifold"; + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bUQ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bUR" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (SOUTHWEST)"; + icon_state = "yellow"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bUS" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bUT" = ( +/obj/machinery/button/door{ + id = "engiestoragesmes"; + name = "Engineering SMES Blast Door Control"; + pixel_y = -24; + req_access_txt = "10;11" + }, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bUU" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bUV" = ( +/obj/structure/table, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/item/weapon/storage/toolbox/electrical{ + pixel_x = -4; + pixel_x = 1; + pixel_y = 5 + }, +/obj/item/clothing/gloves/color/yellow, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bUW" = ( +/obj/machinery/portable_atmospherics/pump, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bUX" = ( +/obj/structure/tank_dispenser, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bUY" = ( +/obj/machinery/portable_atmospherics/scrubber, +/obj/item/device/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -29 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (SOUTHEAST)"; + icon_state = "yellow"; + dir = 6; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bUZ" = ( +/obj/machinery/suit_storage_unit/engine, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (SOUTHWEST)"; + icon_state = "yellow"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bVa" = ( +/obj/machinery/suit_storage_unit/engine, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bVb" = ( +/obj/machinery/suit_storage_unit/engine, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (SOUTHEAST)"; + icon_state = "yellow"; + dir = 6; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bVc" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bVd" = ( +/obj/machinery/camera{ + c_tag = "Medbay Asteroid Hallway 1"; + dir = 8; + icon_state = "camera"; + network = list("SS13","QM"); + tag = "icon-camera (WEST)" + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bVe" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bVf" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bVg" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bVh" = ( +/obj/structure/chair, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bVi" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bVj" = ( +/obj/structure/closet/crate, +/obj/effect/decal/cleanable/cobweb, +/obj/item/weapon/coin/silver, +/obj/item/weapon/coin/silver, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bVk" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bVl" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bVm" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/fitness) +"bVn" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/fitness) +"bVo" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/fitness) +"bVp" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bVq" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9; + pixel_y = 0 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bVr" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bVs" = ( +/obj/structure/bookcase/random/fiction, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bVt" = ( +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bVu" = ( +/obj/structure/bookcase/random/nonfiction, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bVv" = ( +/obj/structure/bookcase/random/reference, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bVw" = ( +/obj/structure/bookcase/random/religion, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bVx" = ( +/obj/structure/bookcase/random/adult, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bVy" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bVz" = ( +/obj/structure/sign/poster/random{ + name = "random contraband poster"; + pixel_x = 32; + random_basetype = /obj/structure/sign/poster/contraband + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bVA" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plating/asteroid, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bVB" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/engine/o2{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bVC" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/engine/o2{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bVD" = ( +/obj/machinery/air_sensor{ + frequency = 1441; + id_tag = "o2_sensor" + }, +/turf/open/floor/engine/o2{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bVE" = ( +/obj/machinery/computer/atmos_control/tank{ + 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, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bVF" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + dir = 9 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bVG" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + icon_state = "intact"; + dir = 5 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bVH" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + dir = 4 + }, +/obj/effect/landmark/start/atmospheric_technician, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bVI" = ( +/obj/machinery/atmospherics/pipe/manifold/yellow/visible{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bVJ" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + dir = 4 + }, +/obj/machinery/meter, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bVK" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Mix To Canisters"; + on = 0 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (EAST)"; + icon_state = "yellow"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bVL" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/machinery/door/airlock/atmos{ + name = "Atmospherics Distro"; + req_access_txt = "24" + }, +/turf/open/floor/plasteel/yellow{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bVM" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 2; + name = "Mix to Filter"; + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bVN" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ + dir = 1; + min_temperature = 80; + on = 1; + target_temperature = 80 + }, +/turf/open/floor/plasteel/delivery{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bVO" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Distro to Waste"; + on = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bVP" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bVQ" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Central Asteroid Maintenance"; + req_access_txt = "10" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bVR" = ( +/obj/machinery/door/poddoor{ + id = "engiestoragesmes"; + name = "Engineering SMES Storage" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bVS" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bVT" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/space) +"bVU" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bVV" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/space) +"bVW" = ( +/obj/structure/table, +/obj/item/weapon/paper_bin, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bVX" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bVY" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/grille/broken, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bVZ" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/item/device/assembly/mousetrap/armed, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bWa" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/fitness) +"bWb" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/fitness) +"bWc" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/fitness) +"bWd" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Fitness South"; + dir = 1; + icon_state = "camera"; + network = list("SS13") + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/fitness) +"bWe" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/fitness) +"bWf" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bWg" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bWh" = ( +/obj/structure/punching_bag, +/obj/machinery/light, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bWi" = ( +/obj/structure/punching_bag, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bWj" = ( +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bWk" = ( +/obj/structure/closet/boxinggloves, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bWl" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/sign/map/left/ceres{ + pixel_x = -32 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bWm" = ( +/obj/machinery/light/small, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bWn" = ( +/obj/effect/landmark/blobstart, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bWo" = ( +/obj/machinery/camera{ + c_tag = "Library Explicits"; + dir = 9; + icon_state = "camera"; + tag = "icon-camera (NORTHWEST)" + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"bWp" = ( +/obj/structure/grille, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bWq" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + external_pressure_bound = 0; + frequency = 1441; + id_tag = "o2_out"; + initialize_directions = 1; + internal_pressure_bound = 4000; + name = "oxygen vent"; + on = 1; + pressure_checks = 2; + pump_direction = 0 + }, +/turf/open/floor/engine/o2{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bWr" = ( +/obj/machinery/meter, +/obj/structure/grille, +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + color = "purple"; + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bWs" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "O2 to Airmix"; + on = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bWt" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bWu" = ( +/obj/machinery/atmospherics/components/trinary/mixer{ + dir = 2; + name = "air mixer"; + node1_concentration = 0.8; + node2_concentration = 0.2; + on = 1; + pixel_x = 0; + pixel_y = 0; + target_pressure = 4500 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bWv" = ( +/obj/machinery/camera{ + c_tag = "Atmospherics South"; + dir = 4; + icon_state = "camera"; + network = list("SS13","CE") + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bWw" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Mix To Canisters"; + on = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bWx" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + icon_state = "intact"; + dir = 10 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (EAST)"; + icon_state = "yellow"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bWy" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bWz" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + tag = "icon-intact (NORTHEAST)"; + icon_state = "intact"; + dir = 5 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bWA" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/heater{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel/delivery{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bWB" = ( +/obj/machinery/atmospherics/pipe/manifold4w/supply/visible, +/obj/machinery/meter{ + frequency = 1441; + id_tag = "distro_meter"; + name = "Distribution Loop" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bWC" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bWD" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 1 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bWE" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bWF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bWG" = ( +/obj/machinery/button/door{ + id = "engiestoragesmes"; + name = "Engineering SMES Blast Door Control"; + pixel_y = 24; + req_access_txt = "10;11" + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bWH" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/metal{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/sheet/glass{ + amount = 50 + }, +/obj/item/weapon/electronics/airlock, +/obj/item/weapon/electronics/airlock, +/obj/item/weapon/stock_parts/cell/high/plus, +/obj/item/stack/sheet/mineral/plasma{ + amount = 30 + }, +/turf/open/floor/plating, +/area/engine/engine_smes) +"bWI" = ( +/obj/machinery/field/generator, +/turf/open/floor/plating, +/area/engine/engine_smes) +"bWJ" = ( +/obj/machinery/power/emitter, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating, +/area/engine/engine_smes) +"bWK" = ( +/obj/structure/table, +/obj/item/weapon/storage/toolbox/mechanical, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bWL" = ( +/obj/item/stack/sheet/mineral/wood, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bWM" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bWN" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/structure/closet/emcloset, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bWO" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"bWP" = ( +/obj/machinery/door/airlock{ + name = "Bathroom" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"bWQ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"bWR" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/window/fulltile, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bWS" = ( +/obj/machinery/door/airlock/glass{ + name = "Holodeck Arena" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bWT" = ( +/obj/machinery/door/airlock{ + name = "Private Study" + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bWU" = ( +/obj/machinery/light/small, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating/asteroid, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bWV" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 5 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bWW" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "O2 to Pure" + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bWX" = ( +/obj/machinery/atmospherics/pipe/manifold/yellow/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bWY" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bWZ" = ( +/obj/machinery/atmospherics/pipe/manifold/yellow/visible{ + dir = 8 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (EAST)"; + icon_state = "yellow"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bXa" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bXb" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Pure to Mix"; + on = 0 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bXc" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + tag = "icon-intact (SOUTHWEST)"; + icon_state = "intact"; + dir = 10 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bXd" = ( +/obj/machinery/atmospherics/pipe/manifold/yellow/visible{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bXe" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Mix to Distro"; + on = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bXf" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/visible{ + tag = "icon-manifold (EAST)"; + icon_state = "manifold"; + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Atmospherics Distro"; + dir = 9; + icon_state = "camera"; + network = list("SS13","CE"); + tag = "icon-camera (NORTHWEST)" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bXg" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bXh" = ( +/obj/machinery/portable_atmospherics/canister/toxins, +/turf/open/floor/plating, +/area/engine/engine_smes) +"bXi" = ( +/obj/machinery/power/emitter, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating, +/area/engine/engine_smes) +"bXj" = ( +/obj/structure/sign/map/left/ceres{ + pixel_x = -32 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bXk" = ( +/obj/structure/closet/crate, +/obj/item/weapon/pickaxe/emergency, +/turf/open/floor/plating/asteroid, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bXl" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 2 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bXm" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bXn" = ( +/obj/structure/barricade/wooden, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bXo" = ( +/obj/structure/girder, +/obj/structure/grille, +/obj/structure/barricade/wooden, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bXp" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 8 + }, +/obj/item/clothing/head/cone, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bXq" = ( +/obj/machinery/airalarm{ + dir = 4; + icon_state = "alarm0"; + pixel_x = -22 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"bXr" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"bXs" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"bXt" = ( +/obj/structure/sink{ + dir = 4; + icon_state = "sink"; + pixel_x = 11; + pixel_y = 0 + }, +/obj/structure/mirror{ + pixel_x = 32; + pixel_y = 0 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"bXu" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bXv" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bXw" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bXx" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bXy" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Holodeck North" + }, +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = 0; + pixel_y = 32; + random_basetype = /obj/structure/sign/poster/official + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bXz" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bXA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = 0; + pixel_y = 32; + random_basetype = /obj/structure/sign/poster/official + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bXB" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/structure/table, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bXC" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Broom Closet"; + req_access_txt = "0" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bXD" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/sink{ + dir = 4; + icon_state = "sink"; + pixel_x = 11; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bXE" = ( +/obj/machinery/newscaster{ + pixel_x = -28; + pixel_y = 4 + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bXF" = ( +/obj/structure/table/wood, +/obj/item/device/flashlight/lamp, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bXG" = ( +/turf/open/floor/engine/air{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bXH" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 4; + frequency = 1441; + id = "air_in" + }, +/turf/open/floor/engine/air{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bXI" = ( +/obj/machinery/meter{ + name = "Mixed Air Tank In" + }, +/obj/structure/grille, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bXJ" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + tag = "icon-intact (WEST)"; + icon_state = "intact"; + dir = 8 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bXK" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + tag = "icon-intact (WEST)"; + icon_state = "intact"; + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/yellow{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bXL" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + tag = "icon-intact (WEST)"; + icon_state = "intact"; + dir = 8 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (SOUTHWEST)"; + icon_state = "yellow"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bXM" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + tag = "icon-intact (NORTHWEST)"; + icon_state = "intact"; + dir = 9 + }, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bXN" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + dir = 6 + }, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bXO" = ( +/obj/machinery/atmospherics/pipe/manifold/yellow/visible{ + dir = 1 + }, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bXP" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bXQ" = ( +/obj/machinery/atmospherics/pipe/manifold/yellow/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (SOUTHEAST)"; + icon_state = "yellow"; + dir = 6; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bXR" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 6 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bXS" = ( +/obj/machinery/atmospherics/pipe/manifold/green/visible{ + tag = "icon-manifold (EAST)"; + icon_state = "manifold"; + dir = 4 + }, +/obj/machinery/meter, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bXT" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Air to Distro"; + on = 1; + target_pressure = 101 + }, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bXU" = ( +/obj/machinery/power/port_gen/pacman, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bXV" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/mineral/plasma{ + amount = 5 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bXW" = ( +/obj/machinery/shieldgen, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"bXX" = ( +/obj/machinery/shieldgen, +/turf/open/floor/plating, +/area/engine/engine_smes) +"bXY" = ( +/obj/machinery/the_singularitygen{ + anchored = 0 + }, +/obj/machinery/light/small, +/turf/open/floor/plating, +/area/engine/engine_smes) +"bXZ" = ( +/obj/machinery/power/emitter, +/turf/open/floor/plating, +/area/engine/engine_smes) +"bYa" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating/asteroid, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bYb" = ( +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"bYc" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bYd" = ( +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"bYe" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -24 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bYf" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bYg" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bYh" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bYi" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/table, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bYj" = ( +/obj/structure/janitorialcart, +/obj/item/weapon/mop, +/obj/item/weapon/reagent_containers/glass/bucket, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bYk" = ( +/obj/structure/chair/comfy/brown{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bYl" = ( +/obj/structure/table/wood, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/weapon/pen, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"bYm" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"bYn" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"bYo" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"bYp" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/engine/air{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bYq" = ( +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/engine/air{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bYr" = ( +/obj/machinery/air_sensor{ + frequency = 1441; + id_tag = "air_sensor" + }, +/turf/open/floor/engine/air{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bYs" = ( +/obj/machinery/computer/atmos_control/tank{ + frequency = 1441; + input_tag = "air_in"; + name = "Mixed Air Supply Control"; + output_tag = "air_out"; + sensors = list("air_sensor" = "Tank") + }, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + tag = "icon-intact (NORTHEAST)"; + icon_state = "intact"; + dir = 5 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/atmos) +"bYt" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + tag = "icon-intact (WEST)"; + icon_state = "intact"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/yellow/visible, +/obj/structure/window/reinforced, +/turf/open/floor/plasteel/yellow{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bYu" = ( +/obj/machinery/atmospherics/components/trinary/filter{ + dir = 4; + filter_type = "co2"; + name = "co2 filter"; + on = 1 + }, +/obj/structure/window/reinforced{ + dir = 1; + layer = 2.9 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bYv" = ( +/obj/machinery/computer/atmos_control/tank{ + frequency = 1441; + input_tag = "co2_in"; + name = "Carbon Dioxide Supply Control"; + output_tag = "co2_out"; + sensors = list("co2_sensor" = "Tank") + }, +/obj/machinery/atmospherics/pipe/simple/yellow/visible, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bYw" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "CO2 to Pure"; + on = 0 + }, +/obj/structure/window/reinforced{ + dir = 1; + layer = 2.9 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bYx" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1; + layer = 2.9 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bYy" = ( +/obj/machinery/atmospherics/components/trinary/filter{ + dir = 4; + filter_type = "plasma"; + name = "plasma filter"; + on = 1 + }, +/obj/structure/window/reinforced{ + dir = 1; + layer = 2.9 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bYz" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/machinery/computer/atmos_control/tank{ + frequency = 1441; + input_tag = "tox_in"; + name = "Plasma Supply Control"; + output_tag = "tox_out"; + sensors = list("tox_sensor" = "Tank") + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bYA" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Plasma to Pure"; + on = 0 + }, +/obj/structure/window/reinforced{ + dir = 1; + layer = 2.9 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bYB" = ( +/obj/machinery/atmospherics/components/trinary/filter{ + dir = 2; + filter_type = "n2"; + name = "nitogren filter"; + on = 1 + }, +/obj/structure/window/reinforced{ + dir = 1; + layer = 2.9 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bYC" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/machinery/computer/atmos_control/tank{ + frequency = 1441; + input_tag = "n2o_in"; + name = "Nitrous Oxide Supply Control"; + output_tag = "n2o_out"; + sensors = list("n2o_sensor" = "Tank") + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bYD" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "N2O to Pure"; + on = 0 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bYE" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bYF" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 2; + name = "Unfiltered & Air to Mix"; + on = 1 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bYG" = ( +/obj/machinery/atmospherics/pipe/manifold/green/visible, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bYH" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Air to Mix" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bYI" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ + dir = 1; + initialize_directions = 11 + }, +/obj/machinery/meter, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bYJ" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + tag = "icon-intact (NORTHWEST)"; + icon_state = "intact"; + dir = 9 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bYK" = ( +/obj/machinery/light/small, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bYL" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"bYM" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/girder, +/obj/structure/grille, +/turf/open/space, +/area/space) +"bYN" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/space, +/area/space) +"bYO" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 1 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"bYP" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"bYQ" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "Fitness Bathroom APC"; + pixel_x = 23; + pixel_y = 2 + }, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"bYR" = ( +/obj/machinery/camera{ + c_tag = "Fitness Bathrooms"; + dir = 4; + icon_state = "camera"; + network = list("SS13","CE") + }, +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/obj/structure/urinal{ + pixel_x = -32 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"bYS" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"bYT" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bYU" = ( +/obj/structure/table, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bYV" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/table, +/obj/item/weapon/storage/firstaid/brute, +/obj/structure/disposalpipe/segment, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = 28; + pixel_y = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bYW" = ( +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"bYX" = ( +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"bYY" = ( +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"bYZ" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 24 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"bZa" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"bZb" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/high_volume{ + dir = 4; + external_pressure_bound = 0; + frequency = 1441; + icon_state = "in"; + id_tag = "air_out"; + internal_pressure_bound = 2000; + on = 1; + pressure_checks = 2; + pump_direction = 0 + }, +/turf/open/floor/engine/air{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bZc" = ( +/obj/machinery/meter{ + name = "Mixed Air Tank Out" + }, +/obj/structure/grille, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bZd" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ + dir = 1; + initialize_directions = 11 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bZe" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Air to Pure" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bZf" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + tag = "icon-intact (WEST)"; + icon_state = "intact"; + dir = 8 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bZg" = ( +/obj/machinery/atmospherics/pipe/manifold/yellow/visible, +/obj/machinery/meter, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bZh" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + tag = "icon-intact (WEST)"; + icon_state = "intact"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/green/visible, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bZi" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + tag = "icon-intact (NORTHWEST)"; + icon_state = "intact"; + dir = 9 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bZj" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bZk" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bZl" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bZm" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 24 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bZn" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/obj/structure/grille, +/turf/open/space, +/area/space) +"bZo" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/girder, +/obj/structure/grille, +/turf/open/space, +/area/space) +"bZp" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/urinal{ + pixel_x = -32 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"bZq" = ( +/obj/machinery/door/airlock{ + id_tag = "fb1" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"bZr" = ( +/obj/machinery/light/small, +/obj/structure/toilet{ + icon_state = "toilet00"; + dir = 8 + }, +/obj/machinery/button/door{ + id = "fb1"; + name = "Privacy Bolts"; + normaldoorcontrol = 1; + pixel_x = 24 + }, +/obj/effect/landmark/blobstart, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"bZs" = ( +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "Holodeck Projector Floor" + }, +/area/holodeck/rec_center) +"bZt" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/table, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/item/weapon/storage/firstaid/o2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"bZu" = ( +/obj/machinery/camera{ + c_tag = "Chapel West"; + dir = 5; + icon_state = "camera"; + tag = "icon-camera (NORTHEAST)" + }, +/turf/open/floor/plasteel/chapel{ + tag = "icon-chapel (NORTH)"; + icon_state = "chapel"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"bZv" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/chapel{ + tag = "icon-chapel (EAST)"; + icon_state = "chapel"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"bZw" = ( +/turf/open/floor/plasteel/chapel{ + tag = "icon-chapel (NORTH)"; + icon_state = "chapel"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"bZx" = ( +/turf/open/floor/plasteel/chapel{ + tag = "icon-chapel (EAST)"; + icon_state = "chapel"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"bZy" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"bZz" = ( +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"bZA" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"bZB" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 2; + on = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"bZC" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/chapel{ + tag = "icon-chapel (NORTH)"; + icon_state = "chapel"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"bZD" = ( +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"bZE" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"bZF" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + tag = "icon-intact (NORTHEAST)"; + icon_state = "intact"; + dir = 5 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/pipedispenser/disposal, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bZG" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bZH" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bZI" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bZJ" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Atmoshperic Tanks 1"; + dir = 1; + icon_state = "camera"; + network = list("SS13","CE") + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bZK" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/obj/machinery/light, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bZL" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/obj/machinery/pipedispenser, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bZM" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/visible, +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bZN" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (SOUTHWEST)"; + icon_state = "yellow"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bZO" = ( +/obj/machinery/computer/atmos_control/tank{ + frequency = 1441; + input_tag = "mix_in"; + name = "Gas Mix Tank Control"; + output_tag = "mix_in"; + sensors = list("mix_sensor" = "Tank") + }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bZP" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bZQ" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/visible, +/obj/item/device/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -29 + }, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bZR" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/heater{ + dir = 8 + }, +/turf/open/floor/plasteel/delivery{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bZS" = ( +/turf/closed/wall, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"bZT" = ( +/turf/closed/wall, +/area/maintenance/disposal{ + name = "Eastern External Waste Belt" + }) +"bZU" = ( +/obj/structure/disposaloutlet{ + icon_state = "outlet"; + dir = 1 + }, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/plating/airless, +/area/maintenance/disposal{ + name = "Eastern External Waste Belt" + }) +"bZV" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/camera{ + c_tag = "Service Asteroid Hallway 5"; + dir = 4; + icon_state = "camera" + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"bZW" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/window/fulltile, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"bZX" = ( +/turf/open/floor/plasteel/chapel{ + tag = "icon-chapel (WEST)"; + icon_state = "chapel"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"bZY" = ( +/turf/open/floor/plasteel/chapel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"bZZ" = ( +/obj/machinery/holopad, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"caa" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"cab" = ( +/obj/structure/table/wood, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"cac" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cad" = ( +/obj/machinery/light/small, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cae" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"caf" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 8 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cag" = ( +/obj/machinery/meter, +/obj/structure/grille, +/obj/machinery/atmospherics/pipe/simple/green/visible, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"cah" = ( +/obj/machinery/meter, +/obj/structure/grille, +/obj/machinery/atmospherics/pipe/simple/yellow/visible, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"cai" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"caj" = ( +/obj/structure/grille, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cak" = ( +/obj/structure/table, +/obj/item/weapon/storage/toolbox/electrical, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cal" = ( +/obj/structure/table, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cam" = ( +/turf/closed/wall/rust, +/area/maintenance/disposal{ + name = "Eastern External Waste Belt" + }) +"can" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall/rust, +/area/maintenance/disposal{ + name = "Eastern External Waste Belt" + }) +"cao" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"cap" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"caq" = ( +/obj/machinery/door/airlock{ + id_tag = "fb2" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"car" = ( +/obj/machinery/light/small, +/obj/structure/toilet{ + icon_state = "toilet00"; + dir = 8 + }, +/obj/machinery/button/door{ + id = "fb2"; + name = "Privacy Bolts"; + normaldoorcontrol = 1; + pixel_x = 24 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"cas" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"cat" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cau" = ( +/obj/machinery/door/airlock/glass{ + name = "Chapel" + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"cav" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1 + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"caw" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"cax" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"cay" = ( +/obj/machinery/camera{ + c_tag = "Chapel East"; + dir = 9; + icon_state = "camera"; + tag = "icon-camera (NORTHWEST)" + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"caz" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "Chapel APC"; + pixel_x = -23; + pixel_y = 2 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"caA" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 1; + frequency = 1441; + id = "co2_in"; + pixel_y = 1 + }, +/turf/open/floor/engine/co2{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"caB" = ( +/obj/machinery/air_sensor{ + frequency = 1441; + id_tag = "co2_sensor" + }, +/turf/open/floor/engine/co2{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"caC" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + external_pressure_bound = 0; + frequency = 1441; + id_tag = "co2_out"; + initialize_directions = 1; + internal_pressure_bound = 4000; + name = "co2 vent"; + on = 1; + pressure_checks = 2; + pump_direction = 0 + }, +/turf/open/floor/engine/co2{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"caD" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 1; + frequency = 1441; + id = "tox_in"; + pixel_y = 1 + }, +/turf/open/floor/engine/plasma{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"caE" = ( +/obj/machinery/air_sensor{ + frequency = 1441; + id_tag = "tox_sensor" + }, +/turf/open/floor/engine/plasma{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"caF" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + external_pressure_bound = 0; + frequency = 1441; + id_tag = "tox_out"; + initialize_directions = 1; + internal_pressure_bound = 4000; + name = "plasma vent"; + on = 1; + pressure_checks = 2; + pump_direction = 0 + }, +/obj/effect/landmark/xeno_spawn, +/turf/open/floor/engine/plasma{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"caG" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 1; + frequency = 1441; + id = "n2o_in"; + pixel_y = 1 + }, +/turf/open/floor/engine/n2o{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"caH" = ( +/obj/machinery/air_sensor{ + frequency = 1441; + id_tag = "n2o_sensor" + }, +/turf/open/floor/engine/n2o{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"caI" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + external_pressure_bound = 0; + frequency = 1441; + id_tag = "n2o_out"; + initialize_directions = 1; + internal_pressure_bound = 4000; + name = "n2o vent"; + on = 1; + pressure_checks = 2; + pump_direction = 0 + }, +/turf/open/floor/engine/n2o{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"caJ" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 1; + frequency = 1441; + id = "mix_in"; + pixel_y = 1 + }, +/turf/open/floor/engine/vacuum{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"caK" = ( +/obj/machinery/air_sensor{ + frequency = 1441; + id_tag = "mix_sensor" + }, +/turf/open/floor/engine/vacuum{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"caL" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + external_pressure_bound = 0; + frequency = 1441; + id_tag = "mix_in"; + initialize_directions = 1; + internal_pressure_bound = 4000; + name = "distro vent"; + on = 1; + pressure_checks = 2; + pump_direction = 0 + }, +/turf/open/floor/engine/vacuum{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"caM" = ( +/obj/structure/girder, +/obj/structure/grille, +/turf/open/floor/plating/asteroid, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"caN" = ( +/obj/structure/girder, +/obj/structure/grille, +/obj/structure/barricade/wooden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"caO" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"caP" = ( +/obj/structure/chair/stool, +/obj/structure/sign/poster/contraband/hacking_guide{ + pixel_x = 32 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"caQ" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/space, +/area/space) +"caR" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "Eastern External Waste Belt" + }) +"caS" = ( +/obj/machinery/light/small, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "Eastern External Waste Belt" + }) +"caT" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "Eastern External Waste Belt" + }) +"caU" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/disposal{ + name = "Eastern External Waste Belt" + }) +"caV" = ( +/obj/effect/turf_decal/stripes/end, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "Eastern External Waste Belt APC"; + pixel_x = 0; + pixel_y = 24 + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "Eastern External Waste Belt" + }) +"caW" = ( +/obj/machinery/conveyor/auto{ + tag = "icon-conveyor0 (NORTHEAST)"; + icon_state = "conveyor0"; + dir = 5 + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "Eastern External Waste Belt" + }) +"caX" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/deliveryChute{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "Eastern External Waste Belt" + }) +"caY" = ( +/obj/machinery/door/airlock{ + name = "Shower Room" + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"caZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"cba" = ( +/obj/machinery/door/airlock/glass{ + name = "Holodeck Arena" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"cbb" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"cbc" = ( +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cbd" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cbe" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/glass{ + name = "Chapel" + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"cbf" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"cbg" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"cbh" = ( +/obj/machinery/holopad, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"cbi" = ( +/turf/open/floor/engine/co2{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"cbj" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/turf/open/floor/engine/co2{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"cbk" = ( +/turf/open/floor/engine/plasma{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"cbl" = ( +/obj/machinery/portable_atmospherics/canister/toxins, +/turf/open/floor/engine/plasma{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"cbm" = ( +/turf/open/floor/engine/n2o{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"cbn" = ( +/obj/machinery/portable_atmospherics/canister/nitrous_oxide{ + valve_open = 1 + }, +/turf/open/floor/engine/n2o{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"cbo" = ( +/turf/open/floor/engine/vacuum{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"cbp" = ( +/obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating/asteroid, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cbq" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/rack, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cbr" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cbs" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 24 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cbt" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/disposal{ + name = "Eastern External Waste Belt" + }) +"cbu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/disposal{ + name = "Eastern External Waste Belt" + }) +"cbv" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/conveyor/auto{ + dir = 10; + icon_state = "conveyor0"; + tag = "icon-conveyor0 (SOUTHWEST)"; + verted = -1 + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "Eastern External Waste Belt" + }) +"cbw" = ( +/obj/structure/rack, +/obj/item/weapon/pickaxe/emergency, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cbx" = ( +/obj/machinery/shower{ + dir = 4 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"cby" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"cbz" = ( +/obj/machinery/shower{ + dir = 8 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"cbA" = ( +/obj/machinery/computer/holodeck, +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"cbB" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"cbC" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"cbD" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/glass{ + name = "Holodeck Arena" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"cbE" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cbF" = ( +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cbG" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/window/fulltile, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"cbH" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/chapel{ + tag = "icon-chapel (NORTH)"; + icon_state = "chapel"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"cbI" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/chapel{ + tag = "icon-chapel (EAST)"; + icon_state = "chapel"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"cbJ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"cbK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/chapel{ + tag = "icon-chapel (NORTH)"; + icon_state = "chapel"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"cbL" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"cbM" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"cbN" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"cbO" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar{ + name = "Gambler's Den" + }) +"cbP" = ( +/obj/machinery/light/small, +/turf/open/floor/engine/co2{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"cbQ" = ( +/obj/machinery/light/small, +/turf/open/floor/engine/plasma{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"cbR" = ( +/obj/machinery/light/small, +/turf/open/floor/engine/n2o{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"cbS" = ( +/obj/machinery/light/small, +/turf/open/floor/engine/vacuum{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"cbT" = ( +/obj/structure/closet/crate, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cbU" = ( +/obj/structure/grille/broken, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cbV" = ( +/obj/structure/closet/toolcloset, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cbW" = ( +/obj/structure/disposalpipe/trunk, +/obj/structure/disposaloutlet{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "Eastern External Waste Belt" + }) +"cbX" = ( +/obj/machinery/conveyor/auto{ + tag = "icon-conveyor0 (EAST)"; + icon_state = "conveyor0"; + dir = 4 + }, +/obj/machinery/light/small, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "Eastern External Waste Belt" + }) +"cbY" = ( +/obj/machinery/conveyor/auto{ + dir = 10; + icon_state = "conveyor0"; + tag = "icon-conveyor0 (SOUTHWEST)"; + verted = -1 + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "Eastern External Waste Belt" + }) +"cbZ" = ( +/obj/structure/rack, +/obj/item/weapon/pickaxe/emergency, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cca" = ( +/obj/item/weapon/bikehorn/rubberducky, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"ccb" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + on = 1 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"ccc" = ( +/obj/structure/table, +/obj/item/weapon/paper{ + desc = ""; + info = "Brusies sustained in the holodeck can be healed simply by sleeping."; + name = "Holodeck Disclaimer" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"ccd" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/machinery/holopad, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"cce" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"ccf" = ( +/obj/machinery/door/airlock/glass{ + name = "Holodeck Arena" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"ccg" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cch" = ( +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cci" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"ccj" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/plasteel/chapel{ + tag = "icon-chapel (WEST)"; + icon_state = "chapel"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"cck" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/chapel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"ccl" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"ccm" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/chapel{ + tag = "icon-chapel (WEST)"; + icon_state = "chapel"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"ccn" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cco" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar{ + name = "Gambler's Den" + }) +"ccp" = ( +/obj/structure/toilet{ + icon_state = "toilet00"; + dir = 8 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar{ + name = "Gambler's Den" + }) +"ccq" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall, +/area/maintenance/disposal{ + name = "Eastern External Waste Belt" + }) +"ccr" = ( +/obj/item/stack/sheet/metal, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"ccs" = ( +/obj/effect/landmark/xeno_spawn, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"cct" = ( +/obj/item/weapon/soap/nanotrasen, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"ccu" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"ccv" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"ccw" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"ccx" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"ccy" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"ccz" = ( +/obj/machinery/door/morgue{ + name = "Confession Room" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"ccA" = ( +/obj/machinery/door/morgue{ + name = "Confession Room"; + req_access_txt = "22" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"ccB" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"ccC" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"ccD" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 8; + icon_state = "pipe-j2s"; + name = "disposal pipe - Chapel"; + sortType = 17 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"ccE" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/airlock{ + name = "Chaplain's Office"; + req_access_txt = "22" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"ccF" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"ccG" = ( +/obj/structure/mineral_door/wood, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar{ + name = "Gambler's Den" + }) +"ccH" = ( +/obj/structure/sign/barsign, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar{ + name = "Gambler's Den" + }) +"ccI" = ( +/obj/machinery/disposal/deliveryChute, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/maintenance/disposal{ + name = "Eastern External Waste Belt" + }) +"ccJ" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"ccK" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1; + on = 1 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"ccL" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"ccM" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"ccN" = ( +/turf/closed/mineral, +/area/chapel/main) +"ccO" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/machinery/light/small, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"ccP" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/tinted/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"ccQ" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/light/small, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"ccR" = ( +/obj/machinery/door/morgue{ + name = "Confession Room"; + req_access_txt = "22" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"ccS" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/item/weapon/twohanded/required/kirbyplants{ + tag = "icon-applebush"; + icon_state = "applebush" + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"ccT" = ( +/obj/machinery/light_switch{ + pixel_y = 24 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"ccU" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"ccV" = ( +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"ccW" = ( +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"ccX" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"ccY" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/closet/coffin, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"ccZ" = ( +/obj/machinery/door/window/northleft{ + name = "Casket Storage"; + req_access_txt = "22" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"cda" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"cdb" = ( +/obj/machinery/computer/arcade, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless; + icon_state = "wood-broken" + }, +/area/crew_quarters/bar{ + name = "Gambler's Den" + }) +"cdc" = ( +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless; + icon_state = "wood-broken" + }, +/area/crew_quarters/bar{ + name = "Gambler's Den" + }) +"cdd" = ( +/obj/item/chair/stool, +/obj/structure/sign/poster/random{ + name = "random contraband poster"; + pixel_x = 0; + pixel_y = 32; + random_basetype = /obj/structure/sign/poster/contraband + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar{ + name = "Gambler's Den" + }) +"cde" = ( +/obj/structure/table/wood/poker, +/obj/item/toy/cards/deck, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless; + icon_state = "wood-broken" + }, +/area/crew_quarters/bar{ + name = "Gambler's Den" + }) +"cdf" = ( +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar{ + name = "Gambler's Den" + }) +"cdg" = ( +/obj/machinery/vending/boozeomat{ + req_access_txt = "0" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar{ + name = "Gambler's Den" + }) +"cdh" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar{ + name = "Gambler's Den" + }) +"cdi" = ( +/obj/structure/sign/mining{ + pixel_y = -32 + }, +/obj/structure/closet/crate{ + icon_state = "crateopen"; + opened = 1 + }, +/turf/open/floor/plating/asteroid, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cdj" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/machinery/camera{ + c_tag = "Docking-Medbay Bridge"; + dir = 8; + network = list("SS13") + }, +/turf/open/floor/engine, +/area/space) +"cdk" = ( +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j2"; + dir = 2 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cdl" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cdm" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cdn" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cdo" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cdp" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/girder, +/obj/structure/grille, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cdq" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cdr" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"cds" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/camera{ + c_tag = "Chapel Office"; + dir = 5; + icon_state = "camera"; + tag = "icon-camera (NORTHEAST)" + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"cdt" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"cdu" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/chair/wood/wings, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"cdv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"cdw" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"cdx" = ( +/obj/structure/closet/coffin, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"cdy" = ( +/obj/structure/chair/stool, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar{ + name = "Gambler's Den" + }) +"cdz" = ( +/obj/structure/table/wood/poker, +/obj/item/weapon/gun/ballistic/revolver/russian, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless; + icon_state = "wood-broken" + }, +/area/crew_quarters/bar{ + name = "Gambler's Den" + }) +"cdA" = ( +/obj/structure/light_construct{ + dir = 4 + }, +/obj/item/weapon/reagent_containers/food/drinks/shaker, +/obj/structure/table/wood, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar{ + name = "Gambler's Den" + }) +"cdB" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/obj/structure/barricade/wooden, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cdC" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cdD" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 2; + icon_state = "pipe-j2s"; + name = "disposal pipe - Bar"; + sortType = 19 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cdE" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/structure/sign/poster/random{ + name = "random contraband poster"; + pixel_x = 0; + pixel_y = 32; + random_basetype = /obj/structure/sign/poster/contraband + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cdF" = ( +/obj/structure/grille, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cdG" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cdH" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"cdI" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4"; + tag = "" + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cdJ" = ( +/obj/machinery/door/airlock/maintenance{ + name = "External Maintenance Access"; + req_access_txt = "12" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; + tag = "" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cdK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cdL" = ( +/obj/structure/tank_dispenser/oxygen, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cdM" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"cdN" = ( +/obj/structure/table/wood, +/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"cdO" = ( +/obj/structure/table/wood, +/obj/item/device/flashlight/lamp, +/obj/item/stack/packageWrap, +/obj/item/device/destTagger, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"cdP" = ( +/obj/structure/table/wood, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"cdQ" = ( +/obj/structure/table/wood, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/weapon/pen, +/obj/item/weapon/storage/crayons, +/obj/item/weapon/storage/fancy/candle_box{ + pixel_x = 1 + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"cdR" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/obj/structure/sign/poster/random{ + name = "random contraband poster"; + pixel_x = -32; + pixel_y = 0; + random_basetype = /obj/structure/sign/poster/contraband + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar{ + name = "Gambler's Den" + }) +"cdS" = ( +/obj/structure/table/wood/poker, +/obj/item/toy/cards/deck, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar{ + name = "Gambler's Den" + }) +"cdT" = ( +/obj/structure/window/reinforced/fulltile, +/obj/structure/grille, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cdU" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 2; + icon_state = "pipe-j2s"; + name = "disposal pipe - Kitchen"; + sortType = 20 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cdV" = ( +/obj/structure/disposalpipe/junction, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cdW" = ( +/obj/structure/grille/broken, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cdX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cdY" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cdZ" = ( +/turf/closed/mineral, +/area/crew_quarters/theatre{ + name = "Top Secret Clown HQ" + }) +"cea" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/theatre{ + name = "Top Secret Clown HQ" + }) +"ceb" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cec" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"ced" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1; + on = 1 + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"cee" = ( +/obj/structure/table/wood, +/obj/item/weapon/nullrod, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"cef" = ( +/obj/machinery/holopad, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"ceg" = ( +/obj/structure/chair/wood/wings{ + icon_state = "wooden_chair_wings"; + dir = 1 + }, +/obj/effect/landmark/start/chaplain, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"ceh" = ( +/obj/machinery/newscaster{ + pixel_x = 32 + }, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"cei" = ( +/obj/structure/closet/coffin, +/obj/machinery/camera{ + c_tag = "Chapel Coffins"; + dir = 9; + icon_state = "camera"; + tag = "icon-camera (NORTHWEST)" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"cej" = ( +/obj/item/chair/stool, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar{ + name = "Gambler's Den" + }) +"cek" = ( +/obj/structure/sign/poster/random{ + name = "random contraband poster"; + pixel_x = 0; + pixel_y = -32; + random_basetype = /obj/structure/sign/poster/contraband + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless; + icon_state = "wood-broken" + }, +/area/crew_quarters/bar{ + name = "Gambler's Den" + }) +"cel" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 2; + icon_state = "pipe-j2s"; + name = "disposal pipe - Hydroponics"; + sortType = 21 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cem" = ( +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cen" = ( +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 4 + }, +/obj/structure/grille, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"ceo" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cep" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Port Asteroid Maintenance"; + req_access_txt = "12" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"ceq" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 8 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cer" = ( +/obj/machinery/light/small, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"ces" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/item/clothing/head/cone, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cet" = ( +/obj/structure/glowshroom/single, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating/asteroid, +/area/crew_quarters/theatre{ + name = "Top Secret Clown HQ" + }) +"ceu" = ( +/turf/open/floor/plating/asteroid, +/area/crew_quarters/theatre{ + name = "Top Secret Clown HQ" + }) +"cev" = ( +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/theatre{ + name = "Top Secret Clown HQ" + }) +"cew" = ( +/obj/structure/falsewall{ + desc = "A huge chunk of metal used to separate rooms. Nothing odd here, sir."; + name = "inconspicuous wall" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"cex" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"cey" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"cez" = ( +/obj/structure/closet/wardrobe/chaplain_black, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"ceA" = ( +/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/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"ceB" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/barricade/wooden, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"ceC" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/girder, +/obj/structure/grille, +/obj/structure/barricade/wooden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar{ + name = "Gambler's Den" + }) +"ceD" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/grille, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar{ + name = "Gambler's Den" + }) +"ceE" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar{ + name = "Gambler's Den" + }) +"ceF" = ( +/obj/structure/table, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"ceG" = ( +/obj/item/chair, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"ceH" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 2; + icon_state = "pipe-j2s"; + name = "disposal pipe - Library"; + sortType = 16 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"ceI" = ( +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 4 + }, +/obj/structure/grille/broken, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"ceJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/structure/grille, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"ceK" = ( +/obj/structure/barricade/wooden, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"ceL" = ( +/obj/structure/glowshroom/single, +/turf/open/floor/plating/asteroid, +/area/crew_quarters/theatre{ + name = "Top Secret Clown HQ" + }) +"ceM" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/newscaster{ + pixel_x = -28; + pixel_y = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"ceN" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Holodeck South"; + dir = 1; + icon_state = "camera"; + network = list("SS13") + }, +/obj/structure/closet/lasertag/blue, +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = 0; + pixel_y = -32; + random_basetype = /obj/structure/sign/poster/official + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"ceO" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/obj/machinery/light, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/closet/lasertag/blue, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"ceP" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/closet/lasertag/red, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -28 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"ceQ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/closet/lasertag/red, +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = 0; + pixel_y = -32; + random_basetype = /obj/structure/sign/poster/official + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"ceR" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/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/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"ceS" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"ceT" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/machinery/camera{ + c_tag = "Service Asteroid Hallway 6"; + dir = 4; + icon_state = "camera" + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"ceU" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"ceV" = ( +/obj/structure/rack, +/obj/item/clothing/suit/space/fragile, +/obj/item/clothing/head/helmet/space/fragile, +/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/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"ceW" = ( +/obj/machinery/door/window/northleft{ + name = "Chapel Mail"; + req_access_txt = "22" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"ceX" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"ceY" = ( +/obj/machinery/door/airlock{ + name = "Crematorium"; + req_access_txt = "22" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"ceZ" = ( +/obj/structure/cable/orange, +/obj/machinery/power/apc{ + dir = 2; + name = "Gambler Den APC"; + pixel_y = -24 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless; + icon_state = "wood-broken" + }, +/area/crew_quarters/bar{ + name = "Gambler's Den" + }) +"cfa" = ( +/obj/machinery/computer/slot_machine, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar{ + name = "Gambler's Den" + }) +"cfb" = ( +/obj/machinery/computer/slot_machine, +/obj/structure/sign/poster/random{ + name = "random contraband poster"; + pixel_x = 0; + pixel_y = -32; + random_basetype = /obj/structure/sign/poster/contraband + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar{ + name = "Gambler's Den" + }) +"cfc" = ( +/obj/structure/table, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cfd" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 2; + icon_state = "pipe-j2s"; + name = "disposal pipe - Chapel"; + sortType = 17 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cfe" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/structure/grille/broken, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cff" = ( +/obj/machinery/light/small, +/obj/structure/closet/toolcloset, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cfg" = ( +/obj/structure/closet, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cfh" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 2 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"cfi" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cfj" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 2 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cfk" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/disposaloutlet{ + icon_state = "outlet"; + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"cfl" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"cfm" = ( +/obj/structure/bodycontainer/crematorium{ + id = "creamed" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"cfn" = ( +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"cfo" = ( +/obj/machinery/camera{ + c_tag = "Crematorium"; + dir = 9; + icon_state = "camera"; + tag = "icon-camera (NORTHWEST)" + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"cfp" = ( +/obj/structure/plasticflaps, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + dir = 8; + freq = 1400; + location = "Chapel" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"cfq" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/item/device/assembly/mousetrap/armed, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cfr" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/closet/firecloset/full, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cfs" = ( +/obj/structure/grille/broken, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cft" = ( +/obj/item/stack/sheet/mineral/wood, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cfu" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/clown, +/obj/effect/landmark/start/clown, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/theatre{ + name = "Top Secret Clown HQ" + }) +"cfv" = ( +/obj/structure/table/wood, +/obj/item/device/flashlight/lamp/bananalamp, +/obj/item/device/instrument/violin, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/sign/poster/contraband/clown{ + pixel_y = 32 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/theatre{ + name = "Top Secret Clown HQ" + }) +"cfw" = ( +/obj/structure/mineral_door/wood{ + name = "Secret Clown HQ" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/theatre{ + name = "Top Secret Clown HQ" + }) +"cfx" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/fans/tiny, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"cfy" = ( +/obj/structure/sign/map/left/ceres{ + pixel_x = -32 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cfz" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cfA" = ( +/obj/machinery/button/crematorium{ + id = "creamed"; + pixel_x = -24 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"cfB" = ( +/obj/machinery/light/small, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"cfC" = ( +/obj/structure/table/wood, +/obj/item/weapon/storage/book/bible, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"cfD" = ( +/obj/structure/closet/crate{ + name = "top secret clown supplies" + }, +/obj/item/weapon/reagent_containers/food/snacks/pie/cream, +/obj/item/weapon/reagent_containers/food/snacks/pie/cream, +/obj/item/weapon/reagent_containers/food/snacks/pie/cream, +/obj/item/weapon/reagent_containers/food/snacks/pie/cream, +/obj/item/weapon/reagent_containers/food/snacks/pie/cream, +/obj/item/weapon/storage/box/mousetraps, +/obj/item/weapon/storage/crayons, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/theatre{ + name = "Top Secret Clown HQ" + }) +"cfE" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/theatre{ + name = "Top Secret Clown HQ" + }) +"cfF" = ( +/mob/living/carbon/monkey{ + name = "Mr.Teeny" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/theatre{ + name = "Top Secret Clown HQ" + }) +"cfG" = ( +/obj/effect/landmark/blobstart, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/theatre{ + name = "Top Secret Clown HQ" + }) +"cfH" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"cfI" = ( +/turf/open/floor/plating/asteroid/airless, +/area/mine/unexplored{ + name = "Docking Asteroid" + }) +"cfJ" = ( +/turf/closed/mineral, +/area/mine/unexplored{ + name = "Docking Asteroid" + }) +"cfK" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "Docking Asteroid" + }) +"cfL" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/disposaloutlet, +/turf/open/floor/plating/airless, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cfM" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plating/airless/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "Civilian Asteroid" + }) +"cfN" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/plating/airless/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "Civilian Asteroid" + }) +"cfO" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/hallway/primary/port) +"cfP" = ( +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/hallway/primary/port) +"cfQ" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/hallway/primary/port) +"cfR" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plating/airless/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "Civilian Asteroid" + }) +"cfS" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plating/airless/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "Civilian Asteroid" + }) +"cfT" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/space, +/area/space) +"cfU" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/structure/grille, +/turf/open/space, +/area/space) +"cfV" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4"; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/structure/girder, +/obj/structure/grille, +/turf/open/space, +/area/space) +"cfW" = ( +/obj/structure/table, +/obj/item/toy/figure/clown, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/theatre{ + name = "Top Secret Clown HQ" + }) +"cfX" = ( +/obj/item/weapon/grown/bananapeel{ + name = "state-of-the-art clown home defense peel" + }, +/obj/structure/table, +/obj/item/weapon/grown/bananapeel{ + name = "state-of-the-art clown home defense peel" + }, +/obj/item/weapon/coin/clown, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/theatre{ + name = "Top Secret Clown HQ" + }) +"cfY" = ( +/obj/structure/closet/crate/bin, +/obj/item/clothing/mask/gas/mime, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/theatre{ + name = "Top Secret Clown HQ" + }) +"cfZ" = ( +/obj/machinery/vending/autodrobe{ + desc = "A vending machine for costumes. The machine seems blessed by some higher power, allowing it to function without power. HONK!"; + use_power = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/theatre{ + name = "Top Secret Clown HQ" + }) +"cga" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating/airless/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "Civilian Asteroid" + }) +"cgb" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/airless/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "Civilian Asteroid" + }) +"cgc" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 2; + name = "Arrivals Atmospherics Checkpoint"; + req_access_txt = "24" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cgd" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/space, +/area/space) +"cge" = ( +/obj/item/stack/sheet/mineral/wood, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cgf" = ( +/obj/item/weapon/pickaxe/mini, +/turf/open/floor/plating/asteroid/airless, +/area/space) +"cgg" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/obj/structure/fans/tiny, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cgh" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 2 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cgi" = ( +/turf/closed/mineral/random/labormineral, +/area/mine/unexplored{ + name = "Docking Asteroid" + }) +"cgj" = ( +/turf/closed/mineral/random/low_chance, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cgk" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cgl" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/fans/tiny, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cgm" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cgn" = ( +/obj/item/weapon/ore/iron, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cgo" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/closet/crate{ + icon_state = "crateopen"; + opened = 1 + }, +/obj/item/weapon/ore/iron, +/obj/item/weapon/ore/iron, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cgp" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/hallway/primary/port) +"cgq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cgr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cgs" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 2; + name = "Mix Input"; + on = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cgt" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cgu" = ( +/turf/closed/mineral/random/labormineral, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cgv" = ( +/turf/closed/mineral/random/low_chance, +/area/mine/unexplored{ + name = "Civilian Asteroid" + }) +"cgw" = ( +/obj/item/weapon/ore/iron, +/obj/item/weapon/ore/iron, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cgx" = ( +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "the bone zone" + }) +"cgy" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/camera{ + c_tag = "Docking Atmospherics Checkpoint"; + dir = 5; + icon_state = "camera"; + tag = "icon-camera (NORTHEAST)" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cgz" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9; + pixel_y = 0 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cgA" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cgB" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cgC" = ( +/obj/structure/ore_box, +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cgD" = ( +/obj/item/weapon/ore/iron, +/obj/item/weapon/ore/iron, +/obj/item/weapon/ore/iron, +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cgE" = ( +/obj/item/weapon/storage/bag/ore, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cgF" = ( +/obj/structure/ore_box, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cgG" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cgH" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cgI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cgJ" = ( +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = 28; + pixel_y = 0 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cgK" = ( +/obj/item/weapon/storage/bag/ore, +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cgL" = ( +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cgM" = ( +/obj/item/device/flashlight/lantern, +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cgN" = ( +/turf/closed/mineral, +/area/mine/unexplored{ + name = "Research Asteroid" + }) +"cgO" = ( +/turf/closed/mineral/random/low_chance, +/area/mine/unexplored{ + name = "Research Asteroid" + }) +"cgP" = ( +/obj/item/device/flashlight/lantern, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cgQ" = ( +/obj/item/weapon/pickaxe/mini, +/turf/open/floor/plating/asteroid, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cgR" = ( +/turf/closed/mineral/random/labormineral, +/area/mine/unexplored{ + name = "Research Asteroid" + }) +"cgS" = ( +/turf/open/floor/plating/asteroid/airless, +/area/mine/unexplored{ + name = "Research Asteroid" + }) +"cgT" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating/airless/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "Research Asteroid" + }) +"cgU" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/hallway/primary/aft) +"cgV" = ( +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/hallway/primary/aft) +"cgW" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/machinery/camera{ + c_tag = "Service-Research Bridge"; + dir = 9; + icon_state = "camera"; + tag = "icon-camera (NORTHWEST)" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/hallway/primary/aft) +"cgX" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/airless/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "Research Asteroid" + }) +"cgY" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cgZ" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cha" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"chb" = ( +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"chc" = ( +/turf/closed/mineral, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"chd" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/hallway/primary/aft) +"che" = ( +/obj/machinery/power/solar{ + id = "portsolar"; + name = "Port Solar Array" + }, +/turf/open/floor/plasteel/airless/solarpanel, +/area/space) +"chf" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"chg" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 2; + name = "Mix Output"; + on = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"chh" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"chi" = ( +/turf/open/floor/plasteel/airless/solarpanel, +/area/space) +"chj" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"chk" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/atmos{ + name = "Docking Atmospherics Checkpoint"; + req_access_txt = "24" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"chl" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"chm" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/escape) +"chn" = ( +/obj/structure/grille, +/obj/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/escape) +"cho" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/hallway/primary/aft) +"chp" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Aft Asteroid Solar Maintenance" + }) +"chq" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Aft Asteroid Solar Maintenance" + }) +"chr" = ( +/turf/closed/wall/r_wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Aft Asteroid Solar Maintenance" + }) +"chs" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/obj/machinery/camera{ + c_tag = "Docking Asteroid Hall 16"; + dir = 4; + icon_state = "camera" + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cht" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; + tag = "" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"chu" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"chv" = ( +/obj/machinery/door/airlock/maintenance{ + name = "External Maintenance Access"; + req_access_txt = "12" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"chw" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"chx" = ( +/turf/open/floor/mineral/titanium, +/turf/closed/wall/mineral/titanium/interior, +/area/shuttle/escape) +"chy" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/fire, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"chz" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"chA" = ( +/obj/machinery/computer/emergency_shuttle, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"chB" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/item/weapon/crowbar, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"chC" = ( +/obj/structure/lattice, +/obj/item/weapon/wirecutters, +/turf/open/space, +/area/space) +"chD" = ( +/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/electronics/tracker, +/obj/item/weapon/paper/solar, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Aft Asteroid Solar Maintenance" + }) +"chE" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1; + d2 = 2 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Aft Asteroid Solar Maintenance" + }) +"chF" = ( +/obj/machinery/power/smes, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'HIGH VOLTAGE'"; + icon_state = "shock"; + name = "HIGH VOLTAGE"; + pixel_x = 32; + pixel_y = 0 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Aft Asteroid Solar Maintenance" + }) +"chG" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"chH" = ( +/obj/machinery/computer/atmos_alert, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"chI" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"chJ" = ( +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"chK" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"chL" = ( +/obj/machinery/computer/security, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"chM" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mining_construction) +"chN" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1; + d2 = 2 + }, +/obj/structure/window/reinforced/fulltile, +/obj/structure/grille, +/turf/open/floor/plating, +/area/storage/tech) +"chO" = ( +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1; + d2 = 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/structure/window/reinforced/fulltile, +/obj/structure/grille, +/turf/open/floor/plating, +/area/storage/tech) +"chP" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1; + d2 = 2 + }, +/obj/structure/window/reinforced/fulltile, +/obj/structure/grille, +/turf/open/floor/plating, +/area/storage/tech) +"chQ" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 4; + name = "Solar Maintenance"; + req_access = null; + req_access_txt = "10; 13" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Aft Asteroid Solar Maintenance" + }) +"chR" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Aft Asteroid Solar Maintenance" + }) +"chS" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 8; + name = "Solar Maintenance"; + req_access = null; + req_access_txt = "10; 13" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Aft Asteroid Solar Maintenance" + }) +"chT" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Aft Asteroid Solar Maintenance" + }) +"chU" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Aft Asteroid Solar Maintenance" + }) +"chV" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Aft Asteroid Solar Maintenance" + }) +"chW" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"chX" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"chY" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"chZ" = ( +/obj/machinery/computer/crew, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"cia" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 0; + pixel_y = -30 + }, +/obj/machinery/light, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"cib" = ( +/obj/item/device/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -29 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"cic" = ( +/obj/machinery/button/flasher{ + id = "cockpit_flasher"; + pixel_x = 6; + pixel_y = -24 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"cid" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/machinery/light, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"cie" = ( +/obj/machinery/computer/communications, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"cif" = ( +/obj/structure/closet/secure_closet/miner{ + locked = 0 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/shuttle/auxillary_base) +"cig" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/shuttle/auxillary_base) +"cih" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/camera{ + c_tag = "Aux Base Construction 2"; + dir = 6; + icon_state = "camera" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/shuttle/auxillary_base) +"cii" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/shuttle/auxillary_base) +"cij" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/window/reinforced/fulltile, +/obj/structure/grille, +/turf/open/floor/plating, +/area/storage/tech) +"cik" = ( +/obj/structure/rack{ + dir = 8; + layer = 2.9 + }, +/obj/item/weapon/circuitboard/computer/crew{ + pixel_x = -1; + pixel_y = 1 + }, +/obj/item/weapon/circuitboard/computer/card{ + pixel_x = 2; + pixel_y = -2 + }, +/obj/item/weapon/circuitboard/computer/communications{ + pixel_x = 5; + pixel_y = -5 + }, +/obj/machinery/camera{ + c_tag = "Secure Tech Storage"; + dir = 2 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plasteel, +/area/storage/tech) +"cil" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/window/reinforced/fulltile, +/obj/structure/grille, +/turf/open/floor/plating, +/area/storage/tech) +"cim" = ( +/obj/structure/lattice, +/obj/structure/sign/mining{ + pixel_y = -32 + }, +/turf/open/space, +/area/space) +"cin" = ( +/obj/structure/lattice/catwalk, +/obj/item/weapon/wrench, +/turf/open/space, +/area/space) +"cio" = ( +/obj/structure/lattice, +/obj/item/weapon/storage/toolbox/electrical, +/turf/open/space, +/area/space) +"cip" = ( +/obj/machinery/power/solar_control{ + id = "portsolar"; + name = "Aft Asteroid Solar Control"; + track = 0 + }, +/obj/structure/cable, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Aft Asteroid Solar Maintenance" + }) +"ciq" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Aft Asteroid Solar Maintenance" + }) +"cir" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "Aft Asteroid Solar APC"; + pixel_x = 23; + pixel_y = 2 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Aft Asteroid Solar Maintenance" + }) +"cis" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cit" = ( +/obj/structure/closet/crate{ + icon_state = "crateopen"; + opened = 1 + }, +/obj/item/weapon/coin/silver, +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"ciu" = ( +/obj/structure/chair, +/turf/open/floor/plasteel/red/side{ + tag = "icon-red (NORTHWEST)"; + icon_state = "red"; + dir = 9; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"civ" = ( +/obj/structure/chair, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"ciw" = ( +/obj/structure/chair, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"cix" = ( +/obj/structure/chair, +/obj/machinery/camera{ + c_tag = "Docking Security Holding Area"; + dir = 6; + icon_state = "camera" + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"ciy" = ( +/obj/structure/chair, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"ciz" = ( +/obj/structure/chair, +/turf/open/floor/plasteel/red/side{ + tag = "icon-red (NORTHEAST)"; + icon_state = "red"; + dir = 5; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"ciA" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"ciB" = ( +/obj/machinery/door/airlock/glass{ + name = "Emergency Shuttle Cockpit"; + req_access_txt = "19" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"ciC" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plating/airless/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "Research Asteroid" + }) +"ciD" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/plating/airless/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "Research Asteroid" + }) +"ciE" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4"; + tag = "" + }, +/turf/open/floor/plating/airless/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "Research Asteroid" + }) +"ciF" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/turf/open/floor/plating/airless/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "Research Asteroid" + }) +"ciG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/shuttle/auxillary_base) +"ciH" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/shuttle/auxillary_base) +"ciI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/shuttle/auxillary_base) +"ciJ" = ( +/obj/structure/cable{ + icon_state = "0-4"; + d2 = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/window/reinforced/fulltile, +/obj/structure/grille, +/turf/open/floor/plating, +/area/storage/tech) +"ciK" = ( +/obj/structure/rack{ + dir = 8; + layer = 2.9 + }, +/obj/item/weapon/circuitboard/computer/robotics{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/weapon/circuitboard/computer/mecha_control{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light/small, +/turf/open/floor/plasteel, +/area/storage/tech) +"ciL" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plasteel, +/area/storage/tech) +"ciM" = ( +/obj/structure/rack{ + dir = 8; + layer = 2.9 + }, +/obj/item/weapon/circuitboard/computer/borgupload{ + pixel_x = -1; + pixel_y = 1 + }, +/obj/item/weapon/circuitboard/computer/aiupload{ + pixel_x = 2; + pixel_y = -2 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light/small, +/turf/open/floor/plasteel, +/area/storage/tech) +"ciN" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/window/reinforced/fulltile, +/obj/structure/grille, +/turf/open/floor/plating, +/area/storage/tech) +"ciO" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock{ + name = "Abandoned Mining Storage" + }) +"ciP" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/obj/structure/barricade/wooden, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock{ + name = "Abandoned Mining Storage" + }) +"ciQ" = ( +/obj/item/solar_assembly, +/obj/item/stack/sheet/glass, +/turf/open/floor/plasteel/airless/solarpanel, +/area/space) +"ciR" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Aft Asteroid Solars"; + req_access_txt = "10;11;12" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/barricade/wooden, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/portsolar{ + name = "Aft Asteroid Solar Maintenance" + }) +"ciS" = ( +/obj/structure/grille/broken, +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"ciT" = ( +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"ciU" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"ciV" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"ciW" = ( +/obj/effect/landmark/blobstart, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"ciX" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"ciY" = ( +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"ciZ" = ( +/obj/structure/chair, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/mineral/plastitanium/brig, +/area/shuttle/escape) +"cja" = ( +/obj/structure/chair, +/turf/open/floor/mineral/plastitanium/brig, +/area/shuttle/escape) +"cjb" = ( +/obj/machinery/flasher{ + id = "cockpit_flasher"; + pixel_x = 6; + pixel_y = 24 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"cjc" = ( +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"cjd" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"cje" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/fire, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/item/weapon/crowbar, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"cjf" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating/airless/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "Research Asteroid" + }) +"cjg" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cjh" = ( +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cji" = ( +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cjj" = ( +/obj/machinery/door/airlock/glass, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cjk" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/airless/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "Research Asteroid" + }) +"cjl" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"cjm" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "Secure Tech Storage"; + req_access_txt = "19;23" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"cjn" = ( +/obj/structure/ore_box, +/obj/effect/turf_decal/delivery, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock{ + name = "Abandoned Mining Storage" + }) +"cjo" = ( +/obj/structure/ore_box, +/obj/effect/turf_decal/delivery, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock{ + name = "Abandoned Mining Storage" + }) +"cjp" = ( +/obj/structure/rack, +/obj/item/weapon/pickaxe, +/obj/item/weapon/pickaxe, +/obj/item/weapon/pickaxe/mini, +/obj/item/weapon/gun/energy/kinetic_accelerator, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock{ + name = "Abandoned Mining Storage" + }) +"cjq" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock{ + name = "Abandoned Mining Storage" + }) +"cjr" = ( +/obj/item/solar_assembly, +/turf/open/floor/plasteel/airless/solarpanel, +/area/space) +"cjs" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 1 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cjt" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cju" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cjv" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cjw" = ( +/obj/structure/barricade/wooden, +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cjx" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"cjy" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"cjz" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"cjA" = ( +/obj/machinery/flasher{ + id = "shuttle_flasher"; + pixel_x = -24; + pixel_y = 6 + }, +/obj/machinery/button/flasher{ + id = "shuttle_flasher"; + pixel_x = -24; + pixel_y = -6 + }, +/turf/open/floor/mineral/plastitanium/brig, +/area/shuttle/escape) +"cjB" = ( +/turf/open/floor/mineral/plastitanium/brig, +/area/shuttle/escape) +"cjC" = ( +/obj/machinery/door/airlock/glass{ + name = "Emergency Shuttle Brig"; + req_access_txt = "2" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"cjD" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"cjE" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 2 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cjF" = ( +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cjG" = ( +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cjH" = ( +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cjI" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"cjJ" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"cjK" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "Tech Storage APC"; + pixel_y = 24 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"cjL" = ( +/turf/closed/wall/r_wall, +/area/ai_monitored/turret_protected/ai_upload) +"cjM" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/item/clothing/head/cone, +/obj/item/clothing/head/cone, +/obj/item/clothing/head/cone, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock{ + name = "Abandoned Mining Storage" + }) +"cjN" = ( +/obj/structure/cable{ + icon_state = "0-4"; + d2 = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock{ + name = "Abandoned Mining Storage" + }) +"cjO" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "Mining Storage APC"; + pixel_y = 24 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock{ + name = "Abandoned Mining Storage" + }) +"cjP" = ( +/obj/machinery/power/port_gen/pacman, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock{ + name = "Abandoned Mining Storage" + }) +"cjQ" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/obj/structure/barricade/wooden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock{ + name = "Abandoned Mining Storage" + }) +"cjR" = ( +/obj/structure/lattice/catwalk, +/obj/item/stack/sheet/glass, +/turf/open/space, +/area/space) +"cjS" = ( +/obj/structure/rack, +/obj/item/weapon/pickaxe, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cjT" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cjU" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cjV" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cjW" = ( +/obj/structure/rack, +/obj/item/weapon/pickaxe/mini, +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cjX" = ( +/obj/structure/girder, +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cjY" = ( +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"cjZ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/red/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"cka" = ( +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (WEST)"; + icon_state = "redcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"ckb" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"ckc" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"ckd" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel/red/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"cke" = ( +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 6; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"ckf" = ( +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 8; + name = "Security Escape Airlock"; + req_access_txt = "2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"ckg" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"ckh" = ( +/obj/machinery/door/airlock/shuttle{ + name = "Emergency Shuttle Airlock"; + req_access_txt = "2" + }, +/turf/open/floor/mineral/plastitanium/brig, +/area/shuttle/escape) +"cki" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium/brig, +/area/shuttle/escape) +"ckj" = ( +/obj/structure/chair, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"ckk" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"ckl" = ( +/obj/structure/table, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"ckm" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/fans/tiny, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"ckn" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cko" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 1; + name = "Research Atmospherics Checkpoint"; + req_access_txt = "24" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"ckp" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/shuttle/auxillary_base) +"ckq" = ( +/obj/docking_port/mobile/auxillary_base{ + dheight = 4; + dir = 4; + dwidth = 4; + height = 9; + width = 9 + }, +/obj/machinery/computer/auxillary_base{ + pixel_y = 0 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/shuttle/auxillary_base) +"ckr" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/shuttle/auxillary_base) +"cks" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"ckt" = ( +/obj/structure/table, +/obj/item/weapon/storage/bag/ore, +/obj/item/weapon/storage/bag/ore, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock{ + name = "Abandoned Mining Storage" + }) +"cku" = ( +/obj/structure/table, +/obj/item/clothing/glasses/meson, +/obj/item/weapon/paper{ + info = "This station needs cleared out within the next few weeks, as construction is almost complete and NT expects most of the equipment off-site before then. Throw most of the shit in here for now and we'll come back later with a pod to haul the heavier stuff. Shouldn't be too big of an issue."; + name = "Disclaimer Notice" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock{ + name = "Abandoned Mining Storage" + }) +"ckv" = ( +/obj/item/weapon/storage/toolbox/mechanical, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock{ + name = "Abandoned Mining Storage" + }) +"ckw" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock{ + name = "Abandoned Mining Storage" + }) +"ckx" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock{ + name = "Abandoned Mining Storage" + }) +"cky" = ( +/obj/structure/sign/mining{ + pixel_y = 32 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock{ + name = "Abandoned Mining Storage" + }) +"ckz" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"ckA" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "Arrival Hallway APC"; + pixel_x = -25; + pixel_y = 1 + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"ckB" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"ckC" = ( +/obj/machinery/computer/station_alert, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"ckD" = ( +/obj/machinery/camera{ + c_tag = "Arrivals SMES"; + dir = 6; + icon_state = "camera" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"ckE" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"ckF" = ( +/obj/structure/closet/firecloset/full, +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"ckG" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"ckH" = ( +/obj/structure/grille, +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"ckI" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"ckJ" = ( +/obj/machinery/door/airlock/glass_security{ + name = "Holding Area"; + req_access_txt = "2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"ckK" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/escape) +"ckL" = ( +/obj/structure/table, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"ckM" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"ckN" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"ckO" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"ckP" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"ckQ" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"ckR" = ( +/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, +/obj/effect/landmark/xeno_spawn, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"ckS" = ( +/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/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"ckT" = ( +/obj/structure/table, +/obj/item/weapon/stock_parts/subspace/analyzer, +/obj/item/weapon/stock_parts/subspace/analyzer, +/obj/item/weapon/stock_parts/subspace/analyzer, +/obj/structure/sign/securearea{ + pixel_y = 32 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"ckU" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"ckV" = ( +/obj/structure/table, +/obj/machinery/cell_charger{ + pixel_y = 5 + }, +/obj/item/device/multitool, +/obj/structure/sign/securearea{ + pixel_y = 32 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"ckW" = ( +/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, +/obj/machinery/camera{ + c_tag = "Tech Storage North" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"ckX" = ( +/obj/structure/table, +/obj/item/weapon/screwdriver{ + pixel_y = 16 + }, +/obj/item/weapon/wirecutters, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"ckY" = ( +/obj/structure/table, +/obj/item/weapon/aiModule/reset, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai_upload) +"ckZ" = ( +/obj/machinery/ai_status_display{ + pixel_y = 32 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai_upload) +"cla" = ( +/obj/machinery/computer/upload/borg, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai_upload) +"clb" = ( +/obj/machinery/porta_turret/ai{ + dir = 4 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai_upload) +"clc" = ( +/obj/machinery/computer/upload/ai, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai_upload) +"cld" = ( +/obj/structure/table, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai_upload) +"cle" = ( +/obj/structure/closet/crate{ + icon_state = "crateopen"; + opened = 1 + }, +/obj/item/weapon/ore/silver, +/obj/item/weapon/ore/silver, +/obj/item/weapon/ore/iron, +/obj/item/weapon/ore/iron, +/obj/item/weapon/ore/iron, +/obj/item/weapon/ore/gold, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock{ + name = "Abandoned Mining Storage" + }) +"clf" = ( +/obj/machinery/light/small, +/obj/structure/table, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/miningdock{ + name = "Abandoned Mining Storage" + }) +"clg" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"clh" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cli" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"clj" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"clk" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cll" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"clm" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cln" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"clo" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/grille, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"clp" = ( +/obj/machinery/power/apc{ + dir = 2; + name = "Auxillary Construction APC"; + pixel_y = -24 + }, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/vacantoffice) +"clq" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"clr" = ( +/obj/structure/closet, +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cls" = ( +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -23; + pixel_y = 0 + }, +/turf/open/floor/plasteel/escape{ + tag = "icon-escape (NORTHWEST)"; + icon_state = "escape"; + dir = 9; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"clt" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/escape{ + tag = "icon-escape (NORTH)"; + icon_state = "escape"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"clu" = ( +/turf/open/floor/plasteel/escape/corner{ + tag = "icon-escapecorner (NORTH)"; + icon_state = "escapecorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"clv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"clw" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"clx" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"cly" = ( +/obj/machinery/door/airlock/shuttle{ + name = "Emergency Shuttle Airlock" + }, +/obj/docking_port/mobile/emergency{ + name = "Box emergency shuttle"; + timid = 0 + }, +/obj/docking_port/stationary{ + dir = 4; + dwidth = 12; + height = 18; + id = "emergency_home"; + name = "BoxStation emergency evac bay"; + turf_type = /turf/open/space; + width = 32 + }, +/turf/open/floor/plating, +/area/shuttle/escape) +"clz" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -5; + pixel_y = 30 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"clA" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 27; + pixel_y = 0 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"clB" = ( +/obj/structure/tank_dispenser/oxygen, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"clC" = ( +/obj/structure/rack, +/obj/item/clothing/suit/space/fragile, +/obj/item/clothing/head/helmet/space/fragile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"clD" = ( +/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/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"clE" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"clF" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/camera{ + c_tag = "Research Asteroid Hallway 1"; + dir = 5; + icon_state = "camera"; + tag = "icon-camera (NORTHEAST)" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"clG" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"clH" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 1; + req_access_txt = "24" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"clI" = ( +/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{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -24 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"clJ" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"clK" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/effect/landmark/blobstart, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"clL" = ( +/obj/structure/table, +/obj/item/weapon/electronics/apc, +/obj/item/weapon/electronics/airlock, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"clM" = ( +/obj/structure/table, +/obj/item/weapon/aiModule/supplied/quarantine, +/obj/machinery/camera/motion{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai_upload) +"clN" = ( +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai_upload) +"clO" = ( +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai_upload) +"clP" = ( +/obj/structure/table, +/obj/item/weapon/aiModule/supplied/freeform, +/obj/structure/sign/kiddieplaque{ + pixel_x = 32 + }, +/obj/machinery/camera/motion{ + dir = 8 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai_upload) +"clQ" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"clR" = ( +/obj/machinery/power/smes/engineering, +/obj/structure/cable/orange, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"clS" = ( +/obj/machinery/power/terminal{ + tag = "icon-term (WEST)"; + icon_state = "term"; + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-4"; + d2 = 4 + }, +/obj/structure/sign/electricshock{ + pixel_y = -32 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"clT" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; + tag = "" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"clU" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"clV" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"clW" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/vacantoffice) +"clX" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel/escape{ + tag = "icon-escape (WEST)"; + icon_state = "escape"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"clY" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"clZ" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"cma" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"cmb" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"cmc" = ( +/obj/structure/table, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cmd" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cme" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cmf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 2; + name = "Mix Input"; + on = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cmg" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/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/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cmh" = ( +/obj/structure/table, +/obj/item/weapon/wrench, +/obj/item/clothing/glasses/meson, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cmi" = ( +/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/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"cmj" = ( +/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, +/obj/machinery/requests_console{ + department = "Tech storage"; + pixel_x = 0; + pixel_y = -32 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"cmk" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"cml" = ( +/obj/structure/table, +/obj/item/device/aicard, +/obj/item/weapon/aiModule/reset, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"cmm" = ( +/obj/structure/table, +/obj/item/device/flashlight{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/item/device/flashlight{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/item/device/assembly/flash/handheld, +/obj/item/device/assembly/flash/handheld, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"cmn" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -23; + pixel_y = 0 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai_upload) +"cmo" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai_upload) +"cmp" = ( +/obj/structure/table, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai_upload) +"cmq" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai_upload) +"cmr" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai_upload) +"cms" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/grille/broken, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cmt" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/grille, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cmu" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cmv" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cmw" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cmx" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cmy" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Docking Asteroid SMES Access"; + req_access_txt = "10;11;12" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cmz" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = 28; + pixel_y = 0 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cmA" = ( +/obj/structure/closet/crate, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cmB" = ( +/obj/structure/filingcabinet, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/vacantoffice) +"cmC" = ( +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/vacantoffice) +"cmD" = ( +/obj/structure/table/wood, +/obj/item/device/flashlight/lamp, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/vacantoffice) +"cmE" = ( +/obj/structure/closet, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/vacantoffice) +"cmF" = ( +/obj/structure/closet/crate, +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cmG" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel/escape{ + tag = "icon-escape (WEST)"; + icon_state = "escape"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"cmH" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"cmI" = ( +/obj/structure/barricade/wooden, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cmJ" = ( +/obj/item/clothing/head/cone, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cmK" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cmL" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 27; + pixel_y = 0 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cmM" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/camera{ + c_tag = "Research Atmospherics Checkpoint"; + dir = 5; + icon_state = "camera"; + tag = "icon-camera (NORTHEAST)" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cmN" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cmO" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + icon_state = "connector_map"; + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cmP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/shuttle/auxillary_base) +"cmQ" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/shuttle/auxillary_base) +"cmR" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/shuttle/auxillary_base) +"cmS" = ( +/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, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"cmT" = ( +/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, +/obj/machinery/airalarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"cmU" = ( +/obj/machinery/porta_turret/ai{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai_upload) +"cmV" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai_upload) +"cmW" = ( +/obj/machinery/holopad, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai_upload) +"cmX" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai_upload) +"cmY" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Research Quantum Pad" + }) +"cmZ" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Docking Quantum Pad" + }) +"cna" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Docking Quantum Pad" + }) +"cnb" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cnc" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 1 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cnd" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cne" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/obj/machinery/camera{ + c_tag = "Docking Asteroid Hall 15"; + dir = 4; + icon_state = "camera" + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cnf" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cng" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/item/device/assembly/mousetrap/armed, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cnh" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/vacantoffice) +"cni" = ( +/obj/structure/chair/office/dark{ + dir = 4 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/vacantoffice) +"cnj" = ( +/obj/structure/table/wood, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/vacantoffice) +"cnk" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/vacantoffice) +"cnl" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/vacantoffice) +"cnm" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cnn" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "Departures APC"; + pixel_x = 24; + pixel_y = 0 + }, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"cno" = ( +/obj/structure/grille/broken, +/obj/item/clothing/head/cone, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"cnp" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cnq" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cnr" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cns" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cnt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cnu" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cnv" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + icon_state = "connector_map"; + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cnw" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mining_construction) +"cnx" = ( +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 1; + name = "Construction Zone"; + req_access = null; + req_access_txt = "0"; + req_one_access_txt = "0" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mining_construction) +"cny" = ( +/obj/structure/rack{ + dir = 8; + layer = 2.9 + }, +/obj/item/weapon/circuitboard/computer/pandemic{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/weapon/circuitboard/computer/rdconsole, +/obj/item/weapon/circuitboard/machine/rdserver{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/weapon/circuitboard/machine/destructive_analyzer, +/obj/item/weapon/circuitboard/machine/protolathe, +/obj/item/weapon/circuitboard/computer/aifixer, +/obj/item/weapon/circuitboard/computer/teleporter, +/obj/item/weapon/circuitboard/machine/circuit_imprinter, +/obj/item/weapon/circuitboard/machine/mechfab, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"cnz" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"cnA" = ( +/obj/structure/rack{ + dir = 8; + layer = 2.9 + }, +/obj/item/weapon/circuitboard/computer/cloning{ + pixel_x = 0 + }, +/obj/item/weapon/circuitboard/computer/med_data{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/weapon/circuitboard/machine/clonescanner, +/obj/item/weapon/circuitboard/machine/clonepod, +/obj/item/weapon/circuitboard/computer/scan_consolenew, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"cnB" = ( +/obj/structure/table, +/obj/item/weapon/aiModule/core/full/asimov, +/obj/item/weapon/aiModule/core/freeformcore, +/obj/machinery/door/window{ + base_state = "right"; + dir = 4; + icon_state = "right"; + name = "Core Modules"; + req_access_txt = "20" + }, +/obj/structure/window/reinforced, +/obj/item/weapon/aiModule/core/full/corp, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/item/weapon/aiModule/core/full/custom, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai_upload) +"cnC" = ( +/obj/structure/table, +/obj/item/weapon/aiModule/supplied/oxygen, +/obj/item/weapon/aiModule/zeroth/oneHuman, +/obj/machinery/door/window{ + base_state = "left"; + dir = 8; + 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 = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/item/weapon/aiModule/supplied/protectStation, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai_upload) +"cnD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Research Quantum Pad" + }) +"cnE" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'KEEP CLEAR OF PAD WHEN IN USE'."; + name = "KEEP CLEAR OF PAD WHEN IN USE"; + pixel_x = 0; + pixel_y = 32 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Research Quantum Pad" + }) +"cnF" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "Research Quantum Pad APC"; + pixel_y = 24 + }, +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1; + d2 = 2 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Research Quantum Pad" + }) +"cnG" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Research Quantum Pad" + }) +"cnH" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Docking Quantum Pad" + }) +"cnI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/power/apc{ + dir = 1; + name = "Docking Quantum Pad APC"; + pixel_y = 24 + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Docking Quantum Pad" + }) +"cnJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'KEEP CLEAR OF PAD WHEN IN USE'."; + name = "KEEP CLEAR OF PAD WHEN IN USE"; + pixel_x = 0; + pixel_y = 32 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Docking Quantum Pad" + }) +"cnK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_pump{ + on = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Docking Quantum Pad" + }) +"cnL" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cnM" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/item/device/assembly/mousetrap/armed, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cnN" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cnO" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cnP" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cnQ" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cnR" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cnS" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cnT" = ( +/obj/structure/table/wood, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/weapon/pen/fourcolor, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/vacantoffice) +"cnU" = ( +/obj/effect/landmark/blobstart, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/vacantoffice) +"cnV" = ( +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless; + icon_state = "wood-broken" + }, +/area/security/vacantoffice) +"cnW" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/vacantoffice) +"cnX" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cnY" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Docking Asteroid Hall 6"; + dir = 4; + icon_state = "camera" + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = -28; + pixel_y = 0 + }, +/turf/open/floor/plasteel/escape{ + tag = "icon-escape (WEST)"; + icon_state = "escape"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"cnZ" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"coa" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cob" = ( +/obj/machinery/door/airlock/maintenance{ + name = "External Maintenance Access"; + req_access_txt = "12" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"coc" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cod" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"coe" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; + tag = "" + }, +/obj/machinery/door/airlock/atmos{ + name = "Research Atmospherics Checkpoint"; + req_access_txt = "24" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cof" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Mix Output"; + on = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cog" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"coh" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + icon_state = "connector_map"; + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"coi" = ( +/obj/structure/closet/toolcloset, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mining_construction) +"coj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mining_construction) +"cok" = ( +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mining_construction) +"col" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mining_construction) +"com" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/camera{ + c_tag = "Aux Base Construction"; + dir = 6; + icon_state = "camera" + }, +/obj/machinery/computer/camera_advanced/base_construction, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; + tag = "" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mining_construction) +"con" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; + tag = "" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mining_construction) +"coo" = ( +/obj/structure/rack{ + dir = 4 + }, +/obj/item/weapon/electronics/airlock, +/obj/item/weapon/electronics/airlock, +/obj/item/weapon/electronics/airlock, +/obj/item/weapon/electronics/airlock, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/wallframe/camera, +/obj/item/wallframe/camera, +/obj/item/wallframe/camera, +/obj/item/wallframe/camera, +/obj/item/device/assault_pod/mining, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/power/apc{ + dir = 1; + name = "Aux Construction APC"; + pixel_y = 24 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mining_construction) +"cop" = ( +/obj/structure/rack{ + dir = 8; + layer = 2.9 + }, +/obj/item/weapon/circuitboard/computer/mining, +/obj/item/weapon/circuitboard/machine/autolathe{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/weapon/circuitboard/computer/arcade/battle, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"coq" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 2; + on = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"cor" = ( +/obj/structure/rack{ + dir = 8; + layer = 2.9 + }, +/obj/item/weapon/circuitboard/computer/secure_data{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/weapon/circuitboard/computer/security{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"cos" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai_upload) +"cot" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai_upload) +"cou" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/power/apc{ + dir = 4; + name = "AI Upload APC"; + pixel_x = 26; + pixel_y = 0 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai_upload) +"cov" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/camera{ + c_tag = "Research Quantum Pad"; + dir = 4; + network = list("SS13") + }, +/obj/machinery/airalarm{ + dir = 4; + locked = 0; + pixel_x = -23; + pixel_y = 0; + req_access = null; + req_one_access_txt = "24;10" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Research Quantum Pad" + }) +"cow" = ( +/obj/machinery/quantumpad, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Research Quantum Pad" + }) +"cox" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Research Quantum Pad" + }) +"coy" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Docking Quantum Pad" + }) +"coz" = ( +/obj/machinery/quantumpad, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Docking Quantum Pad" + }) +"coA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Docking Quantum Pad"; + dir = 8; + icon_state = "camera"; + network = list("SS13","QM"); + tag = "icon-camera (WEST)" + }, +/obj/machinery/airalarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Docking Quantum Pad" + }) +"coB" = ( +/obj/structure/girder, +/obj/structure/grille, +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"coC" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"coD" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"coE" = ( +/obj/machinery/power/apc{ + dir = 2; + name = "Teleporter APC"; + pixel_y = -24 + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter) +"coF" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"coG" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"coH" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Aft Asteroid Maintenance"; + req_access_txt = "12" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"coI" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"coJ" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Aft Asteroid Maintenance"; + req_access_txt = "12" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"coK" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 8 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"coL" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"coM" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/vacantoffice) +"coN" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"coO" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"coP" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"coQ" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"coR" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"coS" = ( +/obj/structure/closet/toolcloset, +/turf/open/floor/plasteel/brown/corner{ + tag = "icon-browncorner (WEST)"; + icon_state = "browncorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mining_construction) +"coT" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mining_construction) +"coU" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mining_construction) +"coV" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mining_construction) +"coW" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mining_construction) +"coX" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mining_construction) +"coY" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mining_construction) +"coZ" = ( +/turf/open/floor/plasteel/brown/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mining_construction) +"cpa" = ( +/obj/structure/rack, +/obj/item/weapon/circuitboard/machine/telecomms/processor, +/obj/item/weapon/circuitboard/machine/telecomms/receiver, +/obj/item/weapon/circuitboard/machine/telecomms/server, +/obj/item/weapon/circuitboard/machine/telecomms/bus, +/obj/item/weapon/circuitboard/machine/telecomms/broadcaster, +/obj/item/weapon/circuitboard/computer/message_monitor{ + pixel_y = -5 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"cpb" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"cpc" = ( +/obj/structure/rack{ + dir = 8; + layer = 2.9 + }, +/obj/item/weapon/circuitboard/computer/powermonitor{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/weapon/circuitboard/computer/stationalert{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/item/weapon/circuitboard/computer/atmos_alert{ + pixel_x = 3; + pixel_y = -3 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"cpd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall/r_wall, +/area/ai_monitored/turret_protected/ai_upload) +"cpe" = ( +/obj/machinery/door/airlock/highsecurity{ + icon_state = "door_closed"; + locked = 0; + name = "AI Upload Access"; + req_access_txt = "16" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai_upload) +"cpf" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall/r_wall, +/area/ai_monitored/turret_protected/ai_upload) +"cpg" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/noticeboard{ + dir = 4; + icon_state = "nboard00"; + pixel_x = -32; + tag = "icon-nboard00 (EAST)" + }, +/obj/item/weapon/paper{ + info = "
Dummies Guide To Quantum Pads


Do you hate the concept of having to use your legs, let alone walk to places? Well, with the Quantum Pad (tm), never again will the fear of cardio keep you from going places!

How to set up your Quantum Pad(tm)


1.Unscrew the Quantum Pad(tm) you wish to link.
2. Use your multi-tool to cache the buffer of the Quantum Pad(tm) you wish to link.
3. Apply the multi-tool to the secondary Quantum Pad(tm) you wish to link to the first Quantum Pad(tm)

If you followed these instructions carefully, your Quantum Pad(tm) should now be properly linked together for near-instant movement across the station! Bear in mind that this is technically a one-way teleport, so you'll need to do the same process with the secondary pad to the first one if you wish to travel between both.
"; + name = "Quantum Pad For Dummies" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Research Quantum Pad" + }) +"cph" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Research Quantum Pad" + }) +"cpi" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/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/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Research Quantum Pad" + }) +"cpj" = ( +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; + icon_state = "space"; + layer = 4; + name = "EXTERNAL AIRLOCK"; + pixel_x = -32; + pixel_y = 0 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Docking Quantum Pad" + }) +"cpk" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Docking Quantum Pad" + }) +"cpl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/noticeboard{ + dir = 8; + icon_state = "nboard00"; + pixel_x = 32; + pixel_y = 0; + tag = "icon-nboard00 (WEST)" + }, +/obj/item/weapon/paper{ + info = "
Dummies Guide To Quantum Pads


Do you hate the concept of having to use your legs, let alone walk to places? Well, with the Quantum Pad (tm), never again will the fear of cardio keep you from going places!

How to set up your Quantum Pad(tm)


1.Unscrew the Quantum Pad(tm) you wish to link.
2. Use your multi-tool to cache the buffer of the Quantum Pad(tm) you wish to link.
3. Apply the multi-tool to the secondary Quantum Pad(tm) you wish to link to the first Quantum Pad(tm)

If you followed these instructions carefully, your Quantum Pad(tm) should now be properly linked together for near-instant movement across the station! Bear in mind that this is technically a one-way teleport, so you'll need to do the same process with the secondary pad to the first one if you wish to travel between both.
"; + name = "Quantum Pad For Dummies" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Docking Quantum Pad" + }) +"cpm" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter) +"cpn" = ( +/obj/machinery/power/apc{ + dir = 2; + name = "Arrival Security Checkpoint APC"; + pixel_y = -24 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint2) +"cpo" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cpp" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Aft Asteroid Maintenance"; + req_access_txt = "12" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cpq" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cpr" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cps" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 8 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cpt" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/vacantoffice) +"cpu" = ( +/obj/machinery/door/airlock/shuttle{ + name = "Emergency Shuttle Airlock" + }, +/turf/open/floor/plating, +/area/shuttle/escape) +"cpv" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 0; + pixel_y = -30 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"cpw" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cpx" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plasteel/brown{ + tag = "icon-brown (SOUTHWEST)"; + icon_state = "brown"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mining_construction) +"cpy" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/brown{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mining_construction) +"cpz" = ( +/obj/structure/mining_shuttle_beacon, +/turf/open/floor/plasteel/brown{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mining_construction) +"cpA" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/plasteel/brown/corner{ + tag = "icon-browncorner (WEST)"; + icon_state = "browncorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mining_construction) +"cpB" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mining_construction) +"cpC" = ( +/obj/structure/closet/crate/rcd, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/brown/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mining_construction) +"cpD" = ( +/obj/structure/table, +/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/rods{ + amount = 50 + }, +/turf/open/floor/plasteel/brown{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mining_construction) +"cpE" = ( +/obj/structure/table, +/obj/item/stack/sheet/plasteel/fifty, +/obj/item/stack/sheet/rglass{ + amount = 50 + }, +/obj/machinery/light, +/turf/open/floor/plasteel/brown{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mining_construction) +"cpF" = ( +/obj/structure/table, +/obj/item/device/assault_pod/mining, +/obj/item/weapon/storage/box/lights/mixed, +/turf/open/floor/plasteel/brown{ + tag = "icon-brown (SOUTHEAST)"; + icon_state = "brown"; + dir = 6; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mining_construction) +"cpG" = ( +/obj/machinery/vending/assist, +/obj/machinery/camera{ + c_tag = "Tech Storage South"; + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"cpH" = ( +/obj/structure/table, +/obj/item/device/plant_analyzer, +/obj/item/weapon/stock_parts/cell/high/plus, +/obj/item/device/healthanalyzer, +/obj/item/device/analyzer, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"cpI" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/turretid{ + control_area = "AI Upload Chamber"; + name = "AI Upload turret control"; + pixel_y = 25 + }, +/obj/machinery/camera/motion{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai_upload) +"cpJ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai_upload) +"cpK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai_upload) +"cpL" = ( +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = -28; + pixel_y = 0 + }, +/obj/structure/table, +/obj/item/device/multitool, +/obj/item/weapon/screwdriver, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/teleporter{ + name = "Research Quantum Pad" + }) +"cpM" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/teleporter{ + name = "Research Quantum Pad" + }) +"cpN" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/teleporter{ + name = "Research Quantum Pad" + }) +"cpO" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Research Quantum Pad" + }) +"cpP" = ( +/obj/machinery/light/small, +/obj/structure/fans/tiny, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Research Quantum Pad" + }) +"cpQ" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Research Quantum Pad" + }) +"cpR" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Docking Quantum Pad" + }) +"cpS" = ( +/obj/machinery/light/small, +/obj/structure/fans/tiny, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Docking Quantum Pad" + }) +"cpT" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Docking Quantum Pad" + }) +"cpU" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/teleporter{ + name = "Docking Quantum Pad" + }) +"cpV" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/teleporter{ + name = "Docking Quantum Pad" + }) +"cpW" = ( +/obj/structure/table, +/obj/item/device/multitool, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/item/weapon/screwdriver, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/teleporter{ + name = "Docking Quantum Pad" + }) +"cpX" = ( +/obj/effect/turf_decal/stripes/asteroid/line, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cpY" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/turf_decal/stripes/asteroid/line, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cpZ" = ( +/obj/machinery/light/small, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cqa" = ( +/obj/machinery/computer/teleporter, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter) +"cqb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter) +"cqc" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter) +"cqd" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + on = 1 + }, +/obj/machinery/camera{ + c_tag = "Teleporter"; + dir = 6; + icon_state = "camera" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter) +"cqe" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/shieldwallgen, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter) +"cqf" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint2) +"cqg" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cqh" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cqi" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless; + icon_state = "wood-broken" + }, +/area/security/vacantoffice) +"cqj" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel/escape{ + tag = "icon-escape (WEST)"; + icon_state = "escape"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"cqk" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"cql" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"cqm" = ( +/obj/machinery/door/airlock/shuttle{ + name = "Emergency Shuttle Cargo" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"cqn" = ( +/obj/machinery/door/airlock/glass{ + name = "Emergency Shuttle Infirmary" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"cqo" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/pod_2) +"cqp" = ( +/obj/structure/shuttle/engine/propulsion/burst{ + dir = 4; + icon_state = "propulsion"; + tag = "icon-propulsion (WEST)" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/pod_2) +"cqq" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cqr" = ( +/obj/machinery/door/airlock/engineering{ + cyclelinkeddir = 1; + name = "Auxillary Base Construction"; + req_access_txt = "0"; + req_one_access_txt = "32;47;48" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mining_construction) +"cqs" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mining_construction) +"cqt" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"cqu" = ( +/obj/machinery/door/airlock/engineering{ + name = "Tech Storage"; + req_access_txt = "23" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"cqv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/tech) +"cqw" = ( +/obj/machinery/vending/snack/random, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cqx" = ( +/obj/machinery/vending/cola/random, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cqy" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cqz" = ( +/turf/closed/wall/r_wall, +/area/hallway/primary/aft) +"cqA" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/window/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cqB" = ( +/obj/machinery/door/airlock/glass{ + name = "Research Quantum Pad" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/teleporter{ + name = "Research Quantum Pad" + }) +"cqC" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced, +/obj/structure/grille, +/turf/open/space, +/area/space) +"cqD" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cqE" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/window/fulltile, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Docking Quantum Pad" + }) +"cqF" = ( +/obj/machinery/door/airlock/glass{ + name = "Docking Quantum Pad" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/teleporter{ + name = "Docking Quantum Pad" + }) +"cqG" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/window/fulltile, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Docking Quantum Pad" + }) +"cqH" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Aft Asteroid Maintenance"; + req_access_txt = "12" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cqI" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Aft Asteroid Maintenance"; + req_access_txt = "12" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cqJ" = ( +/obj/machinery/teleport/station, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter) +"cqK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter) +"cqL" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter) +"cqM" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter) +"cqN" = ( +/obj/structure/closet/secure_closet/security/engine, +/turf/open/floor/plasteel/red/side{ + tag = "icon-red (NORTHWEST)"; + icon_state = "red"; + dir = 9; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint2) +"cqO" = ( +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint2) +"cqP" = ( +/obj/machinery/computer/security, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint2) +"cqQ" = ( +/obj/machinery/computer/card, +/obj/machinery/camera{ + c_tag = "Docking Security Checkpoint"; + dir = 6; + icon_state = "camera" + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint2) +"cqR" = ( +/obj/machinery/computer/secure_data, +/obj/machinery/newscaster/security_unit{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint2) +"cqS" = ( +/obj/structure/reagent_dispensers/peppertank{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint2) +"cqT" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/turf/open/floor/plasteel/red/side{ + tag = "icon-red (NORTHEAST)"; + icon_state = "red"; + dir = 5; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint2) +"cqU" = ( +/obj/machinery/door/airlock/security{ + name = "Security Checkpoint"; + req_access = null; + req_access_txt = "1" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint2) +"cqV" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cqW" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cqX" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cqY" = ( +/obj/structure/table_frame/wood, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/vacantoffice) +"cqZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/table_frame/wood, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless; + icon_state = "wood-broken" + }, +/area/security/vacantoffice) +"cra" = ( +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/escape) +"crb" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 27; + pixel_y = 0 + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/escape) +"crc" = ( +/obj/machinery/sleeper{ + icon_state = "sleeper-open"; + dir = 8 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"crd" = ( +/obj/docking_port/stationary/random{ + dir = 8; + id = "pod_asteroid2"; + name = "asteroid" + }, +/turf/open/space, +/area/space) +"cre" = ( +/obj/structure/grille, +/obj/structure/window/shuttle, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/shuttle/pod_2) +"crf" = ( +/obj/machinery/computer/shuttle/pod{ + pixel_x = 0; + pixel_y = -32; + possible_destinations = "pod_asteroid2"; + shuttleId = "pod2" + }, +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/pod_2) +"crg" = ( +/obj/item/weapon/storage/pod{ + pixel_x = 6; + pixel_y = -28 + }, +/obj/item/device/radio/intercom{ + pixel_x = 0; + pixel_y = 25 + }, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/pod_2) +"crh" = ( +/obj/machinery/door/airlock/titanium{ + name = "Escape Pod Airlock" + }, +/obj/docking_port/mobile/pod{ + dir = 8; + id = "pod2"; + name = "escape pod 2"; + port_angle = 180 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/pod_2) +"cri" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 4; + name = "Research Escape Pod" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"crj" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8; + name = "Research Escape Pod" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"crk" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4"; + tag = "" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/obj/structure/sign/directions/evac{ + dir = 4; + icon_state = "direction_evac"; + pixel_x = 32; + pixel_y = 24; + tag = "icon-direction_evac (EAST)" + }, +/obj/structure/sign/directions/security{ + dir = 1; + icon_state = "direction_sec"; + pixel_x = 32; + pixel_y = 32; + tag = "icon-direction_sec (NORTH)" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"crl" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; + tag = "" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"crm" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; + tag = "" + }, +/obj/structure/sign/map/left/ceres{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"crn" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; + tag = "" + }, +/obj/machinery/camera{ + c_tag = "Research Asteroid Hallway 2" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cro" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; + tag = "" + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"crp" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; + tag = "" + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"crq" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; + tag = "" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"crr" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; + tag = "" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"crs" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"crt" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cru" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; + tag = "" + }, +/obj/machinery/camera{ + c_tag = "Research Asteroid Hallway 3" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"crv" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"crw" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"crx" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cry" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"crz" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"crA" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"crB" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Research Asteroid Hallway 4" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"crC" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"crD" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"crE" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"crF" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"crG" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = 32 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"crH" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Research Asteroid Hallway 5" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"crI" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"crJ" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"crK" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral/side{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 1; + heat_capacity = 1e+006 + }, +/area/hallway/primary/aft) +"crL" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plasteel/neutral/side{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 1; + heat_capacity = 1e+006 + }, +/area/hallway/primary/aft) +"crM" = ( +/obj/structure/sign/directions/evac{ + dir = 4; + icon_state = "direction_evac"; + pixel_x = 32; + pixel_y = 24; + tag = "icon-direction_evac (EAST)" + }, +/obj/structure/sign/directions/engineering{ + dir = 1; + icon_state = "direction_eng"; + pixel_x = 32; + pixel_y = 32; + tag = "icon-direction_eng (NORTH)" + }, +/turf/open/floor/plasteel/neutral/side{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 1; + heat_capacity = 1e+006 + }, +/area/hallway/primary/aft) +"crN" = ( +/obj/structure/sign/map/left/ceres{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"crO" = ( +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"crP" = ( +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"crQ" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"crR" = ( +/obj/structure/sign/directions/science{ + dir = 8; + icon_state = "direction_sci"; + pixel_x = -32; + pixel_y = 24; + tag = "icon-direction_sci (WEST)" + }, +/obj/structure/sign/directions/engineering{ + dir = 1; + icon_state = "direction_eng"; + pixel_x = -32; + pixel_y = 32; + tag = "icon-direction_eng (NORTH)" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"crS" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"crT" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"crU" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"crV" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"crW" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel/blue/corner{ + tag = "icon-bluecorner (EAST)"; + icon_state = "bluecorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"crX" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Docking Asteroid Hall 1"; + dir = 6; + icon_state = "camera" + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/blue/corner{ + tag = "icon-bluecorner (EAST)"; + icon_state = "bluecorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"crY" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/turf/open/floor/plasteel/blue/corner{ + tag = "icon-bluecorner (EAST)"; + icon_state = "bluecorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"crZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/turf/open/floor/plasteel/blue/corner{ + tag = "icon-bluecorner (EAST)"; + icon_state = "bluecorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"csa" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/blue/corner{ + tag = "icon-bluecorner (EAST)"; + icon_state = "bluecorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"csb" = ( +/obj/machinery/teleport/hub, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter) +"csc" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter) +"csd" = ( +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint2) +"cse" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint2) +"csf" = ( +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = 28; + pixel_y = 0 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint2) +"csg" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/vacantoffice) +"csh" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/vacantoffice) +"csi" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/vacantoffice) +"csj" = ( +/obj/structure/table/wood, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/vacantoffice) +"csk" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/item/chair, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless; + icon_state = "wood-broken" + }, +/area/security/vacantoffice) +"csl" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/vacantoffice) +"csm" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"csn" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel/escape{ + tag = "icon-escape (WEST)"; + icon_state = "escape"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"cso" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/escape) +"csp" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"csq" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/fire, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/item/weapon/crowbar, +/obj/structure/extinguisher_cabinet{ + pixel_x = 27; + pixel_y = 0 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"csr" = ( +/obj/structure/closet/emcloset, +/obj/machinery/light/small, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"css" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/sign/pods{ + pixel_x = -32 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cst" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + on = 1 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"csu" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"csv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"csw" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"csx" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"csy" = ( +/obj/effect/landmark/lightsout, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"csz" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"csA" = ( +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"csB" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"csC" = ( +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"csD" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"csE" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"csF" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"csG" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"csH" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"csI" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/blue/corner{ + tag = "icon-bluecorner (EAST)"; + icon_state = "bluecorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"csJ" = ( +/obj/structure/table, +/obj/item/weapon/hand_tele, +/obj/item/device/radio/beacon, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = -28; + pixel_y = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter) +"csK" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter) +"csL" = ( +/obj/item/weapon/twohanded/required/kirbyplants{ + tag = "icon-plant-21"; + icon_state = "plant-21" + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint2) +"csM" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/obj/structure/closet/wardrobe/red, +/turf/open/floor/plasteel/red/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint2) +"csN" = ( +/obj/structure/table, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/weapon/pen, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint2) +"csO" = ( +/obj/structure/chair/office/light, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/red/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint2) +"csP" = ( +/turf/open/floor/plasteel/red/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint2) +"csQ" = ( +/obj/structure/table, +/obj/item/weapon/crowbar, +/obj/item/device/radio, +/turf/open/floor/plasteel/red/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint2) +"csR" = ( +/obj/structure/table, +/obj/machinery/recharger, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 6; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint2) +"csS" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/vacantoffice) +"csT" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/vacantoffice) +"csU" = ( +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 2; + name = "Arrivals APC"; + pixel_y = -24 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"csV" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/effect/turf_decal/stripes/asteroid/line, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"csW" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"csX" = ( +/obj/machinery/airalarm{ + dir = 1; + icon_state = "alarm0"; + pixel_y = -22 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"csY" = ( +/obj/structure/closet, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/escape) +"csZ" = ( +/obj/structure/closet/crate, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/escape) +"cta" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"ctb" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"ctc" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"ctd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/button/door{ + id = "MechbayShutters"; + name = "Mechbay Shutters"; + pixel_y = -24; + req_access_txt = "29" + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cte" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"ctf" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/purple/corner{ + tag = "icon-purplecorner (WEST)"; + icon_state = "purplecorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"ctg" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/purple/corner{ + tag = "icon-purplecorner (WEST)"; + icon_state = "purplecorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cth" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/light, +/turf/open/floor/plasteel/purple/corner{ + tag = "icon-purplecorner (WEST)"; + icon_state = "purplecorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cti" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/plasteel/purple/corner{ + tag = "icon-purplecorner (WEST)"; + icon_state = "purplecorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"ctj" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/sign/science{ + pixel_y = -32 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/purple/corner{ + tag = "icon-purplecorner (WEST)"; + icon_state = "purplecorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"ctk" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel/purple/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"ctl" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/purple/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"ctm" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel/purple/corner{ + tag = "icon-purplecorner (WEST)"; + icon_state = "purplecorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"ctn" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/sign/science{ + pixel_y = -32 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cto" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/purple/corner{ + tag = "icon-purplecorner (WEST)"; + icon_state = "purplecorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"ctp" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/light, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"ctq" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"ctr" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cts" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"ctt" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"ctu" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"ctv" = ( +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"ctw" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"ctx" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cty" = ( +/obj/machinery/light, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"ctz" = ( +/obj/machinery/door/airlock/glass, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"ctA" = ( +/obj/structure/window/reinforced, +/obj/machinery/camera{ + c_tag = "Research-Docking Bridge 1"; + dir = 1; + icon_state = "camera"; + network = list("SS13") + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"ctB" = ( +/obj/structure/window/reinforced, +/obj/machinery/camera{ + c_tag = "Research-Docking Bridge 2"; + dir = 1; + icon_state = "camera"; + network = list("SS13") + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"ctC" = ( +/obj/structure/window/reinforced, +/obj/machinery/camera{ + c_tag = "Research-Docking Bridge 3"; + dir = 1; + icon_state = "camera"; + network = list("SS13") + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"ctD" = ( +/obj/machinery/door/airlock/glass, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"ctE" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"ctF" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"ctG" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"ctH" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"ctI" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"ctJ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"ctK" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"ctL" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter) +"ctM" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter) +"ctN" = ( +/obj/machinery/door/airlock/command{ + name = "Teleport Access"; + req_access_txt = "17" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter) +"ctO" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint2) +"ctP" = ( +/obj/structure/table/reinforced, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/window/brigdoor/northright{ + name = "Arrival Security Checkpoint"; + req_access_txt = "1" + }, +/turf/open/floor/plasteel/red{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint2) +"ctQ" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"ctR" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/airlock{ + name = "Vacant Office"; + req_access_txt = "12" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/vacantoffice) +"ctS" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/vacantoffice) +"ctT" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/vacantoffice) +"ctU" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/obj/machinery/camera{ + c_tag = "Docking Asteroid Hall 5"; + dir = 6; + icon_state = "camera" + }, +/obj/structure/sign/map/left/ceres{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/escape/corner{ + tag = "icon-escapecorner (NORTH)"; + icon_state = "escapecorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"ctV" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/shuttle/engine/heater, +/turf/open/floor/plating/airless, +/area/shuttle/escape) +"ctW" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"ctX" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"ctY" = ( +/obj/machinery/mecha_part_fabricator, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"ctZ" = ( +/obj/machinery/door/poddoor/shutters{ + id = "MechbayShutters" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cua" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "RoboticsShutters" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cub" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "RoboticsShutters" + }, +/obj/machinery/door/window/northright{ + name = "Robotics Desk"; + req_access_txt = "29" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cuc" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cud" = ( +/obj/machinery/door/airlock/research{ + cyclelinkeddir = 2; + name = "Research Division Access"; + req_access_txt = "47" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/whitepurple{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cue" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cuf" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cug" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "RnDShutters" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cuh" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "RnDShutters" + }, +/obj/machinery/door/window/northleft{ + name = "Research Desk"; + req_access_txt = "47" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/purple{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cui" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "RnDShutters" + }, +/obj/machinery/door/window/northright{ + name = "Research Desk"; + req_access_txt = "47" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/purple{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cuj" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Science SMES Access"; + req_access_txt = "10;11;12" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cuk" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/lattice/catwalk, +/obj/structure/girder, +/obj/structure/grille, +/turf/open/space, +/area/space) +"cul" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cum" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cun" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cuo" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cup" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/sign/map/left/ceres{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/arrival/corner{ + tag = "icon-arrivalcorner (NORTH)"; + icon_state = "arrivalcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cuq" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/arrival/corner{ + tag = "icon-arrivalcorner (NORTH)"; + icon_state = "arrivalcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cur" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Docking Asteroid Hall 2"; + dir = 6; + icon_state = "camera" + }, +/turf/open/floor/plasteel/arrival/corner{ + tag = "icon-arrivalcorner (NORTH)"; + icon_state = "arrivalcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cus" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/arrival/corner{ + tag = "icon-arrivalcorner (NORTH)"; + icon_state = "arrivalcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cut" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel/arrival/corner{ + tag = "icon-arrivalcorner (NORTH)"; + icon_state = "arrivalcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cuu" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/arrival/corner{ + tag = "icon-arrivalcorner (NORTH)"; + icon_state = "arrivalcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cuv" = ( +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, +/turf/open/floor/plasteel/arrival/corner{ + tag = "icon-arrivalcorner (NORTH)"; + icon_state = "arrivalcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cuw" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel/arrival/corner{ + tag = "icon-arrivalcorner (NORTH)"; + icon_state = "arrivalcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cux" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Docking Asteroid Hall 3"; + dir = 6; + icon_state = "camera" + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/turf/open/floor/plasteel/arrival/corner{ + tag = "icon-arrivalcorner (NORTH)"; + icon_state = "arrivalcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cuy" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel/blue/corner{ + tag = "icon-bluecorner (NORTH)"; + icon_state = "bluecorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cuz" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 1 + }, +/obj/structure/sign/directions/science{ + dir = 8; + icon_state = "direction_sci"; + pixel_x = -32; + pixel_y = 24; + tag = "icon-direction_sci (WEST)" + }, +/obj/structure/sign/directions/medical{ + dir = 1; + icon_state = "direction_med"; + pixel_x = -32; + pixel_y = 32; + tag = "icon-direction_med (NORTH)" + }, +/obj/structure/sign/directions/supply{ + dir = 1; + icon_state = "direction_supply"; + pixel_x = -32; + pixel_y = 40; + tag = "icon-direction_supply (NORTH)" + }, +/turf/open/floor/plasteel/blue/corner{ + tag = "icon-bluecorner (NORTH)"; + icon_state = "bluecorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cuA" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cuB" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/obj/structure/sign/directions/evac{ + dir = 4; + icon_state = "direction_evac"; + pixel_x = 32; + pixel_y = 24; + tag = "icon-direction_evac (EAST)" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cuC" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cuD" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/sign/map/left/ceres{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cuE" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cuF" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cuG" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cuH" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cuI" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Docking Asteroid Hall 4"; + dir = 6; + icon_state = "camera" + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cuJ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cuK" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cuL" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cuM" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cuN" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cuO" = ( +/obj/structure/shuttle/engine/propulsion, +/turf/open/floor/plating/airless, +/area/shuttle/escape) +"cuP" = ( +/turf/open/space, +/area/mine/unexplored{ + name = "Research Asteroid" + }) +"cuQ" = ( +/obj/machinery/door/poddoor{ + id = "mixvent"; + name = "Mixer Room Vent" + }, +/turf/open/floor/engine/vacuum{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cuR" = ( +/obj/structure/sign/vacuum{ + pixel_y = 32 + }, +/turf/open/floor/engine/vacuum{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cuS" = ( +/obj/machinery/sparker{ + dir = 2; + id = "mixingsparker"; + pixel_x = 25 + }, +/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/open/floor/engine/vacuum{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cuT" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cuU" = ( +/obj/machinery/airlock_sensor{ + id_tag = "tox_airlock_sensor"; + master_tag = "tox_airlock_control"; + pixel_y = 24 + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/toxins/mixing) +"cuV" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/obj/machinery/meter, +/obj/machinery/embedded_controller/radio/airlock_controller{ + airpump_tag = "tox_airlock_pump"; + exterior_door_tag = "tox_airlock_exterior"; + id_tag = "tox_airlock_control"; + interior_door_tag = "tox_airlock_interior"; + pixel_x = -24; + pixel_y = 0; + sanitize_external = 1; + sensor_tag = "tox_airlock_sensor" + }, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (WEST)"; + icon_state = "whitepurple"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cuW" = ( +/obj/machinery/atmospherics/components/binary/valve{ + dir = 4; + name = "mix to port" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cuX" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (EAST)"; + icon_state = "whitepurple"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cuY" = ( +/obj/machinery/recharge_station, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cuZ" = ( +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cva" = ( +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cvb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cvc" = ( +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cvd" = ( +/obj/machinery/button/door{ + id = "MechbayShutters"; + name = "Mechbay Shutters"; + pixel_y = 24; + req_access_txt = "29" + }, +/obj/structure/rack, +/obj/item/weapon/storage/belt/utility/full, +/obj/item/weapon/storage/belt/utility/full, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/head/welding, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cve" = ( +/obj/machinery/r_n_d/circuit_imprinter, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cvf" = ( +/obj/structure/chair/office/dark{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/landmark/start/roboticist, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cvg" = ( +/obj/machinery/button/door{ + id = "RoboticsShutters"; + name = "Robotics Privacy Shutters"; + pixel_y = 24; + req_access_txt = "29" + }, +/obj/machinery/camera{ + c_tag = "Robotics"; + network = list("SS13","RD") + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cvh" = ( +/obj/machinery/requests_console{ + department = "Robotics"; + departmentType = 2; + name = "Robotics RC"; + pixel_y = 30 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cvi" = ( +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cvj" = ( +/obj/structure/table/optable, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cvk" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/obj/machinery/camera{ + c_tag = "Research Airlock" + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/shower{ + pixel_y = 24 + }, +/obj/structure/curtain, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cvl" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cvm" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/obj/structure/closet/firecloset/full, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cvn" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/obj/machinery/camera{ + c_tag = "Research and Development"; + network = list("SS13","RD") + }, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (NORTH)"; + icon_state = "whitepurple"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cvo" = ( +/obj/machinery/button/door{ + id = "RnDShutters"; + name = "Research Privacy Shutters"; + pixel_y = 24; + req_access_txt = "47" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (NORTH)"; + icon_state = "whitepurple"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cvp" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (NORTH)"; + icon_state = "whitepurple"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cvq" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (NORTH)"; + icon_state = "whitepurple"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cvr" = ( +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (NORTH)"; + icon_state = "whitepurple"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cvs" = ( +/obj/structure/chair/office/light{ + dir = 1 + }, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (NORTH)"; + icon_state = "whitepurple"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cvt" = ( +/obj/structure/table, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/metal/fifty, +/obj/item/clothing/glasses/welding, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (NORTH)"; + icon_state = "whitepurple"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cvu" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cvv" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cvw" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/camera{ + c_tag = "Science SMES"; + dir = 8; + icon_state = "camera"; + network = list("SS13","QM"); + tag = "icon-camera (WEST)" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cvx" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "Aft Asteroid Maintenance APC"; + pixel_x = -25; + pixel_y = 1 + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cvy" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 1 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cvz" = ( +/obj/structure/rack, +/obj/item/weapon/storage/bag/ore, +/obj/item/weapon/pickaxe/emergency, +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cvA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cvB" = ( +/obj/effect/landmark/lightsout, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cvC" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + on = 1 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cvD" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cvE" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cvF" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cvG" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cvH" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=Medbay"; + location = "ArrivalsMiddle"; + name = "navigation beacon (Arrivals-Middle)" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cvI" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cvJ" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cvK" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cvL" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cvM" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cvN" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cvO" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + on = 1 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cvP" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cvQ" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cvR" = ( +/turf/open/floor/engine/vacuum{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cvS" = ( +/obj/machinery/door/airlock/glass_research{ + autoclose = 0; + frequency = 1449; + glass = 1; + heat_proof = 1; + icon_state = "door_locked"; + id_tag = "tox_airlock_exterior"; + locked = 1; + name = "Mixing Room Exterior Airlock"; + req_access_txt = "8" + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/toxins/mixing) +"cvT" = ( +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/toxins/mixing) +"cvU" = ( +/obj/machinery/door/airlock/glass_research{ + autoclose = 0; + frequency = 1449; + glass = 1; + heat_proof = 1; + icon_state = "door_locked"; + id_tag = "tox_airlock_interior"; + locked = 1; + name = "Mixing Room Interior Airlock"; + req_access_txt = "8" + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/toxins/mixing) +"cvV" = ( +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (WEST)"; + icon_state = "whitepurple"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cvW" = ( +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cvX" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 27; + pixel_y = 0 + }, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (EAST)"; + icon_state = "whitepurple"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cvY" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cvZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cwa" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 2; + on = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cwb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cwc" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cwd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cwe" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cwf" = ( +/obj/machinery/computer/operating, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cwg" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cwh" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cwi" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cwj" = ( +/obj/machinery/r_n_d/destructive_analyzer, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cwk" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cwl" = ( +/obj/machinery/r_n_d/protolathe, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cwm" = ( +/obj/item/weapon/folder/white, +/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, +/obj/structure/table/glass, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cwn" = ( +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cwo" = ( +/obj/item/weapon/reagent_containers/glass/beaker/large{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/weapon/reagent_containers/glass/beaker{ + pixel_x = 8; + pixel_y = 2 + }, +/obj/item/weapon/reagent_containers/dropper, +/obj/structure/table, +/obj/machinery/newscaster{ + pixel_x = 28; + pixel_y = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cwp" = ( +/obj/structure/closet/toolcloset, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cwq" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cwr" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cws" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Science SMES Access"; + req_access_txt = "10;11;12" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cwt" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 8 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cwu" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cwv" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/arrival{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cww" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/arrival{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cwx" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel/arrival{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cwy" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/plasteel/arrival{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cwz" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cwA" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel/arrival{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cwB" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plasteel/arrival{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cwC" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel/arrival{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cwD" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cwE" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cwF" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/plasteel/arrival{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cwG" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/arrival{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cwH" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/arrival{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cwI" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/airalarm{ + dir = 1; + icon_state = "alarm0"; + pixel_y = -22 + }, +/turf/open/floor/plasteel/arrival{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cwJ" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/arrival{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cwK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 8 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/arrival{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cwL" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cwM" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cwN" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cwO" = ( +/obj/machinery/sparker{ + dir = 2; + id = "mixingsparker"; + pixel_x = 25 + }, +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 4; + frequency = 1441; + id = "air_in" + }, +/turf/open/floor/engine/vacuum{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cwP" = ( +/obj/structure/sign/fire{ + pixel_y = -32 + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + on = 1 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/toxins/mixing) +"cwQ" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/obj/machinery/meter, +/obj/machinery/button/door{ + id = "mixvent"; + name = "Mixing Room Vent Control"; + pixel_x = -25; + pixel_y = 5; + req_access_txt = "7" + }, +/obj/machinery/button/ignition{ + id = "mixingsparker"; + pixel_x = -25; + pixel_y = -5 + }, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (WEST)"; + icon_state = "whitepurple"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cwR" = ( +/obj/machinery/atmospherics/components/binary/valve{ + dir = 4; + name = "port to mix" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cwS" = ( +/obj/machinery/mech_bay_recharge_port, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cwT" = ( +/turf/open/floor/mech_bay_recharge_floor, +/area/assembly/robotics) +"cwU" = ( +/obj/machinery/computer/mech_bay_power_console, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cwV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cwW" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cwX" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cwY" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cwZ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cxa" = ( +/obj/structure/rack, +/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/plasteel/twenty, +/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/sheet/metal/fifty, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cxb" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cxc" = ( +/obj/structure/table, +/obj/item/device/mmi, +/obj/item/device/mmi, +/obj/item/device/mmi, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cxd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/closet/l3closet/scientist, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cxe" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cxf" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/obj/structure/closet/firecloset/full, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cxg" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/obj/machinery/requests_console{ + department = "Science"; + departmentType = 2; + name = "Science Requests Console"; + pixel_x = -30; + pixel_y = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cxh" = ( +/obj/structure/chair/office/light{ + dir = 8 + }, +/obj/effect/landmark/start/scientist, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cxi" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cxj" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cxk" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cxl" = ( +/obj/item/weapon/stock_parts/manipulator, +/obj/item/weapon/stock_parts/capacitor, +/obj/item/weapon/stock_parts/capacitor, +/obj/item/weapon/stock_parts/manipulator, +/obj/item/weapon/stock_parts/micro_laser, +/obj/item/weapon/stock_parts/micro_laser, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil, +/obj/structure/table, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cxm" = ( +/obj/machinery/computer/station_alert, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cxn" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "Aft Asteroid Hallway APC"; + pixel_x = 24; + pixel_y = 0 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cxo" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cxp" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cxq" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cxr" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cxs" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cxt" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cxu" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cxv" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cxw" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = 28; + pixel_y = 0 + }, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (EAST)"; + icon_state = "whitepurple"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cxx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cxy" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cxz" = ( +/obj/structure/chair/office/dark, +/obj/effect/landmark/start/roboticist, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cxA" = ( +/obj/effect/landmark/start/roboticist, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cxB" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cxC" = ( +/obj/structure/table, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/item/weapon/retractor, +/obj/item/weapon/hemostat, +/obj/item/weapon/circular_saw, +/obj/item/weapon/scalpel, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cxD" = ( +/obj/structure/window/reinforced, +/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, +/obj/item/device/assembly/flash/handheld, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cxE" = ( +/obj/structure/table, +/obj/structure/window/reinforced, +/obj/item/weapon/surgical_drapes, +/obj/item/clothing/gloves/color/latex, +/obj/item/weapon/storage/box/bodybags, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cxF" = ( +/obj/machinery/door/airlock/research{ + cyclelinkeddir = 1; + name = "Research Division Access"; + req_access_txt = "47" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/whitepurple{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cxG" = ( +/obj/machinery/computer/rdconsole/core, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cxH" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cxI" = ( +/obj/machinery/r_n_d/circuit_imprinter, +/obj/item/weapon/reagent_containers/glass/beaker/sulphuric, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cxJ" = ( +/obj/structure/table/glass, +/obj/machinery/cell_charger, +/obj/item/weapon/stock_parts/cell/high, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cxK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cxL" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cxM" = ( +/obj/item/weapon/stock_parts/console_screen, +/obj/item/weapon/stock_parts/console_screen, +/obj/item/weapon/stock_parts/console_screen, +/obj/item/weapon/stock_parts/matter_bin, +/obj/item/weapon/stock_parts/matter_bin, +/obj/item/weapon/stock_parts/scanning_module{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/item/weapon/stock_parts/scanning_module, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/table, +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = 32; + random_basetype = /obj/structure/sign/poster/official + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cxN" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/chair/stool, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cxO" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cxP" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cxQ" = ( +/turf/open/floor/plasteel/darkpurple/side{ + tag = "icon-darkpurple (NORTH)"; + icon_state = "darkpurple"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cxR" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plasteel/darkpurple/side{ + tag = "icon-darkpurple (NORTH)"; + icon_state = "darkpurple"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cxS" = ( +/obj/structure/disposalpipe/trunk, +/obj/structure/disposaloutlet{ + dir = 8 + }, +/turf/open/floor/plasteel/darkpurple/side{ + tag = "icon-darkpurple (NORTH)"; + icon_state = "darkpurple"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cxT" = ( +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cxU" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cxV" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cxW" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cxX" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cxY" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (NORTHWEST)"; + icon_state = "whitepurple"; + dir = 9; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cxZ" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 10; + pixel_x = 0; + initialize_directions = 10 + }, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (NORTH)"; + icon_state = "whitepurple"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cya" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (NORTH)"; + icon_state = "whitepurple"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cyb" = ( +/turf/open/floor/plasteel/whitepurple/corner{ + tag = "icon-whitepurplecorner (NORTH)"; + icon_state = "whitepurplecorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cyc" = ( +/obj/effect/landmark/start/scientist, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cyd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/camera{ + c_tag = "Toxins Mixing"; + dir = 9; + icon_state = "camera"; + network = list("SS13","RD"); + tag = "icon-camera (NORTHWEST)" + }, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (EAST)"; + icon_state = "whitepurple"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cye" = ( +/obj/machinery/computer/mech_bay_power_console, +/obj/machinery/camera{ + c_tag = "Robotics 2"; + dir = 1; + network = list("SS13","RD") + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cyf" = ( +/obj/machinery/light, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cyg" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/table, +/obj/item/weapon/storage/firstaid{ + name = "first-aid kit (empty)" + }, +/obj/item/weapon/storage/firstaid{ + name = "first-aid kit (empty)" + }, +/obj/item/weapon/reagent_containers/glass/bucket, +/obj/item/weapon/reagent_containers/glass/bucket, +/obj/item/device/assembly/prox_sensor, +/obj/item/device/assembly/prox_sensor, +/obj/item/device/assembly/prox_sensor, +/obj/item/device/assembly/prox_sensor, +/obj/item/device/assembly/prox_sensor, +/obj/item/device/assembly/prox_sensor, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cyh" = ( +/obj/machinery/computer/rdconsole/robotics, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cyi" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/weapon/stock_parts/cell/high, +/obj/item/weapon/stock_parts/cell/high, +/obj/item/weapon/stock_parts/cell/high, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cyj" = ( +/obj/structure/table, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/item/weapon/storage/toolbox/electrical{ + pixel_x = -4; + pixel_x = 1; + pixel_y = 5 + }, +/obj/item/device/multitool, +/obj/item/device/multitool, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cyk" = ( +/obj/machinery/computer/aifixer, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cyl" = ( +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -28 + }, +/turf/open/floor/plasteel/whitepurple/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cym" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/whitepurple/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cyn" = ( +/obj/machinery/power/apc{ + cell_type = 5000; + dir = 2; + name = "Robotics APC"; + pixel_y = -24 + }, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plasteel/whitepurple/corner{ + tag = "icon-whitepurplecorner (WEST)"; + icon_state = "whitepurplecorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cyo" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cyp" = ( +/obj/structure/closet/wardrobe/robotics_black, +/obj/item/device/radio/headset/headset_sci{ + pixel_x = -3 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cyq" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cyr" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/whitepurple/corner{ + tag = "icon-whitepurplecorner (EAST)"; + icon_state = "whitepurplecorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cys" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (NORTH)"; + icon_state = "whitepurple"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cyt" = ( +/turf/open/floor/plasteel/whitepurple/corner{ + tag = "icon-whitepurplecorner (NORTH)"; + icon_state = "whitepurplecorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cyu" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cyv" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/plasteel/whitepurple/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cyw" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -28 + }, +/turf/open/floor/plasteel/whitepurple/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cyx" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/whitepurple/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cyy" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/whitepurple/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cyz" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/whitepurple/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cyA" = ( +/turf/open/floor/plasteel/whitepurple/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cyB" = ( +/obj/structure/table, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/item/weapon/storage/toolbox/mechanical, +/turf/open/floor/plasteel/whitepurple/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cyC" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "Research and Development APC"; + pixel_x = -25 + }, +/obj/structure/cable/orange, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cyD" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/sign/electricshock{ + pixel_y = -32 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cyE" = ( +/obj/machinery/power/smes/engineering, +/obj/structure/cable/orange, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cyF" = ( +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cyG" = ( +/obj/effect/landmark/blobstart, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cyH" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cyI" = ( +/mob/living/simple_animal/slime, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cyJ" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cyK" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cyL" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/arrival) +"cyM" = ( +/obj/structure/grille, +/obj/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/arrival) +"cyN" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister, +/obj/machinery/airalarm{ + dir = 4; + icon_state = "alarm0"; + pixel_x = -22 + }, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (WEST)"; + icon_state = "whitepurple"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cyO" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 4; + initialize_directions = 11 + }, +/obj/machinery/meter, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cyP" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cyQ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/sign/nosmoking_2{ + pixel_x = 32 + }, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (EAST)"; + icon_state = "whitepurple"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cyR" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cyS" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cyT" = ( +/obj/machinery/door/airlock/glass_research{ + name = "Robotics Lab"; + req_access_txt = "29" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/whitepurple{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cyU" = ( +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cyV" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/whitepurple/corner{ + tag = "icon-whitepurplecorner (NORTH)"; + icon_state = "whitepurplecorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cyW" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cyX" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/whitepurple/corner{ + tag = "icon-whitepurplecorner (EAST)"; + icon_state = "whitepurplecorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cyY" = ( +/turf/open/floor/plasteel/darkpurple/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cyZ" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/darkpurple/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cza" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"czb" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"czc" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"czd" = ( +/turf/open/floor/plasteel/shuttle, +/area/shuttle/arrival) +"cze" = ( +/obj/structure/table, +/turf/open/floor/plasteel/shuttle, +/area/shuttle/arrival) +"czf" = ( +/obj/structure/frame/computer, +/turf/open/floor/plasteel/shuttle, +/area/shuttle/arrival) +"czg" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/space, +/area/hallway/secondary/entry) +"czh" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 9 + }, +/turf/open/floor/plasteel/whitepurple/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"czi" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/whitepurple/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"czj" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/whitepurple/corner{ + tag = "icon-whitepurplecorner (EAST)"; + icon_state = "whitepurplecorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"czk" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (NORTH)"; + icon_state = "whitepurple"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"czl" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (NORTHEAST)"; + icon_state = "whitepurple"; + dir = 5; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"czm" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"czn" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (WEST)"; + icon_state = "whitepurple"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"czo" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"czp" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/whitepurple/corner{ + tag = "icon-whitepurplecorner (EAST)"; + icon_state = "whitepurplecorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"czq" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (NORTH)"; + icon_state = "whitepurple"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"czr" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (NORTH)"; + icon_state = "whitepurple"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"czs" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (NORTH)"; + icon_state = "whitepurple"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"czt" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (NORTH)"; + icon_state = "whitepurple"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"czu" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/whitepurple/corner{ + tag = "icon-whitepurplecorner (NORTH)"; + icon_state = "whitepurplecorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"czv" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"czw" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"czx" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/noticeboard{ + pixel_y = 32 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"czy" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"czz" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/landmark/lightsout, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"czA" = ( +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"czB" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"czC" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 27; + pixel_y = 0 + }, +/turf/open/floor/plasteel/whitepurple/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"czD" = ( +/obj/machinery/shower{ + pixel_y = 24 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/curtain, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"czE" = ( +/obj/machinery/shower{ + pixel_y = 24 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/curtain, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"czF" = ( +/obj/structure/closet/l3closet/scientist, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"czG" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"czH" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/poddoor/preopen{ + id = "XenoPod1"; + name = "containment door 1" + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"czI" = ( +/obj/machinery/door/poddoor/preopen{ + id = "XenoPod1"; + name = "containment door 1" + }, +/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/window/northleft{ + req_access_txt = "55" + }, +/turf/open/floor/plasteel/purple{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"czJ" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/poddoor/preopen{ + id = "XenoPod1"; + name = "containment door 1" + }, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"czK" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/poddoor/preopen{ + id = "XenoPod2"; + name = "containment door 2" + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"czL" = ( +/obj/machinery/door/poddoor/preopen{ + id = "XenoPod2"; + name = "containment door 2" + }, +/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/window/northleft{ + req_access_txt = "55" + }, +/turf/open/floor/plasteel/purple{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"czM" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/poddoor/preopen{ + id = "XenoPod2"; + name = "containment door 2" + }, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"czN" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/poddoor/preopen{ + id = "XenoPod3"; + name = "containment door 3" + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"czO" = ( +/obj/machinery/door/poddoor/preopen{ + id = "XenoPod3"; + name = "containment door 3" + }, +/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/window/northleft{ + req_access_txt = "55" + }, +/turf/open/floor/plasteel/purple{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"czP" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/poddoor/preopen{ + id = "XenoPod3"; + name = "containment door 3" + }, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"czQ" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/poddoor/preopen{ + id = "XenoPod4"; + name = "containment door 4" + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"czR" = ( +/obj/machinery/door/poddoor/preopen{ + id = "XenoPod4"; + name = "containment door 4" + }, +/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/window/northleft{ + req_access_txt = "55" + }, +/turf/open/floor/plasteel/purple{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"czS" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/poddoor/preopen{ + id = "XenoPod4"; + name = "containment door 4" + }, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"czT" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"czU" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Aft Asteroid Maintenance"; + req_access_txt = "47" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"czV" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel/shuttle, +/area/shuttle/arrival) +"czW" = ( +/turf/open/floor/plasteel/shuttle/white, +/area/shuttle/arrival) +"czX" = ( +/obj/structure/chair/comfy{ + tag = "icon-comfychair (NORTH)"; + icon_state = "comfychair"; + dir = 1 + }, +/turf/open/floor/plasteel/shuttle/white, +/area/shuttle/arrival) +"czY" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/open/floor/plasteel/shuttle, +/area/shuttle/arrival) +"czZ" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cAa" = ( +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 8 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/closet/bombcloset, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cAb" = ( +/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, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (WEST)"; + icon_state = "whitepurple"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cAc" = ( +/obj/structure/chair/stool, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cAd" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/wrench, +/obj/item/weapon/screwdriver{ + pixel_y = 10 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cAe" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cAf" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (EAST)"; + icon_state = "whitepurple"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cAg" = ( +/obj/machinery/door/airlock/glass_research{ + name = "Toxins Lab"; + req_access_txt = "8" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/whitepurple{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cAh" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (WEST)"; + icon_state = "whitepurple"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cAi" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cAj" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cAk" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cAl" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cAm" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 8 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cAn" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cAo" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cAp" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cAq" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cAr" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/landmark/start/scientist, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cAs" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cAt" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cAu" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 8 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cAv" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cAw" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cAx" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (EAST)"; + icon_state = "whitepurple"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cAy" = ( +/obj/machinery/door/airlock/glass_research{ + name = "Decontamination Center"; + req_access_txt = "55" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/whitepurple{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cAz" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cAA" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cAB" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/structure/sign/xenobio{ + pixel_x = 32 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cAC" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/table, +/obj/machinery/button/door{ + id = "XenoPod1"; + name = "Containment Control 1" + }, +/obj/effect/turf_decal/stripes/end{ + tag = "icon-warn_end (NORTH)"; + icon_state = "warn_end"; + dir = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cAD" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/window/southleft{ + req_access_txt = "55" + }, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (NORTH)"; + icon_state = "whitepurple"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cAE" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/stripes/end{ + tag = "icon-warn_end (NORTH)"; + icon_state = "warn_end"; + dir = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cAF" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/table, +/obj/machinery/button/door{ + id = "XenoPod2"; + name = "Containment Control 2" + }, +/obj/effect/turf_decal/stripes/end{ + tag = "icon-warn_end (NORTH)"; + icon_state = "warn_end"; + dir = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cAG" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/table, +/obj/machinery/button/door{ + id = "XenoPod3"; + name = "Containment Control 3" + }, +/obj/effect/turf_decal/stripes/end{ + tag = "icon-warn_end (NORTH)"; + icon_state = "warn_end"; + dir = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cAH" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/table, +/obj/machinery/button/door{ + id = "XenoPod4"; + name = "Containment Control 4" + }, +/obj/effect/turf_decal/stripes/end{ + tag = "icon-warn_end (NORTH)"; + icon_state = "warn_end"; + dir = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cAI" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cAJ" = ( +/obj/structure/table, +/obj/item/stack/sheet/mineral/plasma, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/turf/open/floor/plasteel/whitepurple{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cAK" = ( +/turf/open/floor/plasteel/whitepurple{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cAL" = ( +/obj/structure/reagent_dispensers/watertank/high, +/turf/open/floor/plasteel/whitepurple{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cAM" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Docking Asteroid Hall 13"; + dir = 9; + icon_state = "camera"; + tag = "icon-camera (NORTHWEST)" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cAN" = ( +/obj/machinery/door/airlock/shuttle{ + name = "Cockpit" + }, +/turf/open/floor/plasteel/shuttle/white, +/area/shuttle/arrival) +"cAO" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/camera{ + c_tag = "Docking Asteroid Hall 11"; + dir = 4; + icon_state = "camera" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cAP" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cAQ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cAR" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Docking Asteroid Hall 9"; + dir = 9; + icon_state = "camera"; + tag = "icon-camera (NORTHWEST)" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cAS" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/camera{ + c_tag = "Docking Asteroid Hall 7"; + dir = 4; + icon_state = "camera" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cAT" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cAU" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cAV" = ( +/obj/structure/closet/bombcloset, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cAW" = ( +/obj/item/device/assembly/signaler{ + pixel_x = 0; + 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/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (SOUTHWEST)"; + icon_state = "whitepurple"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cAX" = ( +/obj/item/device/transfer_valve{ + pixel_x = -5 + }, +/obj/item/device/transfer_valve{ + pixel_x = -5 + }, +/obj/item/device/transfer_valve{ + pixel_x = 0 + }, +/obj/item/device/transfer_valve{ + pixel_x = 0 + }, +/obj/item/device/transfer_valve{ + pixel_x = 5 + }, +/obj/item/device/transfer_valve{ + pixel_x = 5 + }, +/obj/structure/table/reinforced, +/turf/open/floor/plasteel/whitepurple/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cAY" = ( +/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{ + pixel_x = 0; + pixel_y = 0 + }, +/obj/structure/table/reinforced, +/turf/open/floor/plasteel/whitepurple/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cAZ" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/tank_dispenser, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cBa" = ( +/obj/machinery/portable_atmospherics/pump, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cBb" = ( +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (EAST)"; + icon_state = "whitepurple"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cBc" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cBd" = ( +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (WEST)"; + icon_state = "whitepurple"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cBe" = ( +/obj/structure/sign/bluecross_2{ + pixel_x = -32; + pixel_y = -32 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cBf" = ( +/obj/machinery/power/apc{ + cell_type = 5000; + dir = 2; + name = "Science APC"; + pixel_y = -24 + }, +/obj/structure/cable/orange, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cBg" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/obj/machinery/camera{ + c_tag = "Research Western Wing"; + dir = 1; + icon_state = "camera"; + network = list("SS13") + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cBh" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/whitepurple/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cBi" = ( +/turf/open/floor/plasteel/whitepurple/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cBj" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/whitepurple/corner{ + tag = "icon-whitepurplecorner (WEST)"; + icon_state = "whitepurplecorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cBk" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cBl" = ( +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cBm" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cBn" = ( +/obj/machinery/camera{ + c_tag = "Research Eastern Wing"; + dir = 1; + icon_state = "camera"; + network = list("SS13") + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cBo" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + on = 1 + }, +/obj/machinery/newscaster{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cBp" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cBq" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/whitepurple/corner{ + tag = "icon-whitepurplecorner (EAST)"; + icon_state = "whitepurplecorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cBr" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cBs" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cBt" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cBu" = ( +/obj/machinery/door/airlock/glass_research{ + name = "Xenobiology"; + req_access_txt = "55" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/whitepurple{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cBv" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cBw" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cBx" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cBy" = ( +/obj/structure/sign/electricshock{ + pixel_y = 32 + }, +/obj/machinery/camera{ + c_tag = "Xenobiology 1"; + dir = 6; + icon_state = "camera"; + network = list("SS13","RD") + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cBz" = ( +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cBA" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cBB" = ( +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cBC" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/sign/electricshock{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cBD" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 2; + on = 1 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cBE" = ( +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (EAST)"; + icon_state = "whitepurple"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cBF" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel/whitepurple{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cBG" = ( +/obj/machinery/computer/camera_advanced/xenobio, +/turf/open/floor/plasteel/whitepurple{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cBH" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cBI" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cBJ" = ( +/obj/machinery/computer/arcade, +/turf/open/floor/plasteel/shuttle/white, +/area/shuttle/arrival) +"cBK" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plasteel/shuttle/white, +/area/shuttle/arrival) +"cBL" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/regular, +/turf/open/floor/plasteel/shuttle/white, +/area/shuttle/arrival) +"cBM" = ( +/obj/machinery/vending/cola, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cBN" = ( +/obj/machinery/vending/snack/random, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cBO" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cBP" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Aft Asteroid Maintenance"; + req_access_txt = "47" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cBQ" = ( +/obj/machinery/door/airlock/command{ + name = "Server Room"; + req_access = null; + req_access_txt = "30" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/server) +"cBR" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/server) +"cBS" = ( +/obj/structure/bed/roller, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/whitepurple/corner{ + tag = "icon-whitepurplecorner (WEST)"; + icon_state = "whitepurplecorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cBT" = ( +/turf/open/floor/plasteel/whitepurple/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cBU" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/storage) +"cBV" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/storage) +"cBW" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/storage) +"cBX" = ( +/obj/machinery/door/airlock/research{ + name = "Toxins Storage"; + req_access_txt = "8" + }, +/turf/open/floor/plasteel/whitepurple{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/storage) +"cBY" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/storage) +"cBZ" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/science) +"cCa" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/science) +"cCb" = ( +/obj/machinery/door/airlock/glass_security{ + name = "Security Office"; + req_access_txt = "63" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/science) +"cCc" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cCd" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cCe" = ( +/obj/structure/cable/orange{ + 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/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cCf" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cCg" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cCh" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cCi" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cCj" = ( +/obj/structure/cable/orange{ + 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/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cCk" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/landmark/lightsout, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cCl" = ( +/obj/machinery/monkey_recycler, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cCm" = ( +/obj/machinery/smartfridge/extract, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cCn" = ( +/obj/machinery/processor{ + desc = "A machine used to process slimes and retrieve their extract."; + name = "Slime Processor" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cCo" = ( +/obj/effect/landmark/start/scientist, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cCp" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/landmark/start/scientist, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cCq" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cCr" = ( +/obj/structure/table, +/obj/item/weapon/extinguisher, +/obj/item/weapon/extinguisher, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/open/floor/plasteel/whitepurple{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cCs" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "Xenobiology APC"; + pixel_x = -25 + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cCt" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cCu" = ( +/obj/machinery/door/airlock/shuttle, +/obj/structure/fans/tiny, +/turf/open/floor/plasteel/shuttle/white, +/area/shuttle/arrival) +"cCv" = ( +/obj/machinery/vending/cigarette, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cCw" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cCx" = ( +/obj/structure/shuttle/engine/propulsion{ + icon_state = "propulsion"; + dir = 4 + }, +/turf/closed/wall/mineral/titanium, +/area/shuttle/transport) +"cCy" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/transport) +"cCz" = ( +/obj/structure/window/shuttle, +/obj/structure/grille, +/turf/open/floor/plating, +/area/shuttle/transport) +"cCA" = ( +/obj/structure/grille, +/obj/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/transport) +"cCB" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cCC" = ( +/obj/machinery/light/small, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cCD" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 1 + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cCE" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "Toxins Lab APC"; + pixel_x = 0; + pixel_y = 25 + }, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cCF" = ( +/obj/machinery/r_n_d/server/core, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/server) +"cCG" = ( +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/server) +"cCH" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/server) +"cCI" = ( +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/server) +"cCJ" = ( +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/server) +"cCK" = ( +/obj/structure/bed/roller, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (WEST)"; + icon_state = "whitepurple"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cCL" = ( +/obj/machinery/iv_drip, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (EAST)"; + icon_state = "whitepurple"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cCM" = ( +/obj/machinery/portable_atmospherics/canister/toxins, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/storage) +"cCN" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/storage) +"cCO" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/storage) +"cCP" = ( +/obj/machinery/portable_atmospherics/scrubber/huge/movable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/storage) +"cCQ" = ( +/obj/machinery/portable_atmospherics/scrubber/huge/movable, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/storage) +"cCR" = ( +/obj/structure/table, +/obj/item/weapon/paper_bin, +/turf/open/floor/plasteel/red/side{ + tag = "icon-red (NORTHWEST)"; + icon_state = "red"; + dir = 9; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/science) +"cCS" = ( +/obj/structure/table, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/computer/security/telescreen{ + desc = "Used for watching the RD's goons from a (questionably) safe distance."; + name = "Research Monitor"; + network = list("RD") + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/science) +"cCT" = ( +/obj/structure/table, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/science) +"cCU" = ( +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/science) +"cCV" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = 32; + random_basetype = /obj/structure/sign/poster/official + }, +/turf/open/floor/plasteel/red/side{ + tag = "icon-red (NORTHEAST)"; + icon_state = "red"; + dir = 5; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/science) +"cCW" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cCX" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_y = 20 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cCY" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cCZ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cDa" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = -28; + pixel_y = 0 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cDb" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cDc" = ( +/obj/machinery/door/airlock/glass_research{ + name = "Xenobiology"; + req_access_txt = "55" + }, +/turf/open/floor/plasteel/whitepurple{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cDd" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cDe" = ( +/obj/machinery/light, +/obj/structure/sign/electricshock{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cDf" = ( +/obj/structure/sign/electricshock{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cDg" = ( +/obj/structure/sign/electricshock{ + pixel_y = -32 + }, +/obj/machinery/camera{ + c_tag = "Xenobiology 2"; + dir = 1; + icon_state = "camera"; + network = list("SS13","RD") + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cDh" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = -28; + pixel_y = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cDi" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/airalarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cDj" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel/shuttle, +/area/shuttle/arrival) +"cDk" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plasteel/shuttle, +/area/shuttle/arrival) +"cDl" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel/shuttle, +/area/shuttle/arrival) +"cDm" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/open/floor/plasteel/shuttle, +/area/shuttle/arrival) +"cDn" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/airalarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cDo" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = -28; + pixel_y = 0 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cDp" = ( +/turf/open/floor/mineral/titanium/blue, +/turf/closed/wall/mineral/titanium/interior, +/area/shuttle/transport) +"cDq" = ( +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/transport) +"cDr" = ( +/obj/machinery/computer/shuttle/ferry/request, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/transport) +"cDs" = ( +/obj/structure/chair, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/transport) +"cDt" = ( +/obj/structure/chair, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/transport) +"cDu" = ( +/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/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cDv" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cDw" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/server) +"cDx" = ( +/obj/machinery/door/airlock/glass_command{ + name = "Server Room"; + req_access_txt = "30" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/server) +"cDy" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/server) +"cDz" = ( +/obj/structure/chair/office/light, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/server) +"cDA" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/server) +"cDB" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/o2, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (SOUTHWEST)"; + icon_state = "whitepurple"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cDC" = ( +/obj/machinery/light, +/obj/item/weapon/reagent_containers/blood/random, +/obj/item/weapon/reagent_containers/blood/random, +/obj/item/weapon/reagent_containers/blood/random, +/obj/structure/closet/crate/freezer, +/turf/open/floor/plasteel/whitepurple/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cDD" = ( +/obj/machinery/iv_drip, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (SOUTHEAST)"; + icon_state = "whitepurple"; + dir = 6; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cDE" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/storage) +"cDF" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/storage) +"cDG" = ( +/obj/structure/table, +/obj/machinery/newscaster/security_unit{ + pixel_x = -28 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/science) +"cDH" = ( +/obj/structure/chair/office/dark{ + dir = 1 + }, +/obj/effect/landmark/start/depsec/science, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/science) +"cDI" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/science) +"cDJ" = ( +/obj/machinery/airalarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/science) +"cDK" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cDL" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cDM" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cDN" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cDO" = ( +/obj/machinery/door/airlock/glass_research{ + name = "Testing Lab"; + req_access_txt = "55" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cDP" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cDQ" = ( +/obj/structure/sign/xenobio{ + pixel_x = 32 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cDR" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/table, +/obj/machinery/button/door{ + id = "XenoPod5"; + name = "Containment Control 5" + }, +/obj/effect/turf_decal/stripes/end, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cDS" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/window/northleft{ + req_access_txt = "55" + }, +/turf/open/floor/plasteel/whitepurple/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cDT" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/stripes/end, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cDU" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/table, +/obj/machinery/button/door{ + id = "XenoPod6"; + name = "Containment Control 6" + }, +/obj/effect/turf_decal/stripes/end, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cDV" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/table, +/obj/machinery/button/door{ + id = "XenoPod7"; + name = "Containment Control 7" + }, +/obj/effect/turf_decal/stripes/end, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cDW" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/table, +/obj/machinery/button/door{ + id = "XenoPod8"; + name = "Containment Control 8" + }, +/obj/effect/turf_decal/stripes/end, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cDX" = ( +/obj/structure/table, +/obj/machinery/reagentgrinder, +/turf/open/floor/plasteel/whitepurple{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cDY" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/beakers, +/obj/item/weapon/storage/box/syringes, +/obj/item/weapon/storage/box/monkeycubes, +/obj/item/weapon/storage/box/monkeycubes, +/turf/open/floor/plasteel/whitepurple{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cDZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cEa" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cEb" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cEc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cEd" = ( +/obj/machinery/door/airlock/shuttle, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/transport) +"cEe" = ( +/obj/machinery/door/airlock/shuttle, +/obj/docking_port/mobile{ + dir = 8; + dwidth = 2; + height = 12; + id = "ferry"; + name = "ferry shuttle"; + port_angle = 0; + preferred_direction = 4; + roundstart_move = "ferry_away"; + width = 5 + }, +/obj/docking_port/stationary{ + dir = 8; + dwidth = 2; + height = 12; + id = "ferry_home"; + name = "port bay 2"; + turf_type = /turf/open/space; + width = 5 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/transport) +"cEf" = ( +/obj/machinery/r_n_d/server/robotics, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/server) +"cEg" = ( +/obj/machinery/camera{ + c_tag = "Research Server Room"; + dir = 1; + icon_state = "camera"; + network = list("SS13","RD") + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/server) +"cEh" = ( +/obj/machinery/computer/rdservercontrol, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/server) +"cEi" = ( +/obj/structure/table, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/server) +"cEj" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/storage) +"cEk" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/machinery/camera{ + c_tag = "Toxins Storage"; + dir = 9; + icon_state = "camera"; + network = list("SS13","RD"); + tag = "icon-camera (NORTHWEST)" + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/storage) +"cEl" = ( +/obj/machinery/computer/secure_data, +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -28 + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/science) +"cEm" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + on = 1 + }, +/obj/machinery/camera{ + c_tag = "Research Security Checkpoint"; + dir = 1; + icon_state = "camera"; + network = list("SS13") + }, +/turf/open/floor/plasteel/red/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/science) +"cEn" = ( +/obj/machinery/light, +/obj/structure/reagent_dispensers/peppertank{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/red/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/science) +"cEo" = ( +/obj/structure/closet/secure_closet/security/engine, +/obj/machinery/power/apc{ + cell_type = 5000; + dir = 2; + name = "Science Security Checkpoint APC"; + pixel_y = -24 + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plasteel/red/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/science) +"cEp" = ( +/obj/structure/filingcabinet, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 6; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/science) +"cEq" = ( +/obj/machinery/portable_atmospherics/scrubber, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cEr" = ( +/obj/machinery/portable_atmospherics/pump, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cEs" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cEt" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cEu" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/obj/structure/sign/map/left/ceres{ + pixel_x = 32 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cEv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/suit_storage_unit/rd, +/obj/machinery/door/window/brigdoor/northleft{ + name = "Research Director's Hardsuit"; + req_access_txt = "30" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cEw" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/poddoor/preopen{ + id = "XenoPod5"; + name = "containment door 5" + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cEx" = ( +/obj/machinery/door/poddoor/preopen{ + id = "XenoPod5"; + name = "containment door 5" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/door/window/southleft{ + req_access_txt = "55" + }, +/turf/open/floor/plasteel/purple{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cEy" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/poddoor/preopen{ + id = "XenoPod5"; + name = "containment door 5" + }, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cEz" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/poddoor/preopen{ + id = "XenoPod6"; + name = "containment door 6" + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cEA" = ( +/obj/machinery/door/poddoor/preopen{ + id = "XenoPod6"; + name = "containment door 6" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/door/window/southleft{ + req_access_txt = "55" + }, +/turf/open/floor/plasteel/purple{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cEB" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/poddoor/preopen{ + id = "XenoPod6"; + name = "containment door 6" + }, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cEC" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/poddoor/preopen{ + id = "XenoPod7"; + name = "containment door 7" + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cED" = ( +/obj/machinery/door/poddoor/preopen{ + id = "XenoPod7"; + name = "containment door 7" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/door/window/southleft{ + req_access_txt = "55" + }, +/turf/open/floor/plasteel/purple{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cEE" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/poddoor/preopen{ + id = "XenoPod7"; + name = "containment door 7" + }, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cEF" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cEG" = ( +/obj/machinery/door/poddoor/preopen{ + id = "XenoPod8"; + name = "containment door 8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/door/window/southleft{ + req_access_txt = "55" + }, +/turf/open/floor/plasteel/purple{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cEH" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cEI" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cEJ" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research{ + name = "Kill Chamber"; + req_access_txt = "55" + }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cEK" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/closed/mineral, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cEL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cEM" = ( +/obj/structure/closet/crate, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/transport) +"cEN" = ( +/obj/structure/closet/crate, +/obj/machinery/light, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/transport) +"cEO" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/transport) +"cEP" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/light, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/transport) +"cEQ" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/item/device/assembly/mousetrap/armed, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cER" = ( +/obj/structure/closet/crate, +/obj/item/weapon/storage/bag/ore, +/obj/item/weapon/pickaxe/emergency, +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cES" = ( +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/storage) +"cET" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cEU" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cEV" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -32 + }, +/obj/structure/closet/crate/bin, +/obj/item/weapon/book/manual/wiki/telescience, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cEW" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cEX" = ( +/obj/structure/rack, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cEY" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/darkpurple/side{ + tag = "icon-darkpurple (NORTH)"; + icon_state = "darkpurple"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cEZ" = ( +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless; + initial_gas_mix = "n2=500;TEMP=80"; + name = "Killroom Floor" + }, +/area/toxins/xenobiology) +"cFa" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cFb" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cFc" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cFd" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cFe" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cFf" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cFg" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "RnD Server APC"; + pixel_x = 0; + pixel_y = 25 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/server) +"cFh" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/structure/grille, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cFi" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/obj/machinery/airalarm{ + dir = 1; + icon_state = "alarm0"; + pixel_y = -22 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/storage) +"cFj" = ( +/obj/machinery/light, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/storage) +"cFk" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/storage) +"cFl" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cFm" = ( +/obj/machinery/shieldwallgen{ + req_access = list(55) + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cFn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cFo" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/obj/structure/chair/stool, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cFp" = ( +/obj/machinery/airalarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, +/obj/structure/table, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/item/weapon/storage/toolbox/electrical{ + pixel_x = -4; + pixel_x = 1; + pixel_y = 5 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cFq" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/obj/machinery/camera{ + c_tag = "Xenobiology Killroom"; + dir = 1; + icon_state = "camera"; + network = list("SS13","RD") + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless; + initial_gas_mix = "n2=500;TEMP=80"; + name = "Killroom Floor" + }, +/area/toxins/xenobiology) +"cFr" = ( +/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 1 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless; + initial_gas_mix = "n2=500;TEMP=80"; + name = "Killroom Floor" + }, +/area/toxins/xenobiology) +"cFs" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless; + initial_gas_mix = "n2=500;TEMP=80"; + name = "Killroom Floor" + }, +/area/toxins/xenobiology) +"cFt" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cFu" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cFv" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cFw" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cFx" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cFy" = ( +/obj/structure/table, +/obj/item/weapon/wrench, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cFz" = ( +/obj/effect/landmark/lightsout, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cFA" = ( +/obj/effect/landmark/start/scientist, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cFB" = ( +/obj/structure/table, +/obj/item/stack/packageWrap, +/obj/item/device/destTagger, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cFC" = ( +/obj/machinery/light/small, +/turf/open/floor/plasteel/darkpurple/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cFD" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/disposaloutlet{ + dir = 8 + }, +/turf/open/floor/plasteel/darkpurple/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cFE" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cFF" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cFG" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cFH" = ( +/obj/machinery/light/small, +/obj/structure/closet/firecloset/full, +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cFI" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cFJ" = ( +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "Toxins Storage APC"; + pixel_x = 0; + pixel_y = 25 + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/storage) +"cFK" = ( +/obj/structure/disposaloutlet{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cFL" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cFM" = ( +/obj/structure/window/reinforced, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cFN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/window{ + dir = 8; + icon_state = "right"; + name = "Research Delievery Chute"; + opacity = 1; + req_access_txt = "55"; + tag = "icon-right (WEST)" + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cFO" = ( +/obj/structure/disposalpipe/trunk, +/obj/structure/disposaloutlet{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cFP" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ + target_temperature = 80; + dir = 2; + on = 1 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cFQ" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cFR" = ( +/obj/structure/closet/emcloset, +/obj/machinery/camera{ + c_tag = "Docking Asteroid Hall 14"; + dir = 4; + icon_state = "camera" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cFS" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + on = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cFT" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cFU" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/camera{ + c_tag = "Docking Asteroid Hall 12"; + dir = 9; + icon_state = "camera"; + tag = "icon-camera (NORTHWEST)" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cFV" = ( +/obj/structure/closet/emcloset, +/obj/machinery/camera{ + c_tag = "Docking Asteroid Hall 10"; + dir = 4; + icon_state = "camera" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cFW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cFX" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/camera{ + c_tag = "Docking Asteroid Hall 8"; + dir = 9; + icon_state = "camera"; + tag = "icon-camera (NORTHWEST)" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cFY" = ( +/turf/closed/mineral, +/area/hallway/secondary/entry) +"cFZ" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cGa" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/r_n_d/experimentor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cGb" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/window/westleft{ + name = "Containment Pen"; + req_access_txt = "55" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cGc" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/window/eastleft{ + name = "Containment Pen"; + req_access_txt = "55" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cGd" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cGe" = ( +/obj/machinery/autolathe, +/obj/structure/window/reinforced{ + dir = 1; + layer = 2.9 + }, +/obj/machinery/camera{ + c_tag = "Testing Lab"; + dir = 9; + icon_state = "camera"; + network = list("SS13","RD"); + tag = "icon-camera (NORTHWEST)" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cGf" = ( +/obj/structure/plasticflaps, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cGg" = ( +/obj/structure/rack, +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cGh" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 5 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cGi" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 9 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cGj" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cGk" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cGl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cGm" = ( +/obj/structure/closet/wardrobe/mixed, +/turf/open/floor/plasteel/shuttle/white, +/area/shuttle/arrival) +"cGn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/effect/landmark/blobstart, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cGo" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cGp" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cGq" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Aft Disposals Maintenance"; + req_access_txt = "12" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cGr" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 8 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cGs" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cGt" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cGu" = ( +/obj/machinery/light/small, +/turf/open/floor/plating/asteroid, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cGv" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cGw" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cGx" = ( +/obj/structure/window/reinforced{ + dir = 1; + layer = 2.9 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/computer/rdconsole/experiment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cGy" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + on = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cGz" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/structure/rack, +/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/sheet/glass/fifty, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cGA" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/closet/firecloset/full, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cGB" = ( +/obj/machinery/door/airlock/shuttle{ + name = "Engines" + }, +/turf/open/floor/plating, +/area/shuttle/arrival) +"cGC" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cGD" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cGE" = ( +/turf/open/floor/plating/asteroid, +/area/hallway/secondary/entry) +"cGF" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cGG" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cGH" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cGI" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cGJ" = ( +/obj/structure/table, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cGK" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Injector Toggle"; + on = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cGL" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + icon_state = "connector_map"; + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cGM" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cGN" = ( +/obj/structure/filingcabinet/chestdrawer, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cGO" = ( +/obj/structure/shuttle/engine/heater, +/obj/structure/window/reinforced, +/turf/open/floor/plating, +/area/shuttle/arrival) +"cGP" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cGQ" = ( +/obj/structure/grille/broken, +/turf/open/floor/plating/asteroid, +/area/hallway/secondary/entry) +"cGR" = ( +/turf/closed/wall, +/area/maintenance/disposal{ + name = "South-Western External Waste Belt" + }) +"cGS" = ( +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/deliveryChute{ + tag = "icon-intake (NORTH)"; + icon_state = "intake"; + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/maintenance/disposal{ + name = "South-Western External Waste Belt" + }) +"cGT" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "Research Asteroid" + }) +"cGU" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/grille, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cGV" = ( +/obj/effect/spawner/lootdrop/two_percent_xeno_egg_spawner, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cGW" = ( +/obj/machinery/shieldwallgen{ + req_access = list(55) + }, +/obj/structure/cable/orange, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cGX" = ( +/obj/item/device/radio/intercom{ + broadcasting = 0; + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -28 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cGY" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cGZ" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cHa" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cHb" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cHc" = ( +/obj/structure/barricade/wooden, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cHd" = ( +/obj/structure/shuttle/engine/propulsion{ + name = "shuttle engine" + }, +/turf/open/floor/plating/airless, +/area/shuttle/arrival) +"cHe" = ( +/obj/docking_port/stationary{ + dir = 1; + dwidth = 4; + height = 17; + id = "arrivals_stationary"; + name = "arrivals"; + width = 9 + }, +/obj/docking_port/mobile/arrivals{ + dir = 1; + dwidth = 4; + height = 17; + width = 9 + }, +/turf/closed/wall/mineral/titanium, +/area/shuttle/arrival) +"cHf" = ( +/turf/closed/wall, +/area/maintenance/disposal{ + name = "South-Eastern External Waste Belt" + }) +"cHg" = ( +/obj/structure/disposaloutlet{ + icon_state = "outlet"; + dir = 1 + }, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/plating/airless, +/area/maintenance/disposal{ + name = "South-Eastern External Waste Belt" + }) +"cHh" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall, +/area/maintenance/disposal{ + name = "South-Western External Waste Belt" + }) +"cHi" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/item/device/assembly/mousetrap/armed, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cHj" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Aft Asteroid Maintenance"; + req_access_txt = "47" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cHk" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cHl" = ( +/obj/structure/girder, +/obj/structure/grille, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cHm" = ( +/turf/closed/wall, +/area/hallway/secondary/entry) +"cHn" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cHo" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall/rust, +/area/maintenance/disposal{ + name = "South-Eastern External Waste Belt" + }) +"cHp" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/disposaloutlet, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "South-Western External Waste Belt" + }) +"cHq" = ( +/turf/closed/wall/rust, +/area/maintenance/disposal{ + name = "South-Western External Waste Belt" + }) +"cHr" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cHs" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 1 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cHt" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "Testing Lab APC"; + pixel_x = 0; + pixel_y = 25 + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cHu" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/item/device/assembly/mousetrap/armed, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cHv" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cHw" = ( +/obj/structure/girder, +/obj/structure/grille, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cHx" = ( +/obj/machinery/hydroponics/soil, +/obj/item/seeds/poppy, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cHy" = ( +/obj/machinery/light/small, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cHz" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cHA" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/space, +/area/space) +"cHB" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/space, +/area/space) +"cHC" = ( +/turf/closed/wall/rust, +/area/maintenance/disposal{ + name = "South-Eastern External Waste Belt" + }) +"cHD" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "South-Eastern External Waste Belt APC"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/obj/effect/turf_decal/stripes/end, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "South-Eastern External Waste Belt" + }) +"cHE" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/rack, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/weapon/wirecutters, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/disposal{ + name = "South-Eastern External Waste Belt" + }) +"cHF" = ( +/obj/machinery/disposal/deliveryChute, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "South-Eastern External Waste Belt" + }) +"cHG" = ( +/obj/machinery/conveyor/auto, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "South-Western External Waste Belt" + }) +"cHH" = ( +/obj/structure/rack, +/obj/item/clothing/mask/breath, +/obj/item/weapon/tank/internals/emergency_oxygen, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/disposal{ + name = "South-Western External Waste Belt" + }) +"cHI" = ( +/obj/effect/turf_decal/stripes/end, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "South-Western External Waste Belt APC"; + pixel_x = 0; + pixel_y = 24 + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "South-Western External Waste Belt" + }) +"cHJ" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/asteroid/line, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cHK" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/turf_decal/stripes/asteroid/line, +/obj/item/device/assembly/mousetrap/armed, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cHL" = ( +/obj/structure/closet, +/obj/item/seeds/random, +/obj/item/seeds/chili, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cHM" = ( +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cHN" = ( +/obj/machinery/hydroponics/soil, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cHO" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "South-Eastern External Waste Belt" + }) +"cHP" = ( +/obj/machinery/light/small, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "South-Eastern External Waste Belt" + }) +"cHQ" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/disposal{ + name = "South-Eastern External Waste Belt" + }) +"cHR" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/disposal{ + name = "South-Eastern External Waste Belt" + }) +"cHS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/disposal{ + name = "South-Eastern External Waste Belt" + }) +"cHT" = ( +/obj/machinery/conveyor/auto{ + icon_state = "conveyor0"; + dir = 1 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "South-Eastern External Waste Belt" + }) +"cHU" = ( +/obj/machinery/conveyor/auto, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "South-Western External Waste Belt" + }) +"cHV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/disposal{ + name = "South-Western External Waste Belt" + }) +"cHW" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/disposal{ + name = "South-Western External Waste Belt" + }) +"cHX" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/disposal{ + name = "South-Western External Waste Belt" + }) +"cHY" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/maintenance{ + name = "Aft Asteroid Maintenance"; + req_access_txt = "12" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cHZ" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/maintenance{ + name = "Aft Asteroid Maintenance"; + req_access_txt = "12" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cIa" = ( +/obj/structure/girder, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cIb" = ( +/obj/structure/table, +/obj/item/weapon/cultivator, +/obj/item/seeds/banana, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cIc" = ( +/obj/structure/grille, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cId" = ( +/obj/machinery/hydroponics/soil, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cIe" = ( +/obj/structure/grille/broken, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "South-Eastern External Waste Belt" + }) +"cIf" = ( +/obj/effect/turf_decal/stripes/line, +/obj/item/weapon/wrench, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/disposal{ + name = "South-Eastern External Waste Belt" + }) +"cIg" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/disposal{ + name = "South-Eastern External Waste Belt" + }) +"cIh" = ( +/obj/machinery/conveyor/auto{ + icon_state = "conveyor0"; + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "South-Eastern External Waste Belt" + }) +"cIi" = ( +/obj/machinery/conveyor/auto{ + dir = 9; + icon_state = "conveyor0"; + verted = -1 + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "South-Western External Waste Belt" + }) +"cIj" = ( +/obj/machinery/conveyor/auto{ + tag = "icon-conveyor0 (SOUTHEAST)"; + icon_state = "conveyor0"; + dir = 6 + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "South-Western External Waste Belt" + }) +"cIk" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/disposal{ + name = "South-Western External Waste Belt" + }) +"cIl" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "South-Western External Waste Belt" + }) +"cIm" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "South-Western External Waste Belt" + }) +"cIn" = ( +/obj/machinery/light/small, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "South-Western External Waste Belt" + }) +"cIo" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cIp" = ( +/obj/machinery/light/small, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cIq" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cIr" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/girder, +/obj/structure/grille, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cIs" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cIt" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cIu" = ( +/obj/structure/rack, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cIv" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cIw" = ( +/obj/structure/table, +/obj/item/weapon/weldingtool/mini, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/disposal{ + name = "South-Eastern External Waste Belt" + }) +"cIx" = ( +/obj/item/chair, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/disposal{ + name = "South-Eastern External Waste Belt" + }) +"cIy" = ( +/obj/machinery/conveyor/auto{ + tag = "icon-conveyor0 (NORTHEAST)"; + icon_state = "conveyor0"; + dir = 5 + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "South-Eastern External Waste Belt" + }) +"cIz" = ( +/obj/machinery/conveyor/auto{ + tag = "icon-conveyor0 (EAST)"; + icon_state = "conveyor0"; + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "South-Eastern External Waste Belt" + }) +"cIA" = ( +/obj/machinery/conveyor/auto{ + dir = 10; + icon_state = "conveyor0"; + tag = "icon-conveyor0 (SOUTHWEST)"; + verted = -1 + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "South-Eastern External Waste Belt" + }) +"cIB" = ( +/obj/machinery/conveyor/auto{ + tag = "icon-conveyor0 (EAST)"; + icon_state = "conveyor0"; + dir = 4 + }, +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = 0; + pixel_y = -32; + random_basetype = /obj/structure/sign/poster/official + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "South-Western External Waste Belt" + }) +"cIC" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cID" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/girder, +/obj/structure/grille, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cIE" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/item/weapon/wrench, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cIF" = ( +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j2"; + dir = 1 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cIG" = ( +/obj/structure/girder, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cIH" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "South-Eastern External Waste Belt" + }) +"cII" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/disposal{ + name = "South-Eastern External Waste Belt" + }) +"cIJ" = ( +/obj/machinery/light/small, +/obj/machinery/conveyor/auto{ + dir = 9; + icon_state = "conveyor0"; + verted = -1 + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "South-Western External Waste Belt" + }) +"cIK" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/deliveryChute{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "South-Western External Waste Belt" + }) +"cIL" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall, +/area/maintenance/disposal{ + name = "South-Western External Waste Belt" + }) +"cIM" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/disposaloutlet{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/maintenance/disposal{ + name = "South-Western External Waste Belt" + }) +"cIN" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/deliveryChute{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cIO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cIP" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cIQ" = ( +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cIR" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 4; + icon_state = "pipe-j2s"; + name = "disposal pipe - Research"; + sortType = 12 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cIS" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 4; + icon_state = "pipe-j2s"; + name = "disposal pipe - Robotics"; + sortType = 14 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cIT" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cIU" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cIV" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cIW" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/disposaloutlet{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cIX" = ( +/obj/machinery/disposal/deliveryChute{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/maintenance/disposal{ + name = "South-Eastern External Waste Belt" + }) +"cIY" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall, +/area/maintenance/disposal{ + name = "South-Eastern External Waste Belt" + }) +"cIZ" = ( +/obj/structure/disposaloutlet{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "South-Eastern External Waste Belt" + }) +"cJa" = ( +/obj/machinery/conveyor/auto{ + tag = "icon-conveyor0 (EAST)"; + icon_state = "conveyor0"; + dir = 4 + }, +/obj/machinery/light/small, +/turf/open/floor/plating, +/area/maintenance/disposal{ + name = "South-Eastern External Waste Belt" + }) +"cJb" = ( +/obj/structure/window/reinforced/fulltile, +/obj/structure/grille, +/turf/open/floor/plating, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cJc" = ( +/obj/structure/table, +/obj/item/weapon/storage/fancy/cigarettes, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cJd" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cJe" = ( +/obj/structure/closet/firecloset/full, +/obj/item/weapon/coin/silver, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cJf" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cJg" = ( +/obj/structure/table, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cJh" = ( +/obj/docking_port/stationary{ + dheight = 9; + dir = 2; + dwidth = 5; + height = 24; + id = "syndicate_s"; + name = "south of station"; + turf_type = /turf/open/space; + width = 18 + }, +/turf/open/space, +/area/space) +"cJi" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"cJj" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"cJk" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"cJl" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"cJm" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"cJn" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"cJo" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"cJp" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"cJq" = ( +/obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"cJr" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"cJs" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"cJt" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/ai_status_display, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"cJu" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"cJv" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"cJw" = ( +/obj/machinery/newscaster/security_unit{ + pixel_x = 32 + }, +/turf/open/floor/carpet{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"cJx" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"cJy" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"cJz" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/disposaloutlet, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"cJA" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"cJB" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/structure/plasticflaps, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"cJC" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + dir = 8; + freq = 1400; + location = "Brig" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"cJD" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/window/brigdoor/southleft{ + name = "Armory Delievery Chute"; + req_access_txt = "3" + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"cJE" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"cJF" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/captain) +"cJG" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"cJH" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"cJI" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/sleep_female) +"cJJ" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"cJK" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"cJL" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"cJM" = ( +/obj/structure/sign/poster/random{ + name = "random contraband poster"; + pixel_x = 32; + random_basetype = /obj/structure/sign/poster/contraband + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"cJN" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"cJO" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/bridge) +"cJP" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"cJQ" = ( +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"cJR" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"cJS" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/courtroom) +"cJT" = ( +/obj/structure/table, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cJU" = ( +/obj/machinery/holopad, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cJV" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"cJW" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"cJX" = ( +/obj/structure/bed, +/obj/structure/sign/poster/official/work_for_a_future{ + pixel_x = -32 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cJY" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cJZ" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"cKa" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/door/poddoor/preopen{ + id = "frontbrig"; + name = "Emergency External Blast Doors" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cKb" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=CommandWest"; + location = "Security"; + name = "navigation beacon (Security)" + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cKc" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cKd" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=Service"; + location = "CommandWest"; + name = "navigation beacon (Command-West)" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cKe" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cKf" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter{ + name = "Security Quantum Pad" + }) +"cKg" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/circuit, +/area/ai_monitored/nuke_storage) +"cKh" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + on = 1 + }, +/turf/open/floor/circuit, +/area/ai_monitored/nuke_storage) +"cKi" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cKj" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"cKk" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"cKl" = ( +/obj/machinery/hydroponics/soil, +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = 32; + random_basetype = /obj/structure/sign/poster/official + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"cKm" = ( +/obj/machinery/hydroponics/soil, +/obj/machinery/newscaster{ + pixel_y = -32 + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"cKn" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/bar) +"cKo" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"cKp" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cKq" = ( +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=EngineeringWest2"; + location = "EngineeringWest"; + name = "navigation beacon (Engineering-West)" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cKr" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cKs" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = 0; + pixel_y = -32; + random_basetype = /obj/structure/sign/poster/official + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"cKt" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/machinery/newscaster{ + pixel_x = 28 + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"cKu" = ( +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=EngineeringMiddle2"; + location = "EngineeringWest3"; + name = "navigation beacon (Engineering-West 3)" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cKv" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"cKw" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"cKx" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"cKy" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=Medbay2"; + location = "Medbay"; + name = "navigation beacon (Medbay)" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cKz" = ( +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=Cargo"; + location = "Medbay2"; + name = "navigation beacon (Medbay-2)" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cKA" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"cKB" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"cKC" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cKD" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cKE" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cKF" = ( +/turf/open/space/basic, +/area/space) +"cKG" = ( +/turf/open/space/basic, +/area/space) +"cKH" = ( +/turf/open/space/basic, +/area/space) +"cKI" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"cKJ" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"cKK" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"cKL" = ( +/turf/open/space/basic, +/area/space) +"cKM" = ( +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=Research"; + location = "Service"; + name = "navigation beacon (Service)" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cKN" = ( +/turf/open/space/basic, +/area/space) +"cKO" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cKP" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics_cloning) +"cKQ" = ( +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + dir = 8; + freq = 1400; + location = "Hydroponics" + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"cKR" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/plasticflaps, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"cKS" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/storage/primary) +"cKT" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/chemistry) +"cKU" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"cKV" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/obj/machinery/ai_status_display, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cKW" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/structure/closet/secure_closet/medical3, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"cKX" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/window/southleft{ + name = "Medbay Mail Chute"; + req_access_txt = "45" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"cKY" = ( +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=4"; + dir = 4; + freq = 1400; + location = "Medbay" + }, +/obj/machinery/door/window/eastleft{ + req_access_txt = "45" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"cKZ" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"cLa" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cLb" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 24 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cLc" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + dir = 8; + freq = 1400; + location = "Engineering" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"cLd" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cLe" = ( +/obj/structure/plasticflaps, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engine_smes) +"cLf" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cLg" = ( +/obj/machinery/ai_status_display, +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"cLh" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"cLi" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "Chapel Office APC"; + pixel_x = -23; + pixel_y = 2 + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"cLj" = ( +/obj/machinery/door/window/westleft{ + req_access_txt = "22" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/office) +"cLk" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 24 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cLl" = ( +/obj/structure/plasticflaps{ + name = "Officer Beepsky's Home" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cLm" = ( +/obj/structure/bed/dogbed, +/mob/living/simple_animal/bot/secbot/beepsky/jr, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cLn" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'WARNING: FUN-SIZED JUSTICE'."; + name = "WARNING: FUN-SIZED JUSTICE"; + pixel_x = -32; + pixel_y = 0 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cLo" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"cLp" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cLq" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/machinery/newscaster{ + pixel_x = -28 + }, +/turf/open/floor/plasteel/escape{ + tag = "icon-escape (WEST)"; + icon_state = "escape"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"cLr" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"cLs" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cLt" = ( +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=ArrivalsWest"; + location = "Research"; + name = "navigation beacon (Research)" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cLu" = ( +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=Departures"; + location = "ArrivalsWest"; + name = "navigation beacon (Arrivals-West)" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cLv" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 24 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"cLw" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cLx" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cLy" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cLz" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=ArrivalsMiddle"; + location = "Departures"; + name = "navigation beacon (Departures)" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cLA" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/newscaster{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/arrival{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cLB" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cLC" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cLD" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cLE" = ( +/obj/machinery/newscaster{ + pixel_x = -28; + pixel_y = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cLF" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall/mineral/titanium, +/area/shuttle/arrival) +"cLG" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall/mineral/titanium, +/area/shuttle/arrival) +"cLH" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall/mineral/titanium, +/area/shuttle/arrival) +"cLI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cLJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cLK" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall/mineral/titanium, +/area/shuttle/arrival) +"cLL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cLM" = ( +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + dir = 8; + freq = 1400; + location = "Science" + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cLN" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cLO" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall/mineral/titanium, +/area/shuttle/arrival) +"cLP" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall/mineral/titanium, +/area/shuttle/arrival) +"cLQ" = ( +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/effect/landmark/start/warden, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"cLR" = ( +/obj/structure/chair/office/light{ + dir = 8 + }, +/obj/effect/landmark/start/warden, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/warden) +"cLS" = ( +/obj/structure/chair/stool, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"cLT" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"cLU" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"cLV" = ( +/obj/effect/landmark/start/security_officer, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"cLW" = ( +/obj/effect/landmark/start/security_officer, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"cLX" = ( +/obj/effect/landmark/start/security_officer, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"cLY" = ( +/obj/structure/chair/stool, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/locker) +"cLZ" = ( +/obj/effect/landmark/start/security_officer, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"cMa" = ( +/obj/effect/landmark/start/security_officer, +/turf/open/floor/plasteel/showroomfloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/main) +"cMb" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"cMc" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet) +"cMd" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet) +"cMe" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet) +"cMf" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/courtroom) +"cMg" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet) +"cMh" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet) +"cMi" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/courtroom) +"cMj" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/landmark/start/lawyer, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/lawoffice) +"cMk" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cMl" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cMm" = ( +/obj/effect/landmark/start/janitor, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"cMn" = ( +/obj/structure/chair/stool, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"cMo" = ( +/obj/structure/chair/stool, +/obj/effect/landmark/start/assistant, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"cMp" = ( +/obj/effect/landmark/start/medical_doctor, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/surgery) +"cMq" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/landmark/start/medical_doctor, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"cMr" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"cMs" = ( +/obj/effect/landmark/start/botanist, +/turf/open/floor/plasteel/hydrofloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"cMt" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/landmark/start/botanist, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"cMu" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/landmark/start/botanist, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"cMv" = ( +/obj/effect/landmark/start/botanist, +/turf/open/floor/plasteel/hydrofloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"cMw" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cMx" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cMy" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cMz" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/effect/landmark/start/station_engineer, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"cMA" = ( +/obj/structure/stacklifter, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"cMB" = ( +/obj/structure/chair/comfy/black{ + tag = "icon-comfychair (NORTH)"; + icon_state = "comfychair"; + dir = 1 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library{ + name = "Lounge" + }) +"cMC" = ( +/obj/effect/landmark/start/station_engineer, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/engineering) +"cMD" = ( +/obj/effect/landmark/start/medical_doctor, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"cME" = ( +/obj/structure/weightlifter, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/fitness) +"cMF" = ( +/obj/effect/landmark/start/atmospheric_technician, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"cMG" = ( +/obj/structure/chair/comfy/brown{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel/grimy{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"cMH" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cMI" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cMJ" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cMK" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cML" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"cMM" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cMN" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cMO" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cMP" = ( +/obj/machinery/droneDispenser/preloaded, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cMQ" = ( +/obj/structure/rack, +/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/sheet/metal/fifty, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cMR" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cMS" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cMT" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cMU" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cMV" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cMW" = ( +/obj/structure/rack, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cMX" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cMY" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cMZ" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cNa" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"cNb" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cNc" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Maintenance Drone Dispensery"; + req_access_txt = "12" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cNd" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cNe" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cNf" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cNg" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cNh" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cNi" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cNj" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cNk" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cNl" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cNm" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel/escape{ + tag = "icon-escape (WEST)"; + icon_state = "escape"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/exit) +"cNn" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cNo" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; + tag = "" + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cNp" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cNq" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/purple/corner{ + tag = "icon-purplecorner (WEST)"; + icon_state = "purplecorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cNr" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cNs" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/landmark/start/roboticist, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cNt" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/landmark/start/scientist, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/xenobiology) +"cNu" = ( +/obj/effect/landmark/start/scientist, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cNv" = ( +/obj/effect/landmark/start/scientist, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cNw" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/red/corner{ + icon_state = "redcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cNx" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cNy" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cNz" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cNA" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cNB" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/red/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cNC" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cND" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cNE" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cNF" = ( +/obj/machinery/door/airlock/glass_security{ + cyclelinkeddir = 2; + id_tag = "innerbrig"; + name = "Brig"; + req_access_txt = "0"; + req_one_access_txt = "38;63" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (WEST)"; + icon_state = "redcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cNG" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (WEST)"; + icon_state = "redcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cNH" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cNI" = ( +/obj/structure/table, +/obj/item/weapon/storage/fancy/donut_box, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cNJ" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cNK" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/door/window/brigdoor{ + name = "Holding Cell"; + req_access_txt = "2" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cNL" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cNM" = ( +/obj/machinery/door/airlock/glass_security{ + cyclelinkeddir = 2; + id_tag = "innerbrig"; + name = "Brig"; + req_access_txt = "0"; + req_one_access_txt = "38;63" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (WEST)"; + icon_state = "redcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cNN" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "frontbrig"; + name = "Emergency External Blast Doors" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cNO" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "frontbrig"; + name = "Emergency External Blast Doors" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cNP" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1; + on = 1 + }, +/obj/structure/sign/poster/official/help_others{ + pixel_x = -32 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cNQ" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cNR" = ( +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cNS" = ( +/obj/item/weapon/twohanded/required/kirbyplants{ + icon_state = "plant-21"; + layer = 4.1; + pixel_x = -3; + pixel_y = 3 + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cNT" = ( +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -23; + pixel_y = 0 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/crew_quarters/courtroom) +"cNU" = ( +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/deliveryChute{ + desc = "A chute for big and small crimnals alike!"; + dir = 1; + icon_state = "intake"; + name = "Criminal Delivery Chute"; + tag = "icon-intake (NORTH)" + }, +/obj/machinery/door/window/brigdoor/northleft{ + name = "Criminal Deposit"; + req_access_txt = "2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/supply) +"cNV" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cNW" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cNX" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/flasher{ + id = "HoldingCell"; + pixel_x = 24; + pixel_y = 0 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cNY" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cNZ" = ( +/obj/machinery/holopad, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cOa" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cOb" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/supply) +"cOc" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cOd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = -32; + random_basetype = /obj/structure/sign/poster/official + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cOe" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/sign/poster/random{ + name = "random official poster"; + pixel_x = 32; + random_basetype = /obj/structure/sign/poster/official + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cOf" = ( +/obj/structure/grille/broken, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"cOg" = ( +/obj/structure/disposaloutlet{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cOh" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/red/corner{ + icon_state = "redcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cOi" = ( +/turf/open/floor/plasteel/red/corner{ + icon_state = "redcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cOj" = ( +/obj/item/weapon/twohanded/required/kirbyplants{ + icon_state = "plant-21"; + layer = 4.1; + pixel_x = -3; + pixel_y = 3 + }, +/turf/open/floor/plasteel/red/corner{ + icon_state = "redcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cOk" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel/red/corner{ + icon_state = "redcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cOl" = ( +/obj/structure/table, +/obj/item/weapon/book/manual/wiki/security_space_law, +/turf/open/floor/plasteel/red/corner{ + icon_state = "redcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cOm" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/door/poddoor/preopen{ + id = "frontbrig"; + name = "Emergency External Blast Doors" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cOn" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/door/poddoor/preopen{ + id = "frontbrig"; + name = "Emergency External Blast Doors" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cOo" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cOp" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cOq" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cOr" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/brig) +"cOs" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"cOt" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cOu" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cOv" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cOw" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cOx" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/camera{ + c_tag = "Command Asteroid Hall 3"; + dir = 6; + icon_state = "camera" + }, +/turf/open/floor/plasteel/red/corner{ + tag = "icon-redcorner (EAST)"; + icon_state = "redcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cOy" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cOz" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/item/device/assembly/mousetrap/armed, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"cOA" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cOB" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cOC" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/office) +"cOD" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"cOE" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cOF" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cOG" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cOH" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cOI" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cOJ" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cOK" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cOL" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cOM" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cON" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cOO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cOP" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cOQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cOR" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Fore Asteroid Maintenance Access"; + req_access_txt = "12" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cOS" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Fore Asteroid Maintenance Access"; + req_access_txt = "12" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cOT" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cOU" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cOV" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"cOW" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"cOX" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cOY" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cOZ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cPa" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cPb" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cPc" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cPd" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cPe" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cPf" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cPg" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cPh" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cPi" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cPj" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cPk" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cPl" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cPm" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cPn" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cPo" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cPp" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cPq" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cPr" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cPs" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"cPt" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"cPu" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"cPv" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"cPw" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"cPx" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"cPy" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"cPz" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"cPA" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"cPB" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/janitor) +"cPC" = ( +/obj/machinery/door/airlock/glass, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cPD" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cPE" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cPF" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cPG" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/space) +"cPH" = ( +/obj/machinery/vending/cigarette, +/turf/open/floor/plasteel/red/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/space) +"cPI" = ( +/obj/structure/table, +/obj/item/weapon/storage/fancy/donut_box, +/turf/open/floor/plasteel/red/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/space) +"cPJ" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cPK" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/space) +"cPL" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/space) +"cPM" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/space) +"cPN" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cPO" = ( +/obj/machinery/door/airlock/glass, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cPP" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/space) +"cPQ" = ( +/obj/structure/bed/dogbed, +/mob/living/simple_animal/bot/secbot/beepsky, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/space) +"cPR" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/space) +"cPS" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cPT" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cPU" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/space) +"cPV" = ( +/obj/structure/table, +/obj/item/weapon/reagent_containers/food/snacks/grown/potato, +/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/space) +"cPW" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/space) +"cPX" = ( +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'WARNING: LOOSE CANNON'."; + name = "WARNING: LOOSE CANNON"; + pixel_y = 32 + }, +/turf/open/space, +/area/space) +"cPY" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cPZ" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cQa" = ( +/obj/structure/plasticflaps{ + name = "Officer Beepsky's Home" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/space) +"cQb" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/space) +"cQc" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cQd" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cQe" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cQf" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cQg" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cQh" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cQi" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cQj" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cQk" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cQl" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cQm" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cQn" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cQo" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cQp" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cQq" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cQr" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cQs" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cQt" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cQu" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cQv" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cQw" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cQx" = ( +/obj/machinery/door/airlock/glass, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cQy" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine, +/area/space) +"cQz" = ( +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 1 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cQA" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cQB" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cQC" = ( +/obj/machinery/door/airlock/glass, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cQD" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cQE" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cQF" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cQG" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cQH" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cQI" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cQJ" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cQK" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cQL" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cQM" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cQN" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cQO" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cQP" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cQQ" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cQR" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cQS" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cQT" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cQU" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"cQV" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"cQW" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cQX" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cQY" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cQZ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRa" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRb" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRc" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRd" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRe" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRf" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRg" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRh" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRi" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRj" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRk" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRl" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"cRm" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"cRn" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"cRo" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"cRp" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cRq" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cRr" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters{ + name = "Rehabilitation Dome" + }) +"cRs" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRt" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/storage/eva) +"cRu" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRv" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRw" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRx" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRy" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRz" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRA" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRB" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRC" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRD" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRE" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRF" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRG" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRH" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRI" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRK" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cRL" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cRM" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cRN" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cRO" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cRP" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cRQ" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cRR" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cRS" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cRT" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cRU" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cRV" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cRW" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cRX" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cRY" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cRZ" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSa" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSb" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSc" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSd" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSe" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSf" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSg" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSh" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSi" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSj" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSk" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSl" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSm" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSn" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSo" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSp" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSq" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSr" = ( +/obj/machinery/door/airlock/glass, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cSs" = ( +/obj/structure/sign/map/left/ceres{ + pixel_y = 32 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cSt" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"cSu" = ( +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 1 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cSv" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cSw" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cSx" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cSy" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cSz" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cSA" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cSB" = ( +/obj/machinery/door/airlock/glass, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cSC" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSD" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSE" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSF" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSG" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSH" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSI" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSK" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSL" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSM" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSN" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSP" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSR" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cSS" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cST" = ( +/obj/machinery/door/airlock/glass, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cSU" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/arrival/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cSV" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"cSW" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"cSX" = ( +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"cSY" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"cSZ" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/red/side{ + icon_state = "red"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"cTa" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/green/corner{ + tag = "icon-greencorner (WEST)"; + icon_state = "greencorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"cTb" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"cTc" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"cTd" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/green/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"cTe" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"cTf" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cTg" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cTh" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"cTi" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"cTj" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"cTk" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"cTl" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/orange, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/medical) +"cTm" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"cTn" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"cTo" = ( +/mob/living/simple_animal/pet/cat/Runtime, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"cTp" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/break_room) +"cTq" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/engineering) +"cTr" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/engineering) +"cTs" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/engineering) +"cTt" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/engineering) +"cTu" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/engineering) +"cTv" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"cTw" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/engineering) +"cTx" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/engineering) +"cTy" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"cTz" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/deliveryChute{ + desc = "A chute for big and small criminals alike!"; + dir = 8; + name = "Criminal Delivery Chute" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/door/window/brigdoor/westleft{ + name = "Criminal Deposit"; + req_access_txt = "2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/engineering) +"cTA" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/engineering) +"cTB" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"cTC" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"cTD" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"cTE" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"cTF" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"cTG" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"cTH" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"cTI" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"cTJ" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"cTK" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"cTL" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"cTM" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"cTN" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"cTO" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cTP" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/chapel/main) +"cTQ" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cTR" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cTS" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cTT" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cTU" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cTV" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cTW" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cTX" = ( +/obj/machinery/door/airlock/glass, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cTY" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cTZ" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cUa" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cUb" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cUc" = ( +/obj/machinery/ai_status_display, +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cUd" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cUe" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cUf" = ( +/obj/machinery/power/apc{ + dir = 2; + name = "Arrival Security Checkpoint APC"; + pixel_y = -24 + }, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cUg" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cUh" = ( +/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cUi" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cUj" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter) +"cUk" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint2) +"cUl" = ( +/obj/machinery/disposal/deliveryChute{ + desc = "A chute for big and small criminals alike!"; + name = "Criminal Delivery Chute" + }, +/obj/machinery/door/window/brigdoor{ + name = "Criminal Deposit"; + req_access_txt = "2" + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint2) +"cUm" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cUn" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cUo" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cUp" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cUq" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cUr" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cUs" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cUt" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter) +"cUu" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; + tag = "" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cUv" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter) +"cUw" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cUx" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter) +"cUy" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cUz" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cUA" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cUB" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cUC" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cUD" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cUE" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cUF" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cUG" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cUH" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cUI" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cUJ" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cUK" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cUL" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cUM" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cUN" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cUO" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cUP" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cUQ" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cUR" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cUS" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cUT" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cUU" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cUV" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cUW" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cUX" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cUY" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cUZ" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cVa" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cVb" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cVc" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cVd" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cVe" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cVf" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cVg" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cVh" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cVi" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cVj" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cVk" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cVl" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cVm" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cVn" = ( +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/space) +"cVo" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cVp" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cVq" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cVr" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/blue/corner{ + tag = "icon-bluecorner (EAST)"; + icon_state = "bluecorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cVs" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter) +"cVt" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter) +"cVu" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter) +"cVv" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/teleporter) +"cVw" = ( +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 1 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cVx" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cVy" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cVz" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cVA" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cVB" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cVC" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cVD" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/lab) +"cVE" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cVF" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cVG" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cVH" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cVI" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cVJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cVK" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cVL" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cVM" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Aft Asteroid Maintenance"; + req_access_txt = "12" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cVN" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cVO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cVP" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cVQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cVR" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cVS" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cVT" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cVU" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cVV" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cVW" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cVX" = ( +/obj/machinery/ai_status_display, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cVY" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cVZ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cWa" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cWb" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cWc" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cWd" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cWe" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cWf" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cWg" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cWh" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cWi" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cWj" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"cWk" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/research{ + name = "Research Division" + }) +"cWl" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/storage) +"cWm" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/checkpoint/science) +"cWn" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/storage) +"cWo" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/storage) +"cWp" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/storage) +"cWq" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/storage) +"cWr" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cWs" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/deliveryChute{ + desc = "A chute for big and small crimnals alike!"; + dir = 1; + icon_state = "intake"; + name = "Criminal Delivery Chute"; + tag = "icon-intake (NORTH)" + }, +/obj/machinery/door/window/brigdoor/northleft{ + name = "Criminal Deposit"; + req_access_txt = "2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/misc_lab) +"cWt" = ( +/obj/machinery/door/airlock{ + name = "Bathroom" + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"cWu" = ( +/obj/structure/toilet{ + dir = 4 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"cWv" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/virology) +"cWw" = ( +/obj/structure/sign/bluecross_2, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"cWx" = ( +/obj/structure/sign/bluecross_2, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics_cloning) +"cWy" = ( +/mob/living/carbon/monkey, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"cWz" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"cWA" = ( +/obj/structure/sign/bluecross_2, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay2) +"cWB" = ( +/obj/structure/flora/tree/palm, +/obj/machinery/camera{ + c_tag = "Genetics Monkey Dome"; + dir = 9; + icon_state = "camera"; + tag = "icon-camera (NORTHWEST)" + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"cWC" = ( +/mob/living/carbon/monkey, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"cWD" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/light, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"cWE" = ( +/mob/living/carbon/monkey, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/genetics) +"cWF" = ( +/obj/structure/urinal{ + pixel_x = -32 + }, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/toilet{ + name = "Fitness Toilets" + }) +"cWG" = ( +/obj/structure/sign/nanotrasen, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/secondary/entry) +"cWH" = ( +/obj/structure/sign/poster/official/pda_ad{ + pixel_x = -32 + }, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"cWI" = ( +/obj/machinery/pdapainter, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/heads) +"cWJ" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cWK" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cWL" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cWM" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cWN" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cWO" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cWP" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cWQ" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cWR" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cWS" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cWT" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cWU" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cWV" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cWW" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cWX" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"cWY" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"cWZ" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXa" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXb" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXc" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXd" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"cXe" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXf" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXg" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXh" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXi" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"cXj" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"cXk" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/engine/supermatter) +"cXl" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXm" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXn" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXo" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXp" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 1 + }, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/engine/supermatter) +"cXr" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXs" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXt" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXu" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXv" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXw" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXx" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXy" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXz" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXA" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXB" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXC" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXD" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXE" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXF" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXG" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXH" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXI" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXJ" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXK" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXL" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXM" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXN" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXO" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXP" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXQ" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXR" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXS" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXT" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXU" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXV" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cXW" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cXX" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cXY" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister, +/turf/open/floor/plasteel/whitepurple/side{ + tag = "icon-whitepurple (SOUTHWEST)"; + icon_state = "whitepurple"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cXZ" = ( +/turf/open/floor/plasteel/whitepurple/corner{ + tag = "icon-whitepurplecorner (WEST)"; + icon_state = "whitepurplecorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cYa" = ( +/obj/structure/closet/wardrobe/science_white, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cYb" = ( +/obj/structure/closet/l3closet/scientist{ + pixel_x = -2 + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) +"cYc" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Aft Asteroid Maintenance"; + req_access_txt = "47" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/toxins/mixing) + +(1,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(2,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(3,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(4,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aac +aac +aac +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(5,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aac +aac +aac +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(6,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aac +aac +aac +aab +aaa +aaa +aac +aac +aac +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aab +aab +aad +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(7,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aab +aad +aac +aac +aac +aab +aaa +aaa +aac +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aac +aad +aad +aaa +aaa +aaa +aad +aab +aab +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(8,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aad +aac +aac +aac +aad +aaa +aaa +aad +aad +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aac +aac +aac +aac +aac +aad +aad +aac +aac +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aag +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aac +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(9,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aad +aac +aac +aac +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aac +aac +aab +aac +aac +aac +aac +aac +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aac +aac +aac +aad +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(10,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aac +aac +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aab +aab +aab +aac +aac +aad +aac +aac +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aab +aac +aac +aac +aac +aac +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(11,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aad +aac +aab +aab +aab +aab +aab +aab +aac +aac +aac +aac +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aac +aac +aad +aad +aac +aac +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(12,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aab +aad +aac +aac +aac +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aab +aab +aac +aac +aac +aac +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(13,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aad +aab +aad +aad +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aab +aab +aab +aac +aac +aac +aac +aac +aac +aac +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(14,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aac +aac +aac +aac +aac +aac +aac +aac +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(15,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aad +aad +aac +aac +aac +aac +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(16,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aad +aad +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(17,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aah +aai +aai +aai +aai +aer +aai +aai +aai +aaM +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(18,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aah +aai +aai +aai +aai +aai +aai +acU +adm +acU +acV +aes +aeP +afg +afk +afH +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aag +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(19,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aai +abT +acd +acd +acd +abT +aai +acV +acV +acV +acV +aet +acV +afh +afk +afI +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aag +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(20,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aai +aan +aan +aan +aan +aan +aai +acW +acV +acV +acV +aeu +aeQ +afi +afk +afJ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZm +aZm +cdT +cdT +cdT +aZm +aZm +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(21,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aah +aai +aai +aai +aaM +aaa +aaa +aai +aan +ace +aan +aan +aan +aai +acX +acV +acV +acV +aev +aai +aai +aai +agl +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZm +bdM +beC +bUi +ceF +cfc +aZm +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(22,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aai +aam +aas +aaA +aai +aaa +aaa +aai +abU +acf +acq +aan +aan +aai +acY +acV +acV +acV +aew +aai +afj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aac +aad +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaP +aaP +aaP +aaP +aaP +aaP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZm +aZm +aZm +cdC +bVi +bVi +ceG +beC +aZm +aZm +aZm +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cGR +cGR +cGR +cGR +cGR +cGR +cGR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(23,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaj +aan +aan +aaB +aai +aai +aai +aai +aai +aai +aai +acE +acM +aai +aai +adn +adC +adW +aai +aai +aai +aaM +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aac +aab +aab +aab +aac +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaP +aba +abr +abr +abV +bat +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYO +bpL +cdk +cdD +cdU +cel +ceH +cfd +cfr +bpL +cfL +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cGS +cHh +cHp +cHG +cHU +cIi +cHq +cGR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(24,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaj +aao +aan +aan +aai +aaY +aan +aan +aan +aan +acr +aan +aan +acQ +aan +aan +aan +aan +aaB +aeR +afk +afH +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aad +aab +aab +aab +aab +aab +aaa +aad +aad +aac +aab +aab +aab +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaP +abb +abs +abs +aaP +aaP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZm +aYX +cdl +cdE +cdV +cem +ceI +cfe +aZm +aZm +aZm +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cGR +cGR +cHq +cHH +cHV +cIj +cIi +cGR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(25,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaj +aap +aat +aan +aaN +aan +aan +aan +aan +aan +acs +aan +aan +aan +aan +aan +aan +aan +aan +aeS +afk +afI +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aad +aad +aac +aac +aac +aab +aab +aac +aac +aac +aab +aab +aab +aac +aac +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaP +abb +abs +aaP +aaP +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYP +aYP +cdl +cdF +cdW +cen +ceJ +cff +aYX +aYP +aYP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +cGR +cHI +cHW +cIk +cIB +cGR +cGR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(26,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaj +aaq +aan +aaC +aai +aaZ +abq +abq +abq +acg +acr +aan +aan +aan +aan +acG +aan +aan +aaB +aeR +afk +afJ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aac +aac +aac +aac +aac +aab +aab +aac +aac +aac +aab +aab +aab +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaP +abc +aaP +aaP +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYP +aYP +aYP +aYP +cdl +cdG +cdX +ceo +cdF +cfg +aYX +aYP +aYP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgN +cgN +aaa +abC +aaa +cGR +cGR +cHX +cIl +cIj +cIJ +cGR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(27,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaj +aar +aan +aaB +aai +aai +aai +abB +aai +aai +aai +acF +acr +aai +aai +aai +adD +adX +aai +aai +aai +aaO +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aac +aac +aac +aaa +aaa +aaa +aaa +aac +aac +aac +aad +aad +aab +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaP +abd +aaP +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYP +aYP +aYP +aZn +cdm +aZm +baz +cep +aYX +aYX +aYX +aYP +aYP +aYP +aYP +aYP +aYP +aYP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgS +cgS +cgS +cgN +cgN +cgN +abC +aaa +aaa +cGR +cHq +cIm +cHq +cIK +cGR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(28,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aai +aar +aan +aaD +aai +aaO +aaa +aaa +aaa +aai +aan +aan +aan +aai +acZ +aan +aan +aan +aex +aeT +aai +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aac +aad +aad +aad +aad +aab +aab +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZm +aZm +bVg +bVg +bVg +aZm +aZm +aYP +aYP +aYP +aYT +aYT +aYT +aYT +aYT +aZn +cdn +aZA +aZy +ceq +bqE +aZo +aZn +aYT +aYT +aYT +aYT +aYT +aYT +aYP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgS +cgS +cgS +cgN +cgN +aaa +abC +aaa +aaa +aaa +cGR +cIn +cHq +cIL +cGR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(29,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aak +aai +aai +aai +aaO +aaa +aaa +aaa +aaa +ach +aan +aan +aan +aai +ada +aan +aan +aan +aey +aai +aai +aai +agm +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYT +aYT +aYT +aYT +aZm +bUh +bVh +bVW +bWK +bXm +aYX +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aZn +cdo +aZA +cdY +bCF +bqE +aZo +aZo +aYT +aYT +aYT +aYT +aYT +aYT +aYP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgN +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +aaa +abC +aaa +aaa +aaa +cGR +cIm +cGR +cIM +cGR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(30,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aci +aan +acG +aan +aai +adb +aan +aan +aan +aan +aan +afl +afk +afH +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYP +aYP +aYP +aYP +aYP +aYP +aYP +aYP +aYP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYP +aYP +aYT +aYT +aYX +bUi +bVi +beC +bWL +beC +aYX +aYT +aYT +aYT +aZo +aZo +aZo +aZo +aZn +aZm +cdp +bbu +bbu +cdp +aZo +aZo +aZo +aZo +aZo +aZn +aZn +aZn +aZn +aYP +aYP +cgN +cgS +cgS +cgS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgN +cgN +cgS +cgS +cgS +aaa +abC +aaa +aaa +aaa +abC +cHA +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(31,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aak +aai +aai +aai +aai +adc +ace +aan +aan +aan +aan +afm +afk +afI +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYP +aYP +aYP +aYP +aYP +aYT +aYT +aYT +aYT +aYT +aYP +aaa +aaa +aaa +aaa +aYP +aYP +aYT +aYP +aYP +aYP +aYT +aYT +aZm +aYX +aZm +bVX +bWM +bXn +aZm +aYT +aZo +aZo +aZn +aZA +aZA +bbg +aZA +bHy +bCF +aZA +aZA +cer +aYX +ceK +cfs +aZz +aZA +aZA +cge +aZn +cgj +cgv +cgv +cgN +cgN +cgN +cgS +cgS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgS +cgS +cgS +cgN +cgR +cgR +cgR +cgR +cgR +cgR +cgN +cgN +cgS +cgS +aaa +abC +aaa +aaa +aaa +abC +cHA +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(32,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +acN +aai +add +ado +aan +adY +adY +acG +afn +afk +afJ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aag +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYP +aYP +aYP +aYP +aYP +aYP +aYP +aYT +aYT +aYT +aYT +aYT +aYP +aYT +aYT +aYT +aYT +aYP +aYP +aYP +aYP +aYP +aYT +aYT +aYT +aYT +aYT +aZm +aYX +aYX +bXo +aYX +aZo +aZo +aZo +bWp +blT +bbf +bbf +bbf +bbf +bmN +aZA +aZA +ces +ceK +ceK +cft +aZA +aZA +aZA +aZA +aZX +cgj +cgj +cgj +cgO +cgO +cgN +cgS +cgS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgS +cgR +cgR +cgR +cgR +cgR +cgR +cgR +cgR +cgR +cgN +cgS +cgS +cgN +aaa +abC +aaa +aaa +aaa +abC +cHA +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(33,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aak +aai +aai +aai +aai +abB +aai +aai +aai +aaO +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYP +aYP +aYP +aYP +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aZo +aZo +aYX +bWN +bXp +aZn +aYX +aZn +bec +aZA +bCF +blT +bbf +bbf +bVY +bbf +bbf +bbf +bmN +aZn +aZn +aZn +aZn +aZn +aZn +bec +aZA +aZA +aZA +cgj +cgj +cgj +cgO +cgN +cgS +cgS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgS +cgS +cgR +cgR +cgR +cgR +cgR +cgR +cgR +cgR +cgR +cgN +cgS +cgS +aaa +aaa +abC +aaa +aaa +aaa +abC +cHA +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(34,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +awc +awc +awd +awc +awc +awd +awc +awc +awc +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYN +aZg +aYN +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYP +aYP +aYP +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYP +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYP +aYP +aYP +aYT +aZo +aZo +aZo +aZo +aZo +aZn +aZn +aZz +aZA +bHy +aZA +aZA +aZA +bCF +bCF +aZA +ccr +bbg +aZA +aZA +aZA +bec +aZn +aZn +cea +cea +cea +cea +cea +aZn +cgm +aZA +aZA +cgj +cgj +cgO +cgO +cgO +cgO +cgS +cgS +cgS +cgS +cgS +cgS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgS +cgS +cgN +cgR +cgR +cgR +cgR +cgR +cgR +cgR +cgR +cgN +cgS +cgS +cgS +aaa +abC +aaa +aaa +aaa +abC +cHA +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(35,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +awd +axf +ayb +azI +aAW +aAW +aDh +aEw +aFQ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYN +aZh +aYN +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYP +aYP +aYP +aYP +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYP +aZn +aZn +aZn +aYX +aZo +aZo +aZn +aZn +aZn +aZo +aZo +aZo +aZn +aZn +bVj +bau +aZn +aZz +blT +bbf +bbf +bbf +bbf +bmN +bCF +aZA +aZA +bbg +aZn +aZn +aZn +aZn +aZn +cea +cea +cfD +cfE +cfW +cea +cgj +cgj +cgj +aZA +aZA +cgj +cgj +cgO +cgO +cgO +cgO +cgO +cgS +cgS +cgS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgS +cgS +cgS +cgN +cgR +cgR +cgR +cgR +cgR +cgR +cgR +cgR +cgN +cgN +cgS +cgS +aaa +abC +aaa +aaa +aaa +abC +cHA +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(36,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +awd +axg +ayc +awc +aAW +aAW +aAW +aEw +aFQ +aaa +aaa +aaa +aaa +aaa +abC +afV +afV +afV +afV +afV +afV +afV +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYN +aZi +aYN +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYP +aYP +aYP +aYT +aYT +aYT +bnS +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYP +aZn +aZm +aZn +bFa +aZA +bHy +bec +aZA +aZn +bNg +bNg +aZA +aZn +aZA +aZA +blT +bbf +bVY +bMd +bbf +bmN +blT +bbf +bbf +bbf +bbf +bmN +bGo +aYX +aZn +aZn +aZn +aZn +aZn +aZn +cea +cfu +cfE +cfE +cfX +cea +cgj +cgj +cgj +cgj +aZA +bec +cgj +cgj +cgO +cgO +cgO +cgO +cgN +cgS +cgS +cgN +cgS +cgS +cgS +cgS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgS +cgS +cgS +cgS +cgN +cgN +cgN +cgN +cgR +cgR +cgR +cgR +cgR +cgR +cgR +cgR +cgR +cgN +aaa +abC +aaa +aaa +aaa +abC +cHA +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(37,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +awd +axh +ayd +azJ +aAX +aCa +aAW +aEw +aFQ +aaa +aaa +aaa +aaa +abC +abC +afV +aOF +aPB +aRj +aSd +ajr +afV +abC +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYN +aZj +aYN +aYN +aYN +aYN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYP +aYP +aYP +aYP +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYP +aZn +bCE +bbf +bbf +bbf +bbf +bbf +bbf +bMd +bbf +bbf +bbf +bbf +bbf +bbf +bmN +bVk +bVZ +bPW +bPW +bPW +bYP +aZA +aZA +aZA +bWp +cbw +cbZ +aZn +aZn +aZo +aZo +aZo +aZn +aZn +cea +cfv +cfF +cfE +cfE +cea +aZn +aZn +cgj +cgj +cgP +aZA +aZA +cgj +cgj +cgO +cgO +cgO +cgO +cgO +cgO +cgO +cgO +cgN +cgN +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgS +cgS +cgS +cgS +cgN +cgN +cgN +cgN +cgN +cgN +cgR +cgR +cgR +cgR +cgR +cgR +cgN +aaa +abC +aaa +aaa +aaa +abC +cHA +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(38,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaP +aaP +aaP +aaP +aaP +aaP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +awc +awc +aye +awc +awc +awc +aDi +awc +awc +aaa +aaa +aaa +aaa +afV +afV +afS +aOG +akp +aym +aym +aym +afS +afV +afV +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYN +aYN +aYN +aYN +aYN +aYX +aZk +aZu +aZJ +aZW +aZJ +aaa +aaa +aaa +aaa +aaa +aaa +aYP +aYP +aYP +aYP +aYP +aYP +aYT +aYT +aYT +aYT +aYT +aYT +aYT +bsc +bsd +bsd +bsd +bsd +bsc +bsc +bsc +bCF +bEd +bnT +bnT +bnT +bvh +bnT +bnT +bnT +bOv +bPW +bQY +bPW +bPW +bPW +bVl +aYX +aZA +aZA +aZA +bCW +aZA +bbi +bdL +aZn +aZn +aZo +aZo +aZo +aZo +aZo +aZo +aZn +aZn +cea +cea +cfE +cfE +cfY +cea +aZn +aZn +cgn +cgE +cgQ +aZA +aZA +aZA +cgj +cgj +cgO +cgO +cgO +cgO +cgO +cgO +cgO +cgN +cgN +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgN +cgN +cgN +cgR +cgR +cgR +cgR +cgR +cgR +cgR +cgR +abC +aaa +aaa +aaa +abC +cHA +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(39,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaP +aba +abr +abr +abV +acj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +awe +axi +ayf +axi +aAY +axi +aDj +axi +acj +aaa +aaa +aaa +aaa +aLv +aMC +aNz +aNz +aPC +ahA +aSe +aSe +aTM +aMC +aVn +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYO +aYR +aYS +aYV +aYX +aZa +aZb +aZv +aYX +aYN +aYN +aYP +aYP +aYP +aYP +aYP +aYP +aYP +aYP +aYP +aYP +aYP +aYP +aYT +aYT +aYT +aYT +aYT +aYT +aYT +bsc +btx +bty +bwx +bty +bzs +bty +bsd +bCF +blW +aZA +aZA +aZA +aZA +aZn +bFn +aZA +bCW +aZn +aZm +aZn +aZn +aZn +aZn +aZn +aZn +aZn +aZA +bCW +aZn +aZm +aZn +aZo +aZo +aZo +aZo +aZo +aZo +aZn +aZn +cdZ +cdZ +cdZ +cea +cfG +cfE +cfZ +cea +aZn +cgn +cgw +cgF +cgj +cgj +aZA +aZA +aZA +cgj +cgj +cgj +cgj +cgj +cgO +cgO +cgO +cgO +cgO +cgN +cgS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgN +cgN +cgN +cgR +cgR +cgR +cgR +cgR +cgR +cGT +aaa +aaa +aaa +abC +cHA +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(40,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaP +abb +abs +abs +aaP +aaP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +abC +abC +axj +ayg +axj +abC +axj +ayg +axj +abC +abC +aaa +aaa +aaa +afV +afV +afV +aOH +aPD +aiW +aym +aym +afS +afV +afV +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYN +aYN +aYN +aYW +aYY +aZb +aZl +aZw +aYX +aZn +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYP +aYT +aYT +aYP +aYT +aYT +aYT +aYP +bsc +bty +bvc +bwy +byg +bzt +bAy +bsd +bCF +blW +aZA +bGn +bHz +aZA +aZn +aZn +aZA +bCW +aZA +aZn +aZn +aZo +aZo +aZo +aZo +aZo +aZn +aZB +bYQ +aZn +aZn +aZn +bWO +bWO +bWO +bWO +bWO +bWO +aZn +cdZ +cdZ +ceu +cev +cfw +cev +cev +cea +cea +aZn +cgo +aZn +aZn +aZn +cgj +cgj +aZA +aZA +aZA +bdL +cgj +cgj +cgj +cgO +cgO +cgO +cgO +cgO +cgN +cgN +aaa +aaa +aaa +aaa +aaa +aaa +cgS +aaa +aaa +aaa +cgS +cgN +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgN +cgN +cgR +cgR +cgR +cgR +cgR +cgR +cgN +aaa +aaa +aaa +abC +cHA +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(41,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaP +abb +abs +aaP +aaP +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +abW +abW +abW +abW +atR +atR +atR +axk +ayh +axo +atR +axo +aDk +aEx +atR +atR +abW +abW +aaa +abW +abW +afS +aym +aiW +aht +aSf +aTi +afV +abW +abW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYN +aYN +aYN +aYN +aZm +aZx +aYX +aZn +aYT +aYT +aYT +aYT +aZo +aZo +aZo +aZo +aZo +aYT +aYT +aYT +aYP +aYT +aYT +aYP +aYT +aYT +aYT +aYP +bsc +bty +bvd +bwz +byh +bzu +bAz +bsd +bCF +blW +aZn +aZn +aZn +aZn +aZn +aZn +aZA +bCW +aZA +aZn +aZn +bHA +bHA +bHA +bHA +bWO +bWO +bWO +bWO +bWO +bWO +bWO +bWO +cbx +cbx +cbx +cbx +bWO +aZn +cea +cet +ceu +cdZ +cea +cea +cea +cea +aYP +aZn +aZn +aZn +aYP +cgN +cgO +cgj +cgj +cgj +aZA +aZA +aZA +aZA +cgj +cgj +cgj +cgj +cgO +cgO +cgN +cgN +cgS +aaa +aaa +aaa +aaa +cgS +ctW +cuQ +cuQ +cuQ +ctW +cgN +cgN +cgN +cgN +cgN +cgS +cgS +cgS +cgS +cgN +cgR +cgR +cgR +cgR +cgR +cgR +aaa +aaa +aaa +aaa +abC +cHA +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(42,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaP +abc +aaP +aaP +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +acH +acH +acH +acH +atR +auV +awf +axl +ayi +azK +aAZ +aCb +axl +axl +aFR +atR +abW +acH +acH +acH +acH +afS +aym +aPE +aRk +aSg +aTj +afV +abW +abW +akG +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +aZm +aZy +aZK +aZn +aZo +aZo +aZo +aZo +aZm +aZL +bdL +beA +aZo +aZo +aZo +aZo +aZn +aZn +aYT +aYT +aYT +aYT +aYT +aYP +bsd +bty +bve +bwA +byi +bzv +bAA +bsc +bCF +blW +aZn +aZn +aZn +aZn +aZn +aZn +aZn +bOw +bbi +aZn +aZn +bHA +bUj +bVm +bWa +bWO +bXq +bYd +bYR +bZp +cWF +cao +caY +cby +cca +bYd +bYd +bWO +aZn +cdZ +ceu +cdZ +cdZ +aYP +aYT +aYT +aYT +aYT +aYT +aYT +aYP +aYP +cgN +cgO +cgO +cgO +cgj +cgj +bec +aZA +aZA +aZA +bec +cgj +cgj +cgO +cgO +cgO +cgN +cgN +aaa +aaa +aaa +aaa +cgS +ctW +cuR +cvR +cvR +ctW +cgR +cgR +cgR +cgR +cgN +cjU +cCB +cjU +cgN +cgN +cgR +cgR +cgR +cgR +cgR +cgR +aaa +aaa +aaa +aaa +abC +cHA +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(43,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaP +abd +aaP +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abE +abE +abE +abW +abW +abW +acH +acH +acH +aez +atS +auW +awg +axm +axm +azL +aBa +axm +aDl +axm +aFS +atR +aez +aez +aez +aez +aez +afV +afV +aPF +aRl +afS +afS +afS +adZ +abW +abW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYP +aZn +aZz +aZz +aZz +aZn +aZn +bbg +bbV +aZA +aZz +aZz +aZz +aZz +aZz +aZz +aZz +aZz +aZn +aZo +aYT +aYT +aYT +aYT +aYT +bsd +btz +bvf +bwB +byj +bzw +bty +bsc +bCG +blW +aZn +aZn +aZn +bHA +bHA +bHA +bHA +bHA +bHA +bHA +bHA +bHA +bUk +bVn +bWb +bWP +bXr +bXr +bYS +bXr +bXr +cap +caZ +bXr +ccb +ccs +ccJ +bWO +aZn +cdZ +ceu +ceL +cdZ +aYP +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYP +cgN +cgO +cgO +cgO +cgO +cgj +cgj +cgj +cgj +aZA +aZA +aZA +aZn +aZn +aZn +cgN +cgN +cgN +aaa +aaa +aaa +aaa +cgS +ctW +cuS +cvR +cwO +ctW +ctW +ctW +ctW +ctW +ctW +ctW +cCC +cjU +chc +chc +cgu +cgu +cgu +cgR +cgN +cgN +cgN +aaa +aaa +aaa +abC +cHA +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(44,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +abC +abE +abE +abE +abE +acH +acH +acH +acH +acH +acH +aez +aez +atR +auX +awh +axn +ayj +azL +aAZ +axn +ayj +axm +aFT +atR +aIo +afq +aqH +afq +afq +afq +afq +aPG +aPG +afq +aTk +adZ +aez +acH +acH +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYP +aZn +aYX +aZL +aZz +aZz +aZz +aZz +aZz +aZz +aZz +aZn +aZn +aZn +aZm +aZL +aZA +aZz +aZz +aZo +aZo +aZo +aZo +aZo +aZo +bsd +bsd +bsd +bwC +bwC +bsd +bsd +bsc +bCH +blW +aZn +aZn +aZn +bHA +bKz +bMe +bNh +bOx +cME +bMe +bPX +bHC +bIY +bKF +bWc +bWQ +bXs +bXs +bWQ +bZq +bWQ +caq +bWQ +bXs +bXs +cct +ccK +bWO +aZn +cdZ +ceu +cdZ +cdZ +aYP +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYP +cgN +cgN +cgO +cgO +cgO +cgO +cgO +cgj +cgj +aZA +aZA +aZA +bbu +aZA +aZn +aZo +cgR +cgN +cgS +aaa +aaa +aaa +cgS +ctW +cuT +cvS +cuT +ctW +cxY +cyN +cXY +cYa +cYb +ctW +cCB +cjU +cgu +cgL +cgL +cgu +cgu +cgR +cgR +cgR +cgR +aaa +aaa +aaa +abC +cHA +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(45,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +afV +ajo +ajo +ajo +afV +acH +acH +acH +acH +aez +aez +aez +aez +atR +atR +atR +axo +ayk +azM +atR +axo +aDm +axo +aFU +atR +aIp +aJx +aqk +aox +aox +aNA +afo +aot +aeV +afq +afq +aiS +aez +aez +acH +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYP +aYP +aYP +aZn +aZn +aZX +aZA +aZA +bbu +aZn +aZn +aZn +aZn +aZn +aZn +aZn +aZn +aZn +aZA +aZz +aZo +aZo +aZo +aZo +aZo +aZo +aZn +aZn +bvg +bwD +aZy +bzx +aZn +aZn +bCF +blW +aZn +aZn +aZn +bHA +bKA +bKA +bKA +bKA +bKA +bKA +bKA +bHA +bIZ +bKF +bWd +bWO +bXt +bXt +bWO +bZr +bWO +car +bWO +cbz +cbz +cbz +cbz +bWO +aZn +cdZ +cev +cdZ +cdZ +aYP +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +cgR +cgR +cgN +cgN +cgO +cgO +cgO +cgO +cgj +aZn +aZn +aZn +aZA +aZA +bad +aZo +cgR +cgN +cgS +aaa +aaa +aaa +cgN +ctW +cuU +cvT +cwP +ctW +cxZ +cyO +czh +czZ +cAU +cYc +cCD +cDv +cDv +cEQ +cFb +cmA +cgu +cgu +cgR +cgR +cgR +aaa +aaa +aaa +abC +cHA +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aag +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(46,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +afS +ajp +ako +ajr +afS +acH +acH +acH +aez +aez +afq +aqH +afq +amJ +auY +awi +axp +ayl +azN +aBb +aCc +aDn +aEy +aFV +aHr +anz +aJy +afo +aju +afo +aNB +aOI +afo +aRm +aus +akq +akq +ajt +aez +acH +abW +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYP +aYT +aYT +aYT +aYT +aYT +aZo +aZo +bau +aZn +aZn +aZn +aZn +aZm +aZm +aZm +aZm +aZm +aZm +aZm +aZn +bka +aYX +blT +bbf +bbf +bbf +bbf +bbf +bbf +bbf +bbf +bbf +bbf +bbf +bbf +bmN +blW +aZA +aZn +bHA +bHA +cMA +bKA +bKB +bKA +bKB +bKA +bKB +bHA +bUl +bVo +bWe +bWO +bWO +bWO +bWO +bWO +bWO +bWO +bWO +bWO +bWO +bWO +bWO +bWO +bHA +bHA +cew +bHA +bHA +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +aYT +cgR +cgR +cgN +cgN +cgO +cgO +cgO +cgO +cgO +cgN +cgN +aZn +aZn +aZA +aZA +aZn +cgR +cgN +cgS +aaa +aaa +aaa +cgN +ctW +cuT +cvU +cuT +cxu +cya +cyP +czi +cAa +cAV +ctW +cCE +cgL +cgL +cgL +cFc +ckH +cgu +cgu +cgR +cgR +cgN +aaa +aaa +aaa +cjU +cIo +cjU +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(47,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +afV +ajq +akp +ala +afV +abW +aez +aez +adZ +afS +amJ +aqk +aox +anz +auZ +awj +axq +aym +azO +aBc +aCd +aDo +aEz +aFW +akE +afo +aJz +afq +aLm +afV +aNC +aOJ +aLm +aLn +aLn +aLn +akq +ajt +aez +aez +abW +abW +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYT +aYT +aYT +aYT +aZo +aZo +aZn +aZA +aZA +aZn +aZn +aZn +aZn +aZm +bdM +beB +bfp +beD +bhi +biu +bjk +bkb +bkT +blU +bmM +bnT +bnT +bnT +bse +bnT +bvh +bwE +bnT +bnT +bnT +bnT +bnT +bEe +aZz +bec +bHA +bIV +bIW +bIW +bNi +bKA +bPZ +bPZ +bPZ +bTn +bPZ +bVp +bWf +bWR +bXu +bYe +bYT +bZs +bZs +bZs +bZs +bZs +bZs +bZs +bZs +bZs +bZs +bYT +bIW +ceM +bHA +aYT +aYT +aYT +aYT +aYT +aYP +aYP +aYP +aYT +cgR +cgR +cgN +cgN +cgN +cgN +cgN +cgN +cgN +cgN +cgN +aZn +aZA +aZA +aZA +aZn +cgR +cgN +cgS +aaa +aaa +aaa +cgN +ctW +cuV +cvV +cwQ +cvV +cyb +cvW +cXZ +cAb +cAW +ctW +ckH +ckz +chc +cgu +cFc +cgL +cFH +cjU +cgR +cgR +cgN +cgN +cgN +cgN +cjU +cIp +cjU +cIN +cjU +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(48,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +abW +abW +acH +acH +afS +ajr +akp +akq +afS +acH +aez +aoR +ahr +cJx +cJA +arS +arS +arS +arS +arS +axr +arS +arS +arS +arS +arS +aEA +aFX +arS +adZ +anC +aiS +aLm +aMD +aND +aOK +aPH +aRn +aSh +aLm +akq +afq +aVo +afV +abW +abW +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYP +aYP +aYP +aYP +aYP +aYP +aZn +aZA +aZA +aZA +aZn +aZo +aZo +aZo +aZn +aZm +bdN +beC +bfq +beC +bhj +biv +bjl +bkc +bkU +blV +bmN +bau +aZX +bqE +aZm +aZn +aZA +aZn +bmO +bmO +bmO +bmO +bmO +bmO +aZz +bbE +bHB +bIW +bKC +bMf +bNj +bOy +bOy +bOy +bOy +bOy +bOy +bVq +bOA +bWS +bXv +bYf +bYT +bZs +bZs +bZs +bZs +bZs +bZs +bZs +bZs +bZs +bZs +bYT +bYf +ceN +bHA +aYT +aYT +aYT +aYT +aYT +aYP +bjB +aYP +aYP +cgN +cgN +cgS +cgN +cgS +cgN +cgN +cgN +cgR +cgR +aZo +aZn +aZA +cge +bec +aZn +aZo +cgN +cgN +aaa +aaa +aaa +cgN +ctW +cXW +cvW +cXX +cvW +cvW +cvW +cvW +cAc +cAX +ctW +cBR +cBR +cBR +cBR +cFd +cgL +cgL +cgu +cgR +cgR +cgR +cgN +chc +chc +cjU +cIo +cjV +cIO +cjU +cJb +cJb +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(49,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +acH +acH +acH +acH +acH +acH +afV +ajs +akq +alb +afS +aez +adZ +anC +arS +cJy +cJB +arS +asM +atT +arS +awk +axs +ayn +azP +aBd +aCe +aDp +aEB +aFY +arS +adZ +anC +aKF +aLn +aME +aNp +aNp +aOl +aNp +aNp +aLn +akq +akq +aqH +aez +acH +abW +akG +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abD +aYP +aYP +aZn +aZB +aZn +aZo +aZo +aZo +aZo +aZo +aZn +aZm +bdO +beC +bfr +beC +bhk +aZm +aZB +aZA +bkV +blW +aZB +aZn +aZn +aZn +aZn +aZn +aZn +aZn +bmO +bzy +bAB +bBy +bBz +bmO +bka +bbE +bHB +bIX +bKD +bMg +bNk +bOz +bQa +bQa +bQa +bQa +bQa +bVr +bWg +bMj +bXw +bYg +bYT +bZs +bZs +bZs +bZs +bZs +bZs +bZs +bZs +bZs +bZs +bYT +bYg +ceO +bHA +aYT +aYT +aYT +aYP +aYP +bjB +bjB +aYP +aYP +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgN +cgR +cgR +aZo +bec +aZA +aZA +cfs +cge +aZn +cgR +cgR +aaa +crd +aaa +cgN +ctW +cuW +cvW +cwR +cxv +cyc +cvW +cvW +cAd +cAY +ctW +cCF +cDw +cEf +cBR +cFd +cgL +cnX +cgu +cgu +cgu +cgu +chc +chc +chc +cjV +cIq +cIC +cIP +cIC +cJc +cJb +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(50,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +abC +aaa +aaa +aaa +abW +abW +abW +abW +abW +abW +acH +acH +acH +acH +acH +aez +afV +afV +afS +alc +afS +aez +afq +anC +arS +cJz +cJC +cJD +asN +atU +ava +awl +cLV +ayo +azQ +aBe +azQ +aDq +aEC +aFZ +arS +adZ +anC +aKG +aLn +aMF +aNE +aOL +aPI +aRo +aNp +aLm +alb +aUQ +afS +aez +acH +abE +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYP +aYP +aZn +aZn +aZn +aZo +aZo +aZo +aZo +aZo +aZn +aZm +bdP +beD +bfs +bgt +bhl +aZm +aZn +aZA +bkV +blW +bmO +bmO +bpx +bmO +bmO +bmO +bmO +bmO +bmO +bzy +bzy +bBz +bBz +bmO +aZz +bGo +bHA +bIY +bKE +bMh +bNi +bOA +bQb +bQZ +bSb +bSb +bUm +bKA +bWh +bHA +bXx +bYg +bYT +bZs +bZs +bZs +bZs +bZs +bZs +bZs +bZs +bZs +bZs +bYT +bYg +ceP +bHA +aYT +aYP +aYP +bjB +bjB +bjB +bjB +aYP +bjB +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgN +cgR +cgR +aZo +aZn +aZn +aZm +ceK +cno +aZm +cgR +cgR +cqo +cre +cqo +cgN +ctW +cuX +cvX +cuX +cxw +cyd +cyQ +czj +cAe +cAZ +ctW +cCG +cCJ +cCG +cBR +cFe +cFt +chc +cgu +cgu +cgu +cgu +chc +chc +chb +cjV +cIr +cID +cIQ +cIC +cJd +cjU +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(51,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +abC +aaa +aaa +aaa +abW +abW +abW +abW +abW +abW +acH +acH +acH +acH +acH +aez +cJq +aqm +akq +ald +akq +akq +akq +anC +arS +arS +arS +arS +asO +atU +ava +awm +cLV +cLV +azR +cLV +cLV +aDr +aED +aGa +arS +adZ +aJA +adZ +aLm +aMG +aNF +aLm +aPJ +aRp +aLm +aLm +aTN +aTN +aLn +aLn +aLm +aLm +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYP +aYT +aYT +aYT +aZY +aZY +aZY +aZm +aZm +bdQ +aZm +bft +bgu +bgu +aZm +aZn +aZn +bkV +blW +bmO +bnU +bpy +bqF +bsf +btA +bvi +bwF +byk +bzy +bzy +bBz +bBz +bmO +aZz +aZA +bHA +bIZ +bKF +bMh +bNi +bOB +bQb +bRa +bSc +bSd +bUn +bKA +bWi +bHA +bXy +bYg +bYT +bZs +bZs +bZs +bZs +bZs +bZs +bZs +bZs +bZs +bZs +bYT +bYg +ceQ +bHA +aYP +aYP +aYP +bjB +bjB +bjB +bjB +bjB +bjB +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgN +cgR +cgR +cjg +cjg +cjg +cmI +cmI +cjg +cjg +cgN +cqo +crf +cqo +cgN +ctX +ctX +ctX +ctX +ctX +ctX +ctX +czk +cAe +cBa +ctW +cCH +cDx +cCH +cBR +cln +cFu +cFI +cFI +cFI +cFI +cGU +cFI +cFI +cHJ +cHY +cIs +cIE +cIR +cIC +cIC +cjU +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(52,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +abC +aaa +aaa +aaa +abW +abW +abW +acH +acH +acH +acH +acH +acH +acH +acH +aez +akq +afq +afq +afq +afq +afq +afq +amI +ahr +apX +anN +arS +asP +atV +arS +awn +axt +axt +axt +axt +axt +aDs +aEE +aGb +aHs +aHs +aHs +aHs +aHs +aHs +aHs +aHs +aPK +aRq +aSi +aLm +aTO +aTO +aUw +aMo +aMn +aLm +abE +abE +abE +aXR +aXR +aXR +aaa +aXR +aXR +aXR +aXR +aaa +aXR +aXR +aXR +aXR +aXR +aXR +aYP +aYT +aYT +aYP +aZY +bbv +bbW +bcy +bde +bdR +aZm +aZm +aZm +aZm +aZm +aZn +aZm +bkW +blW +bmO +bnV +bpz +bqG +bqG +bqG +bqG +bwG +bqI +bqI +bqI +bqI +bCI +bmO +aZz +bbV +bHC +bJa +bKG +bMh +bNi +bOA +bQb +bRa +bSd +bSd +bUn +bKA +bKA +bHC +bXz +bYg +bYT +bYT +bYT +bYT +cba +bYT +bYT +cba +bYT +bYT +bYT +bYT +bYg +bXz +bHA +aYP +aYP +bjB +bjB +bjB +bjB +bjB +bjB +bjB +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgN +cgR +cgR +cjg +clB +cmc +cmJ +cmd +cnZ +cjg +cgN +cqo +crg +cqo +cgN +cta +cuY +cuY +cwS +cLE +cwS +ctX +czl +cAf +cBb +ctW +cCI +cDy +cEg +cBR +cFf +cDv +cDv +cDv +cDv +cDv +cDv +cDv +cDv +cHK +cHZ +cIt +cIF +cIS +cll +cJe +cjU +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(53,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +abC +aaa +abW +abW +abW +abW +abW +acH +acH +acH +acH +acH +afr +afr +afr +afr +afr +alf +afr +alf +afr +afr +afr +afr +afr +afr +afr +afr +afr +afr +arS +arS +arS +arS +arS +arS +arS +aDt +aEF +aGc +aHs +aIq +aJB +aKH +aLw +aMH +aNG +aHs +aPL +aRr +aSj +aLm +aNp +aNp +aNp +aNp +aMp +aLm +abE +abE +abE +aaa +abC +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aYP +aYT +aYT +aYP +aZY +bbw +bbX +bbX +bbX +bbX +aZY +aZo +aZo +aZo +aZn +aZn +aZn +bkV +blW +bmO +bnV +bpA +bqH +bqH +bqH +bvj +bwH +byl +bzz +bzz +bBA +bqI +bpx +aZz +bbg +bHA +bJb +bKF +bMi +bNi +bOA +bQb +bRb +bSe +bSe +bUo +bKA +bWi +bHA +bXz +bYg +bYU +bSf +bTo +bSf +bIW +cbA +ccc +bIW +bSf +bSf +bTo +bYU +bYg +bXz +bHA +aYP +bjB +bjB +bjB +bjB +bjB +bjB +bjB +bjB +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgN +cgN +cjg +clC +cmd +cmK +cmd +cnZ +cjg +cjg +cqp +crh +cqp +cta +cta +cuZ +cvY +cwT +cvY +cwT +ctX +czm +cAg +cBc +ctW +cCJ +cDz +cEh +cBR +cFg +cgL +cgL +chb +cGu +cjV +chc +chc +chb +cgL +cjV +cIc +cIG +cIT +cIC +cJf +cjU +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(54,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +abC +aaa +abW +abW +abW +abW +abW +acH +acH +acH +acH +acH +afr +agn +ahj +ahU +aiC +ajv +ahV +alg +alH +amm +anm +aoa +alH +apY +anm +arT +alH +atW +anm +awo +alH +ayp +anm +aBf +afr +aDu +aEG +aGd +aHt +aIr +aJC +aJC +aLx +aJC +aJC +aHs +aPM +aRs +aSk +aTl +aTP +aNp +aNp +aNp +aWg +aLm +aLm +aLm +aaa +aaa +abC +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aZY +aZY +aZY +bbw +bbX +bbX +bdf +bdS +aZY +aZY +aZY +aZo +aZo +aZo +aZo +bkV +blW +bmO +bnW +bpB +bqI +bqI +bqI +bqI +bqI +bqI +bqI +bqI +bBB +bqI +bmO +aZz +aZX +bHA +bJc +bKF +bMh +bNi +bOA +bQb +bIW +bSf +bTo +bUp +bKA +bWi +bHA +bXA +bYh +bMf +bMf +bMf +bMf +bMf +cbB +ccd +ccu +ccu +ccu +ccu +ccu +cex +ceR +bHA +bHA +bHA +bjB +bjB +bjB +bjB +bjB +bjB +bjB +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cjg +cjg +cjg +clD +cmd +cmd +cmd +cmd +cjg +cjg +cjg +cri +cjg +cta +ctY +cva +cvY +cwU +cvY +cye +cta +czn +cAh +cBd +cBQ +cCJ +cDA +cEi +cBR +cFd +cgL +chc +chc +chc +chc +chc +chc +chc +chc +cjV +cIu +cIG +cIU +cll +cJg +cJb +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(55,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +abC +aaa +abW +abW +abW +abW +acH +acH +acH +acH +acH +afr +afr +ago +ahk +ahV +aiD +ajw +akr +alh +alH +amn +ann +ann +alH +apZ +ann +ann +alH +atX +anv +ann +alH +ayq +ann +ann +afr +aDv +aEH +aGe +aHu +aIs +aJD +aKI +aIs +aIs +aNH +aHs +aPL +aRt +aSl +aLm +aTQ +aUR +aUR +aUR +aWp +aWG +aWU +aXj +aXB +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +aYF +aZZ +bav +baX +bbx +bbY +bcz +bcz +bcz +bcz +bfu +aZY +aZo +aZo +aZo +aZo +bkX +blX +bmO +bnX +bpC +bqJ +bsg +btB +bvk +bwI +bym +bzA +bAC +bBB +bCJ +bmO +bFb +bGp +bHA +bJd +bKH +bMh +bNi +bOA +bQb +bIW +bSg +bTp +bUq +bIW +bWk +bHA +bXB +bYi +bYV +bZt +bYi +cas +cbb +cbC +cce +bMg +bMg +bMg +cdH +bMg +bMg +ceS +cfh +cfx +cfH +cfM +bjB +bjB +bjB +bjB +bjB +bjB +cgS +cgS +cgS +cgS +cgS +cgS +cgS +ciC +cjf +cjE +ckm +ckM +clE +clE +clE +cnp +coa +cjg +cjg +cmd +cmd +csr +cta +ctY +cva +cvY +cvY +cvY +cyf +cta +czo +cAi +cyU +cBR +cBR +cBR +cBR +cBR +cFd +cgL +cgL +cgu +cgu +chc +chc +chc +chc +chc +cjV +cjU +cjU +cIV +cjV +cJb +cJb +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(56,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +abD +abE +abE +abW +abW +abW +acH +acH +acH +acH +acH +afr +afL +agp +ahl +ahW +aiE +ajx +ahV +ali +alH +amo +ann +aob +alH +amo +ann +aob +alH +amo +ann +aob +alH +amo +ann +aob +afr +aDv +aEI +aGf +aHv +aIt +aJE +aKJ +aLy +aMI +aNI +aHs +aPL +aRt +aSm +aLm +aLm +aLm +aLm +aPl +aLm +aLm +aLm +aLm +aXC +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aZM +aZY +aZY +aZY +aZY +aZY +bcA +aZY +aZY +aZY +bfv +aZY +aZY +aZY +aZY +aZY +bkY +blY +bmO +bmO +bpD +bmO +bmO +btC +btC +btC +btC +bmO +bmO +bBC +bmO +cKS +bFc +bFc +bHA +bHA +bKI +bMj +bNl +bOC +bNl +bMj +bHA +bHA +bHA +bHA +bHA +bHC +bHA +bHA +bHA +bHA +bHA +bHA +bOC +cbD +ccf +bMj +bHA +bHA +bHA +cLh +bHA +bHA +bHA +bHA +bHA +cfN +cga +cga +cga +cga +cga +cga +cgT +cgT +cgT +cgT +cgT +cgT +cgT +ciD +cjg +cjg +cjg +ckN +cjg +cjg +cjg +cjg +cob +cjg +cjg +cjg +crj +cjg +cta +cta +cvb +cvZ +cwV +cxx +cyg +cta +czo +cAi +cBe +cBS +cCK +cDB +czG +chb +cFd +cgL +cgL +cgu +cgu +cgu +cgu +chc +chc +chc +cgN +cgS +cjU +cIW +cjU +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(57,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +abE +abE +abE +abE +acH +acH +acH +acH +acH +acH +acH +acH +afr +afr +afr +afr +ahX +aiF +ajy +aks +alj +alH +amp +ano +aoc +alH +amp +aqV +aoc +alH +amp +avb +aoc +alH +amp +azS +aoc +afr +cNw +aEI +aGg +aHs +aIu +aJF +aKK +aLz +aMJ +aNJ +aOM +aPL +aRt +aSn +aSU +aTR +aSU +aSU +aVJ +aSU +aVB +aSU +aSR +ary +ary +ary +ary +ary +ary +ary +ary +aYI +ary +ary +ary +ary +ary +ary +ary +ary +ary +baa +baw +baY +bby +bbZ +bcB +bcB +bdT +bcB +bfw +bcB +bhm +bcB +bcB +bkd +bkZ +blZ +bby +bcB +bpE +bcB +bsh +btD +bcB +bcB +bcB +bzB +bAD +bBD +bcB +bcB +bcB +bcB +bHD +cMy +bKJ +bcB +bcB +bOD +bcB +bcB +bSh +btD +bsh +bdT +bWl +bcB +bcB +bby +bcB +bcB +bZV +bcB +cbc +cbE +ccg +ccv +bcB +bdT +bAD +bcB +bsh +ceT +cfi +cfy +baa +cfO +cfO +cfO +cfO +cgp +cfO +cfO +cgU +cgU +cgU +cgU +cgU +cgU +cgU +cgU +cjh +cjF +cjF +ckO +clF +cme +cme +cnq +coc +cme +cpw +cqq +cme +css +ctb +ctZ +cvc +cvc +cNs +cvc +cyh +cyR +czp +cAi +cyU +cyU +cyU +cDC +czG +ckH +cFh +cFv +cgL +cgL +cgu +cgu +cgu +chc +chc +chc +cgN +cgS +cgS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(58,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +abE +abE +abW +acH +acH +acH +acH +abW +abW +acH +acH +acH +abW +afr +agq +ahm +ahY +aiG +ajz +cJt +akt +alI +amq +anp +aod +apk +aqa +anp +aod +asQ +aqa +anp +aod +axu +ayr +azT +aBg +afr +aDv +aEJ +aGh +aHs +aIv +aJG +aKK +aLA +aMK +aNK +aHs +aPL +cKd +aSo +aRD +aTS +aRD +aRD +aRD +aRD +aRD +aRD +aRP +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +bab +bax +baZ +bbz +bbz +bbz +bbz +bdU +bbz +bfx +bbz +bbz +biw +bbz +bbz +bla +bma +bmP +bmP +bpF +bqK +bsi +btE +cKM +bax +bax +bax +bax +bax +bax +bax +bax +bGq +cMw +bax +bKK +bax +bax +bax +bQc +bax +bSi +bTq +bax +bHE +bax +bax +bax +bax +bax +bax +bax +bGq +bSi +bKK +cch +ccw +bax +bHE +bax +bax +bax +bTq +bax +bax +bab +cfP +cfP +cfP +cfP +cfP +cfP +cfP +cgV +cgV +cgV +cgV +cgV +cgV +cgV +cgV +cji +cjG +cjG +ckP +cjG +cjG +cjG +cnr +cjG +cjG +cjG +cjG +cjG +cLt +ctc +ctZ +cvc +cvc +cwX +cvc +cyi +cyR +czq +cAj +cyU +cBT +cCL +cDD +czG +cER +ckH +cFw +cFv +chb +cgu +cgu +cgu +cgu +cgu +chc +cgN +cgS +cgS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(59,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +abE +abE +abW +acH +acH +abW +acO +acO +acO +acO +acO +acO +acO +acO +acO +afr +ahZ +aiH +ajA +aku +alk +alJ +amr +anq +aoe +ajF +ajF +ajF +arU +ajF +ajF +ajF +aoe +axv +ays +azU +aBh +aBj +aDv +aEI +aGi +aHw +aHx +aHx +aHx +aHx +aHx +aHx +aHx +aPL +aRt +aSp +aSN +aTT +aSN +aSN +aVK +aSN +aSN +aSN +aSP +arA +arA +arA +arA +arA +arA +arA +arA +arA +arA +arA +arA +arA +arA +arA +arA +arA +arA +bac +bay +bba +bbA +bbA +bbA +bbA +bdV +beE +bfy +bbA +bbA +bix +bbA +bbA +blb +bmb +bmQ +bnY +bpG +bqL +bsj +btF +bvl +bwJ +byn +bvl +bvl +bvl +bvl +bvl +bvl +bGr +cMx +bvl +bGr +bvl +bvl +bvl +bvl +byn +bSj +bmQ +bUr +bHF +bvl +bvl +bvl +bvl +bvl +bvl +bnY +cat +cbd +cbF +cci +ccx +ccL +cdq +cdI +bay +bay +ceU +bay +cTV +cTX +cfQ +cfQ +cfQ +cfQ +cfQ +cfQ +cfQ +cgW +chd +chd +cho +chd +chd +chd +chd +cjj +cTY +ckn +cjH +clG +cjH +cmL +cns +cod +coR +coR +coR +crk +cst +ctd +cta +cvd +cwa +cwY +cxy +cyj +cyS +czr +cAk +cBf +cBU +cBU +cBU +cBU +cBU +cBU +cBU +cFd +cgL +chc +chc +cgu +cgu +cgu +chc +cgN +cgN +cgS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(60,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abD +abE +abE +abW +acH +acH +abW +acO +acO +acO +acO +acO +acO +acO +acO +acO +acO +acO +afr +afr +afr +afr +alf +ams +anr +aof +apl +aof +aof +aof +aof +aof +apl +aof +axw +ayt +aof +aof +aCf +aDw +aEK +aGj +aHx +aIw +aJH +aKL +aLB +aJI +aNL +aON +aPL +aRt +aSl +aTm +aTm +aTm +aTm +cKf +aTm +aLm +aLm +aLm +aXD +aXD +aXD +aXD +aXD +aXD +aXD +aXD +aXD +aXD +aXD +aXD +aXD +aXD +aXD +aXD +aXD +aXD +aZY +baz +bbb +bbB +bbB +bbB +cKn +bbB +bbB +bbB +bbB +bbB +bbB +bbB +bbB +blc +bmc +bmR +blc +bbB +bqM +bsk +btG +bBK +bvs +bvs +bvs +bvs +cTv +cTv +cTv +cTv +cTD +bvs +cTE +cTE +cTE +cTE +cTE +cTE +cTE +bSk +bTr +bUs +cTE +cTE +cTE +bXC +cTO +cLg +bZa +bZW +cau +cbe +cbG +bZa +cTP +ccM +cTO +cdJ +cTO +cTO +cTO +cTO +cTW +aZY +cfR +cgb +cgb +cgb +cgb +cgb +cgb +cgX +cgX +cgX +cgX +cgX +cgX +cgX +ciE +cjg +cjg +cTZ +cUa +cUa +cUc +cUa +cUa +coe +cUa +cUa +cUm +crl +cjG +cte +cua +cve +cvc +cwW +cxz +cyk +cyR +czq +cAj +cBg +cBV +cCM +cCM +cCM +cCM +cCM +cBU +cFd +cgL +cjU +chc +cgu +cgu +cgu +chc +cgN +cgS +cgS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(61,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abE +abE +abE +abW +acH +acH +abW +acO +acO +adF +aea +aeB +aeB +aeB +aeB +agr +acO +aia +aiI +ajB +akv +ajB +afr +amt +anr +aof +aog +aog +aqW +arV +asR +aog +aog +aof +axx +ayt +aof +aof +aBm +aDv +aEI +aGj +aHx +aIx +aJI +aJI +aJI +aJI +aNM +aOO +aPL +aRt +aSq +aTn +aTU +aUS +aVp +aVL +aWq +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYP +aZn +aZy +bbc +bbB +bca +bcC +bdg +bbB +beF +bfz +bcD +bhn +biy +bjm +bke +bjp +bmd +bmS +bnZ +blc +bqN +bsl +btH +cTa +bvn +byo +bvm +bAE +bBE +bBE +bBE +bBE +bGs +bvm +bJf +bKL +bMk +bJe +bOE +bQd +bRc +bSl +bTs +bUt +bVs +bVs +bJe +bXD +bYj +bYm +bZu +bZX +bZD +cbf +cbH +ccj +ccy +ccN +aZY +cdK +ceb +ceb +ceb +cfj +cfz +cfj +cfS +bjB +bjB +bjB +bjB +bjB +bjB +cgS +cgS +cgS +cgS +cgS +cgS +cgS +ciF +cjk +cjk +cko +ckQ +clH +cmf +cmM +cnt +cof +cjg +cgN +cUn +crm +cjG +ctf +cub +cvf +cwb +cwZ +cvc +cyl +cta +czs +cAl +cBh +cBW +cCN +cCN +cCN +cCN +cFi +cBU +cFJ +cFv +cnb +clV +chc +chc +chc +chc +cgN +cgN +cgS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(62,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abE +abE +abW +abW +abW +abW +abW +acO +acO +adG +aeb +aeC +aeY +afs +afM +ags +ahn +aib +aiJ +ajC +akw +akw +afr +ams +anr +cJu +aog +aqb +aqX +arW +asS +atY +aog +cJv +axw +ayt +aof +aBi +afr +aDu +aEL +aGk +aHy +aIy +aJJ +aJJ +aLC +aMM +aNN +aOP +aPL +aRu +aSr +aTo +aTV +aUT +aVq +aVM +aWq +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYP +aZn +aZA +baB +bbB +bcb +bcD +bdh +bbB +beG +bfA +bgv +bho +biz +bjn +bkf +bld +bme +bmT +boa +bpH +bqO +bsm +btI +cTb +bvo +bvo +bzC +bAF +bBF +cMt +bBF +bFd +bGt +bvm +bJg +bKM +bMl +bNm +bKO +bKO +bRd +bSl +bTs +bUu +bVt +bWm +bJe +bJe +bJe +bYm +bZv +bZY +bZD +cbf +cbI +cck +ccy +bYm +aZY +bbX +bbX +bbX +ceV +aZY +aZY +aZY +bjB +bjB +bjB +bjB +bjB +bjB +bjB +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cjg +cjg +cjg +cmg +cmN +cnu +cog +cjg +cgN +cUn +crn +cjG +ctf +cta +cvg +cwc +cxa +cxB +cym +cyT +czt +cAm +cBi +cBX +cCO +cDE +cEj +cDE +cFj +cBU +chc +cFd +cgL +cgL +chc +chc +chc +cjV +chc +cgN +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(63,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abE +abE +abW +abW +abW +abW +abW +acO +acO +adH +aec +aeD +aeD +aeD +aeD +agt +acO +acO +afr +ajD +akx +akx +akx +amu +anr +aoh +apm +apo +asT +arX +cLR +atZ +avc +aoh +axw +ayt +afr +aBj +afr +aDv +aEM +aGl +aHz +aIz +aJK +aKM +aLD +cMj +aNO +aHx +aPN +aRv +aSs +aTp +aTW +aUU +aVr +aVN +aWq +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYP +aYT +aZn +aZz +bbd +bbB +bcc +bcE +bdi +bdW +beH +bfB +bgw +bhp +biA +bjo +bkg +ble +bmf +bmU +bob +bpI +bqP +bsn +btJ +cTc +bvp +bvp +bzD +bvp +bvp +bCK +bEf +bFe +bGu +bvm +bJh +bKN +bMm +bJe +bKO +bQe +bMn +bSl +bTs +bUu +bVt +bVt +bWT +bXE +bYk +bYm +bYX +bYX +bZD +cbf +cbJ +bYX +ccz +ccO +aZY +bbX +bbX +bbX +bbw +aZY +aYP +bjB +bjB +bjB +bjB +bjB +bjB +bjB +bjB +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgN +cgN +cgN +cjg +cmh +cmO +cnv +coh +cjg +cgN +cUn +cro +csu +ctg +cta +cvh +cwd +cxb +cxC +cyn +cta +czu +cAn +cBj +cBY +cCP +cDF +cDF +cES +cFk +cBU +chc +cFd +cgL +cgL +cgL +cgL +cgL +cnb +chc +cgN +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(64,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abE +abE +abE +abW +abW +abW +abW +acO +acO +adI +aed +aeE +aeZ +aft +afN +agu +aho +aic +aiK +ajE +aky +aky +aky +amv +ans +aoi +apn +aqc +aqZ +arY +aqc +aua +avd +awp +axy +ayu +azV +aBk +azV +aDx +aEN +aGm +aHA +aIA +aJL +aKN +aLE +aMN +aNP +aHx +aPO +aRw +aSl +aTm +aTm +aTm +aVs +aTm +aTm +abE +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +aZc +aYP +aYP +aZn +aZm +baA +bbe +bbC +bcd +bcF +bdj +bbB +beI +bfC +bgx +bhq +biB +bjp +bkh +blf +bmg +bmV +bjp +blc +bqQ +bax +btK +cTd +bvq +bvq +bvm +bAG +bBG +bCL +bBG +bFf +bGv +bvm +bJe +bJe +bJe +bJe +bOF +bKO +bRe +bSl +bTs +bUv +bVu +bVu +bJe +bXF +bYl +bYm +bZw +bZX +bZD +cbf +cbK +bZX +ccy +ccP +aZY +cdL +cec +cec +bbw +aZY +aYP +bjB +bjB +bjB +bjB +bjB +bjB +bjB +bjB +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgN +cgN +cgN +cjg +cjg +cjg +cjg +cjg +cjg +cgN +cUn +crp +cjG +cth +cLw +cvi +cwe +cvY +cxD +cyo +cta +czv +cAj +cBk +cBV +cCQ +cDF +cEk +cES +cFk +cBU +chc +cFw +cGv +cGv +cGv +cHi +cFv +chb +chc +cgN +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aac +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(65,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abE +abE +abE +abW +abW +abW +abW +acO +acO +adJ +aee +aeF +afa +afu +afO +agv +ahp +aid +aiL +ajF +ajF +ajF +ajF +amw +ans +aoj +apo +aqd +ara +arZ +ara +ara +ara +awq +axz +ayv +azW +aBl +azW +aDy +aEO +aGj +cJP +aHx +aHx +aHx +aHx +aHx +aHx +aHx +aPP +aRt +aSl +aLm +abW +abW +abW +abW +abW +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYP +aYT +aYT +aZn +bad +baB +aZn +bbB +bce +bcG +bdk +bbB +beJ +bcD +bgx +bhq +biB +bjp +bki +blg +bmh +bmS +boc +bpJ +bqR +bax +btL +bBL +bwK +byp +bvm +bAH +bBG +bCM +bBG +bFf +bGw +bBK +bJi +bKO +bKO +bKO +bKO +bQf +bRf +bSl +bTs +bUu +bVt +bWm +bJe +bJe +bJe +bYm +bZx +bZY +bZD +cbf +cbI +bZY +ccA +ccQ +aZY +aZY +aZY +aZY +aZY +aZY +aYP +aYP +bjB +bjB +bjB +bjB +bjB +bjB +bjB +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgN +cgN +cgN +cgR +cgR +cgR +cgR +cgN +cgN +cgN +cgN +cUr +crl +cjG +cti +cta +cvj +cwf +cxc +cxE +cyp +cta +czw +cAo +cBl +cWl +cWn +cWn +cWn +cWq +cBV +cBU +chc +chc +chc +cjX +cgL +cgL +cFd +ckH +chc +chc +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aac +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(66,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abE +abE +abE +abW +abW +abW +abW +acO +acO +adK +aef +aef +afb +aee +afP +agw +acO +acO +afr +ajG +akz +akz +akz +amx +anr +aok +app +aqe +cLQ +arX +arb +apo +ave +awr +axA +ayw +afr +aBm +afr +aDz +aEI +aGf +cNC +aIB +cNJ +cNP +cNV +cJT +cJX +cKa +cKb +aRt +aSl +aLm +abW +abW +abW +abW +abW +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYP +aYT +aYT +aZn +aZA +baB +aZn +bbB +bcf +bcG +bcD +bbB +beK +bcF +bgx +bhq +biB +bjp +bkj +bjp +bmi +bmS +bjp +bbB +bqS +bax +btM +bBL +bwL +byq +bzE +bAI +byr +bCN +bAI +bFg +byr +bBL +bJj +bKP +bMn +bMn +bMn +bQg +bQg +bSl +bTs +bUu +bVt +bVt +bWT +bXE +cMG +bYm +bZA +cML +bZD +cbf +cbL +cML +ccB +ccR +cdr +cdr +cdr +cdr +cdr +cdr +cdr +aYP +aYP +bjB +bjB +bjB +bjB +bjB +bjB +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgS +cgN +cgN +cgN +cgR +cgR +cgR +cgR +cgN +cgN +cgN +cgN +cTZ +cUu +cUw +ctj +cVw +cWf +cWf +cWf +cWf +cyq +cWf +czx +cAp +cWk +cWm +cCR +cDG +cEl +cWr +cET +cET +cET +cET +cET +cET +cET +cET +cFd +cgL +cyK +chc +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aad +aac +aac +aac +aac +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(67,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abE +abE +abE +abW +abW +abW +abW +acO +acO +adL +aef +aef +aef +aef +afQ +adM +ahn +aib +aiM +ajH +akw +akw +afr +amy +anr +cJv +aog +aqf +arc +arW +asU +aub +aog +cJu +axw +ayt +aof +aBi +afr +aDv +cNx +aGn +cND +aIC +cNK +cNQ +cNQ +cJU +cNQ +cOm +cKc +aRt +aSl +aLm +abW +acH +acH +abW +abW +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYP +aYT +aYT +aZn +aZA +baC +bbf +bbD +bcg +bcH +bdl +bdX +beL +bfE +bbB +bhr +biC +bjq +bkk +bjq +bmj +bmW +bod +bpK +bqT +bso +btM +bvr +bwM +byr +byr +bwM +byr +bCO +bwM +bFg +byr +bBL +bJk +bKO +bMo +bNn +bNn +bNn +bNn +bSm +bTt +bUw +bVv +bVv +bJe +bXF +bYl +bYm +bZz +bZZ +cav +cbg +cbM +ccl +ccC +ccS +cds +cdM +ced +ccW +ceW +cfk +cdr +aYP +aYP +bjB +bjB +bjB +bjB +bjB +bjB +cgS +cgS +cgS +cgS +cgS +chM +chM +chM +chM +chM +chM +chM +chM +chM +chM +chM +chM +chM +chM +chM +crl +cjG +ctk +cVx +cvk +cwg +cxd +cuc +cyr +cwg +czy +cAq +cwh +cCa +cCS +cDH +cEm +cWs +cET +cFl +cFl +cFZ +cFl +cFl +cGV +cET +cFd +cgL +chb +chc +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aac +aac +aac +aac +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(68,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abE +abE +abE +abW +abW +abW +abW +acO +acO +adM +aeg +aeG +afc +afv +aeG +agx +acO +aia +aiN +ajB +akA +ajB +afr +amz +anr +aof +aog +aog +aqW +asa +asR +aog +aog +aws +axw +ayt +aof +aof +aBj +aDu +cNy +cNB +cNE +aID +cNH +aKO +cNX +cOc +cOg +cOn +cOt +aRt +aSl +aLm +abW +acH +acH +abW +abW +abE +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYP +aYP +aYP +aYX +aZL +baD +aZn +bbB +bch +bch +bch +bch +bch +bfF +bgy +bhs +biD +bjr +bkl +blh +bmk +bjp +boe +bbB +bqU +bax +btM +bvr +bwM +bys +byr +bwM +byr +bCN +bwM +bFg +byr +bBL +bJl +bKQ +bMp +bNo +bOG +bOG +bOG +bSn +bTu +bUx +bVt +bWm +bJe +bJe +bJe +bYm +bZA +bZA +bZD +bZD +cbL +bZA +ccD +ccT +cdt +cdN +cee +cdt +ceX +cfl +cdr +cdr +aYP +aYP +aYP +bjB +bjB +bjB +bjB +cgS +cgS +cgS +cgS +cgS +chM +cif +ciG +ciG +ciG +ciG +ciG +ciG +ciG +cmP +chM +coi +coS +cpx +chM +crq +csv +ctl +cud +cvl +cwh +cxe +cxF +cys +cwh +czz +cAr +cyU +cBZ +cCT +cDI +cEn +cET +cET +cFl +cFl +cGa +cFl +cFl +cFl +cET +cFd +cGu +cjU +chc +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aac +aac +aac +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(69,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abE +abE +abE +abW +abW +abW +abW +acO +acO +acO +acO +acO +acO +acO +acO +acO +acO +acO +afr +afr +afr +afr +alf +amy +anr +aof +apq +aof +aof +aof +aof +aof +apq +aof +axw +ayt +aof +aof +aCf +aDw +aEK +aGo +aES +aIF +aES +aES +aES +aES +aNQ +cOo +aPR +cOA +aSz +cOE +adZ +adZ +aez +aez +aWr +aWr +aWr +aWr +aXE +abW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYT +aYT +aYT +aZn +aZA +baB +aZn +aZn +bch +bcI +bcK +bcK +bch +cKo +bch +bch +biE +bch +bkm +bli +bli +bli +bch +bch +bqU +bax +btM +bvr +bwM +byr +byr +bwM +bBH +bCP +bwM +bFh +bGx +bBL +bJm +bJm +bMq +bNp +bJm +bJm +bJm +bJm +bTv +bUu +bVt +bVt +bWT +bXE +bYk +bYm +bZB +caa +caw +caw +cbN +caa +ccE +ccU +cdu +cdO +cef +cey +cdr +cfm +cfA +cdr +aYP +aYP +aYP +bjB +bjB +bjB +bjB +cgS +cgS +cgS +cgS +cgS +chM +cig +ciH +ciH +ciH +ciH +ciH +ciH +ciH +cmQ +cnw +coj +coT +cpy +chM +crl +csw +ctm +cVy +cvm +cwi +cxf +cue +cyt +cyU +czo +cAj +cyU +cBZ +cCU +cDI +cEo +cET +cET +cFl +cFl +cFl +cFl +cGF +cFl +cET +cFd +cgL +chc +chc +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aac +aac +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(70,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abE +abE +abE +abW +abW +acH +acH +acO +acO +acO +acO +acO +acO +acO +acO +acO +acO +acO +aiO +ajI +akB +all +alK +amA +ant +aol +apr +apr +apr +aol +asV +apr +apr +aol +axB +ays +azU +aBn +aBm +aDv +cNx +aGp +cNF +cNG +cNF +aKQ +cNY +cOd +cOh +aOQ +cOu +cOB +aSl +cOF +aez +adZ +aez +aez +aWs +aWH +aWV +aXk +aXE +aXE +aXE +abC +abC +abC +abC +abC +abC +aaa +aaa +aaa +aaa +aaa +aYT +aYT +aYT +aZn +aZA +baE +aZm +aZn +bch +bcJ +bcN +bdY +beM +bfG +bgz +bht +biF +bjs +bkn +bjw +bjw +bjw +bof +bch +bqU +bax +btM +bvr +bwM +byr +byr +bwM +byr +cMu +bwM +bFg +bGy +bBL +bJn +bKR +bMr +bNq +bOH +bQh +bRg +bJm +bJm +bUy +bVw +bVw +bJe +bXF +bYl +bYm +bZA +bZA +cax +bZD +bZA +cML +ccB +ccV +cdv +cdP +ceg +ccW +ceY +cfn +cfB +cdr +aYP +aYP +aYP +bjB +bjB +bjB +bjB +cgS +cgS +cgS +cgS +cgS +chM +cig +ciH +ciH +ciH +ciH +ciH +ciH +ciH +cmQ +cnw +coj +coU +cpz +chM +crl +cjG +ctn +cVz +cuf +cuf +cuf +cuf +cyu +cuf +czA +cAs +cBm +cCb +cCV +cDJ +cEp +cEU +cET +cFl +cFl +cFl +cFl +cGG +cFl +cET +cFd +ckH +cgu +chc +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aad +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(71,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abE +abE +abE +abW +abW +acH +acH +abW +abW +abW +abW +abW +abW +abW +abW +abW +agy +agy +aiP +ajJ +ajJ +alm +afr +amB +anp +aom +aps +aqg +anp +aom +asW +aqg +anp +aom +axC +ayx +azT +aBo +afr +aDu +aEQ +aGq +aHE +aIG +aHE +aKR +aHC +aHC +cOi +aOR +aPS +aRt +aSl +cOF +aez +adZ +apx +afq +aWs +aWI +aWW +aXl +aXF +aXT +aXF +aYn +aYn +aYn +aYn +aXB +abC +abC +abC +abC +abC +abC +aYT +aYT +aYT +aZn +aZA +baB +bbg +aZn +bch +bcK +bcI +bcK +bcN +bfH +bch +bhu +biG +bjt +bko +bjw +bjt +bjw +bjw +bch +bqU +bax +btN +bBL +bwM +byr +byr +bwM +byr +bCN +bwM +bFg +bGz +bBL +bJo +bJr +bMr +bNr +bOI +bOI +bRh +bSo +bJm +bJm +bJm +bJm +bJm +bJm +bYm +bYm +bZC +bZX +bZD +bZD +bZw +ccm +ccB +ccW +cdw +cdQ +ceh +cez +cdr +cfo +cfC +cdr +aYP +aYP +aYP +bjB +bjB +bjB +bjB +cgS +cgS +cgS +cgS +cgS +chM +cig +ciH +ciH +ciH +ckp +ciH +ciH +ciH +cmQ +chM +cok +coU +cpA +chM +crr +cjG +cto +cVz +cvn +cwj +cxg +cxG +cyv +cuf +czw +cAt +cBl +cCc +cCc +cCc +cCc +cET +cET +cET +cFK +cFl +cFl +cGH +cET +cET +cFd +clV +cgu +chc +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aad +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(72,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +abW +abW +abW +acH +acH +acH +abW +abW +abW +abW +abW +abW +abW +agy +agz +aiQ +agA +ajJ +ajJ +afr +amC +anu +aon +alH +amC +ard +aon +alH +amC +avf +aon +alH +amC +azX +aon +afr +aDv +aEI +aGr +aES +cNH +aES +cNR +cNZ +aHC +cOj +aES +aPT +aRt +aSl +cOF +aez +aez +afq +aVO +aWt +aWJ +aWX +aXm +aXE +aXE +aXE +abC +abC +abC +abC +aYA +abC +aaa +aaa +aaa +aaa +aYP +aYT +aYT +aYT +aZn +bae +baF +bbh +aZn +bch +bcL +bdm +bdZ +bcN +bfI +bch +bhv +biG +bju +bkp +blj +bml +bjw +bjw +bch +bqU +bax +btO +bBL +bwN +byt +bzF +bAJ +bBI +bCQ +bEg +bFi +bGA +bBL +bJp +bKU +bMs +bNs +bOJ +bQi +bRi +bSp +bJm +bUz +bVx +bJr +bVx +bUz +bYm +bYW +bZx +bZY +bZD +bZD +bZx +bZY +ccF +ccX +cdr +cdr +cdr +cdr +cdr +cLj +cdr +cdr +aYP +aYP +aYP +bjB +bjB +bjB +bjB +cgS +cgS +cgS +cgS +cgS +chM +cih +ciH +ciH +ciH +ckq +ciH +ciH +ciH +cmQ +cnx +col +coV +cpB +cqr +crs +csx +ctm +cVz +cvo +cwk +cxh +cxH +cyw +cuf +czo +cAj +cBk +cCc +cCW +cDK +cEq +cEU +cFm +cFx +cFL +cGb +cGw +cGI +cGW +cET +cFd +cgL +cgu +chc +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(73,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +abW +abW +abW +abW +abW +acH +acH +acH +acH +acH +abW +abW +abW +afR +afR +agA +agA +agA +agA +afr +amD +ann +aoo +alH +amD +ann +aoo +alH +amD +ann +aoo +alH +amD +ann +aoo +afr +aDA +aEI +aGs +aHB +cNI +cNN +aKT +aHC +aHC +cOk +cOp +cOt +aRy +aSu +cOF +aez +afV +alR +anC +aWs +aWs +aWr +aWs +aXE +abW +aaa +aaa +aaa +aaa +abC +aYA +abC +aaa +aaa +aaa +aaa +aYP +aYT +aYT +aYT +aZn +aZm +aZA +baB +aZn +bch +bcM +bdn +bea +beN +beN +bgA +bhw +biH +bjv +bkq +blk +bmm +bmX +bjw +bch +bqV +bsp +btP +bBL +bvm +bvm +bzG +bvm +bvm +bCR +bvm +bFj +bvm +bBL +bJq +bKT +bMs +bNs +bOK +bQj +bRj +bSp +bJm +bJr +bVx +bWn +bVx +bJr +bYm +bYX +bZD +bZD +bZD +bZD +bZD +bZD +bYX +ccY +cdx +cdx +cdx +bYm +cdr +cfp +cdr +aZn +aYP +aaa +bjB +bjB +bjB +bjB +bjB +cgS +cgS +cgS +cgS +cgS +chM +cig +ciH +ciH +ciH +ckr +ciH +ciH +ciH +cmQ +chM +com +coW +cpC +cqs +crt +csy +ctf +cug +cvp +cwl +cxi +cxI +cyx +cyV +czB +cAu +cBn +cCc +cCW +cDK +cEr +cCc +cFn +cFy +cFM +cGc +cGx +cGJ +cFn +cCc +cHr +cGu +cjU +chc +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(74,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +abW +abW +abW +abW +abW +acH +acH +acH +acH +acH +abW +acH +acH +afR +afR +agy +ajJ +agA +agA +afr +amE +anv +ann +alH +aqh +ann +ann +alH +auc +ann +ann +alH +ayy +ann +ann +afr +aDB +cNy +aKS +aKS +aII +aJN +aIH +aKS +aKS +aNR +cOq +cOw +aRx +aSt +cOJ +aez +afq +aoR +apu +aez +adZ +abW +abW +abW +aaa +aaa +aaa +aaa +aaa +abC +aYA +abC +aaa +aaa +aaa +aaa +aYP +aYP +aYP +aYP +aYP +aZn +aZA +baB +bbE +bci +bcN +bcN +beb +beO +bfJ +bch +bhx +biI +bjw +bjw +bjw +bjw +bjw +bog +bch +bqU +bax +btQ +bBL +bwO +byu +bzH +bzH +bzH +bCS +byv +bFk +byv +bBL +bJr +cMB +bMs +bNs +bOK +bQk +bRk +bSq +bJm +bJr +bVy +bJr +bJr +bJr +bYm +bYY +bZD +cab +cab +cab +cab +bZD +bYX +ccY +cdx +cdx +cdx +bYm +cLi +aZA +bad +aZo +aYP +aaa +aaa +aaa +aaa +aaa +aaa +cgS +cgS +cgS +cgS +cgS +chM +cig +ciH +ciH +ciH +ciH +ciH +ciH +ciH +cmQ +cnw +con +coX +cpD +chM +cru +cjG +ctf +cug +cvq +cwm +cxj +cxJ +cyy +cyW +czy +cAj +cyU +cCc +cCX +cDL +cEs +cEV +cEs +cEs +cEs +cGd +cEt +cGK +cEt +cCc +cHr +cgL +chc +chc +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(75,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +acH +abW +abW +acH +acH +acH +acH +acH +abW +acH +acH +acH +afR +agz +ahq +agA +agA +afr +amF +anw +aop +alH +aqi +anw +asb +alH +aud +anw +awt +alH +ayz +anw +aBp +afr +aDC +aER +aGu +aHH +aIJ +cNN +cNS +cOa +cOe +cOl +cOp +cOt +aRt +aSv +cOF +adZ +apx +anC +aez +aez +abW +abW +abW +akG +aaa +aaa +aaa +aaa +aaa +abC +aYA +abC +aaa +aaa +aaa +aaa +aaa +aaa +aZc +aYT +aYT +aZo +aZn +baF +bbh +bch +bch +bch +bch +bch +bch +bch +bhy +biJ +bjx +bkr +bll +bmn +bmY +boh +bch +bqU +bax +btO +bBL +bwP +cMs +bzI +byv +byv +bCT +cMs +bFk +bGB +bBL +bJs +bJr +bMr +bNs +bKR +bKR +bKR +bKR +bTw +bUA +bVz +bWo +bVz +bUA +bYm +bYX +bZD +cab +bZD +cbh +cab +bZD +bYX +ccZ +bYX +bYX +bYX +bYm +cfq +aZA +aZo +aZo +aYP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgS +cgS +chM +cig +ciH +ciH +ciH +ciH +ciH +ciH +ciH +cmQ +cnw +con +coY +cpE +chM +crl +cjG +ctf +cuh +cvr +cwn +cxk +cxK +cyz +cyX +cvl +cAv +cBo +cCc +cCY +cDM +cNu +cEt +cEt +cFz +cEt +cEt +cNu +cGL +cGX +cCc +cFd +cgL +cgu +cgu +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(76,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +acH +acH +acH +abW +abW +abW +acH +acH +acH +acH +afR +agy +agy +agA +agA +agA +agA +afr +afr +afr +afr +afr +afr +afr +afr +afr +afr +afr +afr +afr +afr +afr +afr +afr +aDD +aES +aGv +aES +aES +aES +aES +aGv +aES +aES +aES +cOx +aRt +aSl +cOF +adZ +aUV +anC +aez +aez +abW +abW +abW +abW +aaa +aYe +aYe +aYe +aYe +aYe +aYA +aYe +aYe +aYe +aYe +aYe +aaa +aaa +aYP +aYT +aYT +aYT +aZn +bbi +bbF +bcj +bcj +bdo +bbh +bad +aZn +bch +bch +bch +bch +bch +bch +bch +bch +boi +bch +bqU +bax +btR +bBL +bwQ +byw +bzJ +byw +bBJ +bCU +bEh +bFl +bGC +bBL +bJt +bKV +bMt +bNs +bOL +bQl +bRl +bSr +bTx +bJu +bJu +bJu +bJu +bJu +bYn +bYZ +bZE +bZD +cay +bZD +bZD +bZE +bYX +ccY +cdx +cdx +cei +bYm +bCW +aZA +aZn +aZn +aYP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +chM +cii +ciI +ciI +ciI +ciI +ciI +ciI +ciI +cmR +chM +coo +coZ +cpF +chM +crl +cjG +ctf +cui +cvs +cwn +cwn +cxL +cyA +cuf +czo +cAw +cBp +cCc +cCY +cDM +cEt +cEt +cEt +cEt +cEt +cEt +cEt +cEt +cEt +cHj +cHs +cgL +cgu +cgR +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(77,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +acH +acH +acH +abW +abW +abW +acH +acH +acH +afR +agy +agA +agA +agA +agA +ajJ +agA +agy +agy +agy +agy +agy +agy +agy +adZ +adZ +adZ +adZ +adZ +adZ +adZ +azY +aBq +aCg +aDE +aET +aGw +aHI +azY +aJR +cNT +aJR +aJR +aJR +aLm +aPV +aRt +aSl +cOF +adZ +aUW +anC +aez +aez +abW +abW +aaa +aaa +aaa +aYf +aYf +aYf +aYf +aYf +aYB +aYJ +aYJ +aYJ +aYJ +aYJ +aaa +aaa +aYP +aYT +aYT +aYT +aZn +aYX +bbG +aZA +aZA +aZA +baF +bcj +bcj +bcj +bhz +biK +bjy +bks +blm +bmo +bmZ +boj +bpL +bqW +bsi +btS +bBL +bwR +bvm +bvm +bAK +bBK +bvs +bvs +bvs +bvs +bHG +bJu +bJu +bJu +bNt +bJu +bJu +bJu +bJu +bTy +aZn +aZo +aZo +aZo +aZn +bYo +bZa +bZa +bZa +bZa +bZa +bZa +bZa +bZa +cda +bYm +bYm +bYm +bYm +bCW +bGo +aYX +aYP +aaa +aaa +aaa +aaa +aad +aad +aad +aaa +aaa +aaa +aaa +aaa +chM +chM +chM +chM +chM +chM +chM +chM +chM +chM +chM +chM +chM +chM +chM +cNo +cNp +cNq +cVz +cvt +cwo +cxl +cxM +cyB +cuf +czC +cAx +cBq +cCc +cCY +cDN +cEu +cEW +cFo +cEW +cEW +cEW +cGy +cGM +cGY +cCc +cHt +cgL +cgu +cgR +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(78,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +acH +abW +abW +abW +acH +acH +acH +afR +agz +ahq +agA +agA +agA +agA +agy +aig +agy +agy +agA +agA +agy +agy +afS +afS +afS +afV +afV +adZ +adZ +azY +aBr +aCh +aDF +aEU +aGx +aHJ +aIK +aJO +aJQ +aJQ +aJR +aNS +aLm +aPW +aRz +cMl +cOF +aez +anN +ayB +afS +aez +adZ +abW +aaa +aaa +aaa +aYg +aYg +aYg +aYg +aYg +aYC +aYg +aYg +aYg +aYg +aYg +aaa +aaa +aaa +aYP +aYT +aYT +aYT +aZo +aZn +aZn +aZm +aZA +bec +bbi +aZA +aZA +bbE +biL +bjz +bkt +bln +bmp +aZm +bok +aZm +bqX +bbz +btT +cTe +bwS +byx +bzK +cKQ +cKR +bCV +aZo +aZn +bGD +bkb +bkb +bKW +bMu +bNu +bkb +bQm +bkb +bSs +aZB +bbg +aZo +aZo +aZo +aZo +bFm +bkb +bkb +bkb +caz +bkb +bkb +ccn +bkb +bMu +bkb +bkb +bkb +ceA +bCY +bFn +aZo +aYP +aaa +aad +aaa +aaa +aad +aad +aad +aaa +aaa +aad +aaa +aaa +abC +cgN +cgN +cgR +cgR +cgR +cgR +cgN +cgN +cgN +cgN +cgN +cgR +cgR +cjg +crl +cjG +ctp +cVz +cuf +cuf +cuf +cuf +cuf +cuf +cue +cAy +cBr +cue +cCZ +cDO +cue +cEX +cFp +cFB +cEt +cGe +cGz +cGN +cGZ +cCc +cFd +cgL +chc +cgR +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(79,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +abW +abW +abW +abW +acH +afR +agA +agA +aie +agA +agA +akC +agz +alL +akD +amG +amG +alN +agA +agy +afV +asX +aue +avg +afS +axD +adZ +azY +aBs +aCi +aDG +aEV +aGy +aHK +aIL +aJP +aJP +aJP +aMQ +aNT +aLm +aPQ +aRt +aSl +cOF +aez +afq +anC +afq +aez +adZ +abW +aaa +aaa +aaa +abC +abC +abC +abC +abC +arw +abC +abC +abC +abC +abC +aaa +aaa +aaa +aYP +aYT +aYT +aYT +aYT +aYT +aYT +aZo +aZo +aZn +aZm +aZn +aZn +aZn +aZm +bjA +bku +blo +bmq +aZm +bol +aZm +bqY +bbz +btU +bvt +bwT +byy +bBL +bAL +bBL +bCW +aZA +bFm +bCY +aZA +bbi +aZA +aZA +aZA +aZA +bbi +aZA +bSt +bkb +bkb +bkb +bkb +bkb +bMu +bCY +aZA +bbi +aZz +bad +bbg +aZo +aYX +aZo +bqE +aZA +bWp +bbi +ceB +aZn +aZn +aZo +aYT +aYP +aaa +aaa +aaa +aad +aad +aad +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +cgN +cgN +cjl +cjl +cjl +cjl +cjl +cgN +cgN +cgN +cgR +cLp +crv +cst +cte +cUr +cvu +cwp +cxm +cxN +cyC +cue +czD +cAz +cBs +cCd +cDa +cDP +cue +cue +cCc +cCc +cFN +cCc +cCc +cCc +cHa +cCc +cHu +cgL +chc +cgR +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(80,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaQ +abe +aaQ +abC +abC +abC +abC +abC +abC +abC +abC +ads +abW +abW +abW +abW +acH +afR +agA +agA +agA +agA +agA +akD +aln +alM +amG +anx +amG +amG +akC +agz +afV +akp +auf +akp +afS +afq +akq +cJJ +aBt +aCj +aDH +aDI +aGz +aHL +aIK +aJQ +aJQ +cMf +aMR +aNU +aLm +aPX +aRt +aSx +cOF +aez +aez +anC +afq +aez +adZ +abW +aaa +aaa +aaa +aYe +aYe +aYe +aYe +aYe +arw +aYe +aYe +aYe +aYe +aYe +aaa +aaa +aaa +aYP +aYP +aYP +aYT +aYT +aYT +aYT +aYT +aYT +aYP +aYT +aYT +aYT +aZo +aZm +aZm +aZm +aZm +aZm +aZm +bom +aZm +bqZ +bab +baa +bvm +bwU +bvm +bzL +bAM +bBM +bCX +bkb +bCY +bbg +aZn +aZm +bKX +bKX +bKX +bKX +aZm +aZn +bSu +aZn +bUB +aZA +bWp +aZA +aZA +aZA +aZo +aZm +cac +aZm +aZo +aZo +aZo +cbO +cbO +cbO +cbO +cbO +ceC +cbO +aYP +aYT +aYT +aYP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +cgN +cjl +ckR +clI +cmi +cjl +cjl +cjl +cjl +cjl +cjl +crl +cjG +cte +cUn +cvv +cwq +cwq +cxO +cyD +cue +czE +cAA +cwg +cCe +cDb +cyU +cEv +cue +chc +cCc +cLM +cGf +cFI +cFI +cHb +cGv +cHv +cGu +cjU +cgR +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(81,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaQ +abf +aaQ +aaQ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +abW +abW +abW +acH +afR +agy +agA +aif +aiR +ajK +agy +agy +alN +alN +amG +amG +agA +afR +afR +afV +asY +akp +avh +awu +axE +ayA +azY +aBu +aCk +aDI +aEW +aDI +aDI +aIM +aJR +aJR +aJR +aJR +aJR +aOT +aPQ +aRt +aSm +cOF +aez +afq +anC +afq +aez +adZ +abW +aaa +aaa +aaa +aYf +aYf +aYf +aYf +aYf +arw +aYJ +aYJ +aYJ +aYJ +aYJ +aaa +aaa +aaa +aYP +aYP +aYP +aYT +aYT +aYT +aYT +aYT +aYT +aYP +aYT +aYT +aYT +aYT +aYP +aYP +aYP +aYP +aYP +aZm +bon +bpM +cRM +arz +arz +bvm +bwV +byz +bzM +bkb +bkb +bCY +bbi +bFn +aZn +aZn +aZm +bjB +bjB +bjB +bjB +aZm +aZn +aZn +aZo +aYX +aZn +aZn +aZo +aZo +aZo +aZo +aZm +cad +aZm +aYP +cbO +cbO +cbO +cdb +cdy +cdR +cdc +ceD +cbO +cbO +aYT +aYT +aYP +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +chN +ciJ +cjl +cjl +cks +ckS +clJ +cmj +cjl +cny +cop +cpa +cpG +cjl +crw +csz +ctq +cuj +cvw +cwr +cxn +cxP +cyE +cue +czF +cAB +cBt +cCf +cyU +cDQ +cue +cue +chc +cCc +cFO +cLN +cxT +ckH +cln +cgL +cgL +cmA +chc +cgN +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(82,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaQ +abg +abt +abF +aaQ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +acH +acH +agy +agy +aig +afR +afR +afR +afR +afR +afR +afR +afR +agy +afR +aez +afV +afV +afV +afV +afV +afq +anC +cJK +aBt +aCl +aDJ +aDI +aGA +aHL +aIK +aJQ +aJQ +aJQ +aMS +aJR +aOU +aPY +aRA +aSy +cOR +aTX +ahr +aVt +aVP +aez +adZ +akG +abC +abC +abC +aYg +aYg +aYg +aYg +aYg +arw +aYg +aYg +aYg +aYg +aYg +abC +abC +abC +abC +abD +aYP +aYP +aYP +aYP +aYP +aYP +aYP +aYT +aYT +aYT +aYT +aYT +aYP +aYP +bjB +bjB +bjB +bjB +arw +bpN +cRM +arz +arz +bvm +bwW +bvm +aZn +aZn +aZn +aZn +aZm +aZn +aZn +aZm +aZm +bjB +aaa +aaa +bjB +aZm +aZm +aYP +aYT +aYT +aYP +aYP +aYT +aYT +aYT +aYT +aZm +cac +aZm +aYP +cbO +cco +ccG +cdc +cdf +cdf +cdc +ceE +ceZ +cbO +aYT +aYT +aYP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +chN +cij +ciK +cjl +cjI +cjl +ckT +clJ +cmk +cmS +cnz +cnz +cnz +cnz +cqt +crx +csx +ctr +cUn +cjg +cws +cxo +cxo +cxo +cxo +czG +cue +cBu +cCg +cDc +czG +czG +czG +cxo +cxo +cxo +cjU +cnL +cjT +coD +cgL +chc +cgu +cgu +cgR +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aag +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(83,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaQ +abh +abu +abG +aaQ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +abW +abW +adZ +adZ +adZ +aez +aez +aez +aez +aez +aez +aez +aez +adZ +adZ +aez +adZ +aez +aez +adZ +afS +afq +ayB +cJK +aBs +aCm +aDK +aEX +aGB +aDK +aIN +aJS +aJS +aJS +aMT +aNV +aOV +aPZ +aRB +aSl +cOS +aTY +afq +afV +aez +aez +adZ +abW +aaa +aaa +aaa +abC +abC +abC +abC +abC +arw +abC +abC +abC +abC +abC +aaa +aaa +aaa +aaa +aXn +aaa +aaa +aaa +aaa +aaa +aYP +aYP +aYT +aYT +aYT +aYT +aYT +aYP +bjB +aZc +aaa +aaa +aaa +arw +bpN +cRM +arz +aSQ +bvu +bwX +bjB +aYP +aYP +aYP +aYP +aYP +aYP +aYP +aYP +bjB +aaa +aaa +aaa +aaa +bjB +aYP +aYP +aYP +aYP +aYP +aYP +aYP +aYP +aYP +aYP +bjB +bjB +bjB +aYP +cbO +ccp +cbO +cdd +cdy +cdy +cco +cej +cfa +cbO +aYT +aYT +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +chO +cik +ciL +cjm +cjJ +cjm +ckU +clK +ckU +ckU +ckU +ckU +ckU +ckU +cqu +cry +cjG +cte +cUn +cvx +cwt +cxo +cxQ +cyF +cyY +czH +cAC +cBv +cCh +cBz +cDR +cEw +cxQ +cyF +cyY +cxo +chc +clq +cgL +cgL +ckF +chc +cgR +cgR +cgR +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(84,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaR +abi +abt +abH +aaQ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +adZ +adZ +adZ +adZ +adZ +adZ +adZ +adZ +adZ +aez +aez +aez +aez +aez +aez +aez +aez +aez +aez +adZ +afq +anC +azY +aBv +aCn +aDL +aEY +aGC +aHM +aIK +cMf +aJQ +aJQ +aMU +aNW +aLm +aQa +aRt +aSl +cOF +anC +aez +aez +aez +aez +abW +abW +aaa +aaa +aaa +aYe +aYe +aYe +aYe +aYe +arw +aYe +aYe +aYe +aYe +aYe +aaa +aaa +aaa +aXn +aaa +aaa +aaa +aaa +aaa +aaa +aYP +aYP +aYP +aYP +aYP +aYP +aYP +aYP +aaa +abC +aaa +aaa +aaa +arw +bpN +cRM +arz +aSQ +bvv +arw +aaa +aYP +aYP +aaa +aaa +aaa +abD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bjB +bjB +aYP +aYP +bjB +bjB +aYP +aYP +aYP +aYP +aYP +bjB +bjB +bjB +aYT +cbO +cbO +ccH +cde +cdz +cdS +cej +cdf +cfb +cbO +aYP +aYP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +chP +cil +ciM +cjl +cjK +cjl +ckV +clJ +clJ +cmT +clJ +coq +cpb +cpb +cqv +crz +cjG +cts +cUn +cgL +cln +cxo +cxR +cyG +cyY +czI +cAD +cBw +cCi +cBA +cDS +cEx +cxQ +cyF +cFC +cxo +chc +cln +cgL +cgL +chc +chc +cgR +cgN +cgN +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(85,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaR +abi +abu +abI +aaQ +aaQ +aaQ +abC +abC +abC +abC +abC +abC +abC +abC +abC +afw +afS +afw +afq +afq +aiS +adZ +adZ +adZ +alO +afS +aez +aez +aez +aez +aez +aez +adZ +aug +aqG +afq +afq +anC +azY +aBw +aCo +aDM +aEZ +aGD +aHN +azY +azY +azY +cJK +azY +azY +aLm +aQb +aRt +aSl +cOF +aTZ +aez +aez +abW +abW +abW +abW +aaa +aaa +aaa +aYf +aYf +aYf +aYf +aYf +arw +aYJ +aYJ +aYJ +aYJ +aYJ +aaa +aaa +aXn +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZc +aYP +aYP +aYP +aYP +aYP +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +bpN +cRM +arz +aSQ +bvv +arw +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bjB +bjB +bjB +bjB +bjB +bjB +aYP +aYP +aYP +aYP +bjB +bjB +bjB +aYT +aYT +aYT +cbO +cdf +cdf +cdf +cdf +cco +cbO +cbO +aYP +aYP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +chP +ciN +cjl +cjl +cks +ckW +clJ +cml +cjl +cnA +cor +cpc +cpH +cjl +crA +cjG +cte +cUn +cgL +cln +cxo +cxS +cyH +cyZ +czJ +cAE +cBx +cCj +cDd +cDT +cEy +cEY +cyH +cFD +cxo +chc +cln +cgL +chb +chc +cgN +cgR +cgN +cgN +cgS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(86,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaR +abi +abu +abJ +abX +ack +act +acI +acI +acI +acI +acI +acI +acI +acI +acI +afx +afT +agB +ahr +aih +aiT +ahr +ahr +ahr +ahr +amH +afq +aoq +adZ +adZ +afV +alR +afq +akq +avi +afq +afq +anC +azY +azY +azY +azY +azY +azY +azY +azY +aqm +aug +aEi +aMV +aNX +aLm +aQc +aRt +aSl +cOV +aTr +cPs +abW +abW +abW +abW +abW +aaa +aaa +aaa +aYg +aYg +aYg +aYg +aYg +arw +aYg +aYg +aYg +aYg +aYg +aaa +aaa +aXn +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aYP +aYP +aYP +aYP +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +bpN +cRM +arz +aSQ +bvv +arw +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZc +bjB +bjB +bjB +bjB +bjB +aYP +aZc +aaa +aaa +abC +bjB +aYT +aYT +aYT +aYT +cbO +cdg +cdA +cdf +cek +cbO +cbO +aYP +aYP +bjB +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgN +cgN +cjl +ckX +clL +cmm +cjl +cjl +cjl +cjl +cjl +cjl +crB +cjG +cte +cUn +ckG +clq +cxo +cxo +cxo +cxo +cxo +cxo +cBy +cNt +cDe +cxo +cxo +cxo +cxo +cxo +cxo +chc +cln +cgL +cGu +cjU +cgN +cgR +cgN +cgS +cgS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(87,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaQ +abj +abv +abK +abF +aaQ +aaQ +abC +abC +abC +abC +abC +abC +abC +abC +abC +afw +afw +afS +afS +afS +adZ +ajL +akq +akq +afq +amI +ahr +ahr +ahr +aqj +ahr +asc +asZ +asZ +asZ +awv +aox +ayC +azZ +aBx +aCp +aDN +aFa +aBx +aBx +aBx +aJT +aBx +aBx +aCp +aBx +aOW +aQd +aRC +aSz +aTr +aUa +cPt +abW +abW +abW +abW +abW +aaa +aaa +aaa +abC +abC +abC +abC +abC +arw +abC +abC +abC +abC +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +bpN +cRM +arz +aSQ +bvv +arw +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +abC +bjB +aYP +aYP +aYT +aYT +cbO +cdh +cdh +cdh +cdh +cbO +aYP +aYP +aYP +aaa +aaa +aaa +aaa +aaa +aaa +aag +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgN +cgN +cjl +cjl +cjl +cjl +cjl +cgN +cgN +cgN +cjg +cqw +crC +cjG +cte +cUn +cgL +cln +cxo +cxQ +cyF +cyY +czK +cAF +cBz +cCk +cBz +cDU +cEz +cxQ +cyF +cyY +cxo +chb +cln +cgL +cgL +chc +cgN +cgN +cgN +cgN +cgS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(88,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaQ +abk +abw +abL +abY +acl +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +afy +afU +agC +ahs +afV +adZ +aez +aez +alo +afq +aez +aez +adZ +afq +aeU +afo +aot +amJ +apw +avj +apu +afS +ayD +aAa +afq +afq +afq +apx +afK +afq +aqH +aoy +afq +afq +afq +akq +akH +aQa +aRD +aSl +aTq +aUb +cOV +aTr +aTr +cPs +abW +abW +aaa +aaa +aaa +aYe +aYe +aYe +aYe +aYe +aYA +aYe +aYe +aYe +aYe +aYe +aaa +aaa +aXn +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +bpN +cRM +arz +aSQ +bvv +arw +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +abC +arw +abC +aYP +aYP +aYP +aYT +bjB +bjB +bjB +bjB +aYP +aYP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgR +cgR +cgN +cgN +cgN +cgN +cgN +cgN +cgN +cgN +cgR +cjg +cqx +crC +cjG +cte +cVM +cvy +cln +cxo +cxR +cyI +cyY +czL +cAD +cBA +cCi +cBA +cDS +cEA +cxQ +cyF +cFC +cxo +cgL +cln +cgL +cgu +cgu +cgR +cgR +cgN +cgN +cgS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(89,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaQ +aaQ +aaQ +aaQ +aaQ +aaQ +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +afw +afw +agD +aht +afV +adZ +adZ +aez +aez +aez +aez +aez +aeU +afo +aot +amJ +aox +anz +adZ +aeV +akq +afS +ayE +aAb +aBy +aBy +aBy +aBy +cMc +cMc +cMc +cMc +cMc +aGE +aGE +aGE +aGE +aQe +aRD +aSl +aTq +aUc +aUX +aVu +aVQ +cPt +abW +abW +aaa +aaa +aaa +aYf +aYf +aYf +aYf +aYf +aYD +aYJ +aYJ +aYJ +aYJ +aYJ +abC +abC +aXn +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +bpN +cRM +arz +aSQ +bvv +arw +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aad +aad +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +abC +arw +abC +aYP +aYP +aYP +bjB +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgR +cgR +cgN +cjL +cjL +cjL +cgN +cgN +cgN +cgR +cgR +cjg +cqy +crC +csw +ctr +cUn +cvz +cln +cxo +cxS +cyH +cyZ +czM +cAE +cBz +cCl +cBz +cDT +cEB +cEY +cyH +cFD +cxo +cgL +cln +cgL +cgu +cgR +cgR +cgR +cgN +cgN +cgR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(90,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +afV +afS +aht +afV +adZ +adZ +adZ +adZ +aez +aez +adZ +aeV +amJ +aqk +anz +adZ +adZ +adZ +aeV +akq +afS +ayF +aAc +aBz +aCq +aDO +aFb +aGE +aHO +aIO +aJU +aGE +aLH +aGE +aNY +aGE +aQa +aRD +aSl +aTq +aUd +aUc +aVv +aVR +cPt +abW +abW +aaa +aaa +aaa +aYg +aYg +aYg +aYg +aYg +aYA +aYg +aYg +aYg +aYg +aYg +aaa +aaa +aXn +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +bpN +cRM +arz +btV +bvv +arw +aaa +aaa +aaa +aaa +aad +aaa +abC +aaa +aaa +aaa +aad +aac +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +abC +arw +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgR +cgR +cjL +cjL +cjL +cjL +cjL +cjL +cjL +cjL +cgR +cjg +cjg +crD +cjG +cte +cUn +cjX +cln +cxo +cxo +cxo +cxo +cxo +cxo +cBB +cCm +cDf +cxo +cxo +cxo +cxo +cxo +cxo +cgL +cln +cjX +cjU +cjU +cjU +cjV +cjV +cjU +cgR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(91,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +afV +ahu +afS +adZ +adZ +adZ +adZ +aez +aez +afV +aor +amK +adZ +adZ +adZ +adZ +adZ +aeV +akq +afV +ayG +aAd +aBA +akp +akp +aFc +aGE +aGE +aIP +aGE +aGE +aLI +aGE +aNZ +aGE +aQa +aRD +aSl +aTq +aUe +aUc +aUc +aVS +cPt +abW +abW +aXn +aXn +aaa +aaa +abC +aaa +aaa +aaa +aYE +aaa +aaa +aaa +abC +aaa +aaa +aXn +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +bpN +cRM +arz +aSQ +bvv +arw +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aad +aaa +aaa +abC +aaa +aaa +abC +arw +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgR +cgR +cjL +cjL +ckY +clM +cjL +cjL +cjL +cjL +cjL +cjL +cqz +crC +cjG +cte +cUn +cgL +clo +cxo +cxQ +cyF +cyY +czN +cAG +cBz +cCn +cBz +cDV +cEC +cxQ +cyF +cyY +cxo +cjX +cln +cgL +cjU +cHk +cll +cHL +cIa +cjU +cgR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(92,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +afV +afV +ahv +afS +adZ +adZ +adZ +adZ +aez +aez +aez +aeV +amK +adZ +are +are +are +are +avk +akH +are +afV +afV +aBB +akp +akp +aFd +aGE +aHP +aHP +aHP +aHP +aLJ +aHP +aHP +aGE +aQa +aRD +aSl +aTq +aUf +aUc +cMm +aVT +cPt +abW +abE +aaa +aaa +aXn +aaa +abC +aaa +aaa +aaa +abC +aaa +aaa +aaa +abC +aaa +aXn +aaa +aaa +aaa +aaa +aag +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +bpN +cRM +arz +aSQ +bvv +arw +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +abC +arw +abC +aaa +aag +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgR +cgR +cgR +cjL +cjL +ckZ +clN +cmn +cmU +cnB +cjL +cjL +cjL +cjL +crC +cjG +ctt +cUn +ckG +cln +cxo +cxR +cyF +cyY +czO +cAD +cBA +cCi +cBA +cDS +cED +cxQ +cyI +cFC +cxo +cGg +cln +cpX +cHc +cvy +cll +cll +cIb +cjV +cgR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(93,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +afV +agE +ahw +afS +adZ +adZ +adZ +adZ +adZ +aez +aez +aos +amK +aez +are +asd +ata +auh +avl +aww +axF +ayH +are +aBC +aCr +aCr +aFe +aGE +aHP +aIQ +aIQ +aKW +aLK +aHP +aOa +aGE +aQa +aRE +aSt +aTq +aUg +aUc +aUc +aVT +aWu +abE +abE +aaa +aaa +aaa +aXn +aXn +aaa +aaa +aaa +abC +aaa +aaa +aaa +aXn +aXn +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +bpN +cRM +arz +aSQ +bvv +arw +aaa +aaa +aac +aaa +aaa +aaa +abC +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aad +aaa +aaa +aaa +abC +aaa +aaa +abC +arw +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgR +cgR +cgR +cjL +cjL +cla +clO +cmo +cmV +cmV +cos +cpd +cpI +cpd +crx +csx +ctu +cUn +chb +cln +cxo +cxS +cyH +cyZ +czP +cAE +cBz +cCh +cBz +cDT +cEE +cEY +cyH +cFD +cxo +cgL +cln +cGu +cjV +cHl +cHw +cHM +cIc +cjU +cgS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(94,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +afV +agF +ahx +afV +afV +afV +adZ +adZ +adZ +adZ +aeU +aot +amK +adZ +arf +ase +cLS +atb +atb +atf +axG +atf +are +are +are +are +arf +are +are +aGE +aGE +aKX +aLL +aMW +aGE +aGE +aQa +aRD +aSl +aTq +aUh +aUc +aUc +aVU +aWu +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aXn +aXn +aXn +aXn +aXn +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aab +aab +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +bpN +cRM +arz +aSQ +bvv +arw +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +abC +arw +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgN +cgR +cgR +cgR +cjL +cjL +clb +clO +cmp +cmW +clN +cot +cpe +cpJ +cpe +crE +cjG +ctv +cUn +cgL +cln +cxo +cxo +cxo +cxo +cxo +cxo +cBC +cCh +cDg +cxo +cxo +cxo +cxo +cxo +cxo +chb +cln +cgL +cjU +cjU +cll +cll +cll +cIv +cgS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(95,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +afW +agG +ahy +aii +aiU +ajM +akE +afo +afo +afo +any +aou +amK +akq +are +cJE +atc +aui +avm +atf +avl +aww +aAe +aww +aCs +aDP +aFf +aGF +are +aIR +aJV +aKY +aLM +aJX +aOb +are +aQf +aRF +aSs +aTs +aUi +aUY +aUc +aVV +aWu +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aab +aab +aab +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +bpN +cRM +arz +aSQ +bvv +arw +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +abC +arw +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aac +aac +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgN +cgN +cgN +cgN +cjL +cjL +clc +clO +cmq +cmX +cmX +cou +cpf +cpK +cpf +crF +cjG +ctv +cUn +cgL +cnM +cxo +cxQ +cyF +cyY +czQ +cAH +cBz +cCh +cBz +cDW +cEF +cxQ +cyF +cyY +cxo +cgL +cln +ckH +cgu +cjU +cHx +cHN +cId +cIv +cgS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(96,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +afW +agH +ahz +ahB +aiV +ajM +akE +afo +ale +afo +afo +aov +apt +aql +are +ase +atd +auj +avn +awx +atf +atf +atf +atb +axG +aDQ +aFf +aGG +are +aIR +aJX +aKZ +aLN +aMX +aOc +are +aQg +aRG +aSA +aTt +aUj +aUZ +aVw +aVW +cPt +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +bpN +cRM +arz +aSQ +bvv +arw +aaa +aaa +aaa +aaa +aad +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +abC +arw +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgN +cgR +cgN +cgN +cjL +cjL +ckZ +clN +cmr +cmU +cnC +cjL +cjL +cjL +cjL +crG +cjG +ctv +cUn +chb +cln +cxo +cxR +cyJ +cyY +czR +cAD +cBA +cCp +cBA +cDS +cEG +cxQ +cyF +cFC +cxo +cgL +cln +cnX +cgu +cjV +cjV +cjV +cjU +cjU +cgR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(97,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aac +aac +aac +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +afW +agI +ahA +ahw +aiW +afV +adZ +adZ +adZ +afS +alR +aeV +anC +aqm +are +asf +atb +atb +atb +atf +axH +cLS +aAf +atd +axG +aDR +aFf +aGF +are +aIR +aJX +aKZ +aLM +aJX +aOc +are +aQh +aRD +aSm +cOW +aTr +aTr +aTr +aTr +cPB +abW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aaa +aaa +aab +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +bpN +cRM +arz +aSQ +bvv +arw +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aZt +aZt +aZt +aZf +aZI +aZf +aZf +aZf +aaa +aaa +aaa +abC +aaa +aaa +abC +arw +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgN +cgN +cgR +cgR +cjL +cjL +cld +clP +cjL +cjL +cjL +cjL +cjL +cjL +cqz +crH +cjG +ctv +cUn +ckG +cln +cxo +cxS +cyH +cyZ +czS +cAE +cBD +cCq +cBz +cDT +cEH +cEY +cyH +cFD +cxo +ckF +cln +cgL +cgu +cgR +cgR +cgN +cgN +cgN +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(98,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aac +aac +aac +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +afW +agJ +ahB +aij +aiX +afS +adZ +adZ +adZ +afq +amJ +aow +apu +adZ +are +asg +ata +ata +ata +ata +ata +ayI +aAg +aBD +aCt +aDR +aFf +aGF +are +aIR +aJX +aKZ +aLM +aJX +aOd +are +aQh +aRD +aSl +cOF +acH +acH +acH +acH +abW +abW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aaa +aaa +aaa +aaa +aaa +aaa +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +bpN +cRM +arz +aSQ +bvv +arw +aaa +aaa +aaa +aaa +aaa +aaa +abD +aaa +aaa +aZf +aZf +aZt +aZt +aZt +aZt +aZt +aZf +aZf +aZf +aZf +aZf +aZf +aZI +aZt +aZt +aZf +aZf +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgN +cgN +cgR +cgR +cjL +cjL +cjL +cjL +cjL +cjL +cjL +cjL +cgN +cgN +cjg +crC +cjG +ctv +cUn +cgL +cln +cxo +cxo +cxo +cxo +cxo +cAI +cBE +cBE +cBE +cAI +cxo +cxo +cxo +cxo +cxo +chc +cln +cgL +cgu +cgR +cgR +cgN +cgN +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(99,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aac +aac +aad +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +afW +agK +ahC +aik +afS +afS +adZ +adZ +adZ +afq +amK +adZ +adZ +adZ +are +ash +atf +auk +avo +awy +awy +ayJ +aAh +atf +axG +aDS +are +are +are +are +are +aKZ +aLM +are +are +are +aQi +aRD +aSl +cOF +acH +acH +acH +acH +abW +abW +abC +abC +abC +abC +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aab +aaa +aab +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +bpN +cRM +arz +aSQ +bvv +arw +aaa +aaa +aaa +aaa +aaa +aaa +aZt +aZt +aZt +aZt +aZt +aZt +aZt +aZt +aZt +aZt +aZt +aZt +aZt +aZt +aZt +aZt +aZt +aZt +aZf +aZf +aZf +aZt +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgR +cgN +cgN +cgN +cgN +cgN +cjL +cjL +cjL +cgN +cgN +cgN +cgN +cgN +cgN +ckN +crI +cst +ctv +cVX +cgL +cjt +clg +cxT +cmA +chc +czT +cAJ +cAK +cAK +cAK +cDX +cEI +cEZ +cFq +czT +cFP +cGh +coD +cgL +chc +cgR +cgR +cgN +cgN +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(100,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aac +aac +aac +aac +aac +aac +aac +aac +aac +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +afV +agL +ahw +ail +afS +adZ +adZ +adZ +adZ +afq +amM +adZ +apv +apv +apv +asi +atg +aul +apv +apv +cJI +ayK +aAi +aBE +aCu +aDT +aFg +aFg +aHQ +aIS +aJY +aDT +aLO +aFg +aFg +aOX +aQj +aRH +aSl +cOF +acH +acH +acH +acH +aUk +aUk +aUk +aUk +aUk +aUk +aUk +abC +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aaa +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +bpN +cRM +arz +aSQ +bvv +arw +aaa +aaa +aaa +aZf +aZt +aZt +aZt +aZH +aZH +aZH +aZt +aZt +aZt +aZt +aZt +aZt +aZH +aZH +aZH +aZH +aZt +aZt +aZt +aZt +aZf +aZf +aZf +aZf +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgN +cgN +cgN +cgN +cgR +cgR +cgR +cgR +cgN +cmY +cmY +cmY +cmY +cmY +cjg +crJ +csu +ctw +cUn +cgL +cgL +cln +cxT +cxT +cpX +czU +cAK +cBF +cAK +cBF +cAK +cEJ +cEZ +cFr +cFE +cFQ +cGi +cgL +cGu +cjU +cgN +cgN +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(101,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aac +aad +aac +aac +aac +aac +aac +aac +aac +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +afV +agM +ahD +ahw +afV +adZ +adZ +adZ +adZ +afq +amK +adZ +apv +aqn +arg +asj +ath +aum +arg +awz +apv +ayL +aAj +aBF +awy +aDU +awy +awy +aHR +aIT +awy +aDU +awy +awy +awy +aOY +aQk +aRI +aSt +aTu +aUk +aUk +aUk +aUk +aUk +aWK +aWL +aXo +aXG +aXU +aUk +abC +aaa +aaa +aaa +aaa +aad +aab +aab +aab +aaa +aaa +aaa +aaa +aab +aac +aac +aad +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +bpN +cRM +arz +aSQ +bvv +arw +aaa +aaa +aaa +aZt +aZt +bAd +bAd +bBN +bBN +bBN +bBN +bBN +bBN +bAd +bAd +bAd +bBN +bBN +bBN +aZH +aZH +aZt +aZt +aZt +aZt +byS +cae +byS +aZt +aZt +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgR +cgN +ciO +ciO +ciO +ciO +ciO +cgN +cgN +cmY +cnD +cov +cpg +cpL +cqA +crK +cjG +ctv +cUn +chc +cgL +cjt +clg +cyK +chc +czT +cAL +cBG +cCr +cBG +cDY +cEI +cEZ +cFs +czT +cnL +coD +cgL +cgL +cgu +cgR +cgR +cgN +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(102,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aac +aac +aad +aad +aab +aab +aad +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +afV +afV +ahv +afV +afV +adZ +adZ +adZ +alP +akq +amK +adZ +apv +aqo +arh +ask +ath +aun +avp +awA +axI +axI +axI +aBG +aCv +aDV +axI +axI +axI +axG +atf +aLa +atf +atf +atf +aOZ +aQl +aRF +aSs +aTv +aUl +aVa +aVx +aVX +aWv +cKg +aWv +aWv +aWv +aXV +aUk +abC +aaa +aaa +aaa +aaa +aac +aac +aab +aab +aaa +aaa +aaa +aab +aab +aac +aad +aad +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +bpN +cRM +arz +btW +bvv +arw +aaa +aaa +aaa +aZt +bAd +bAd +byS +bDa +bBN +bBN +bBN +bBN +bAd +bAd +byS +bDc +byQ +bTz +bAd +bAd +bAd +bAd +bBN +aZH +aZt +cMH +bYK +byS +aZt +aZt +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgR +cgN +ciO +cjn +cjM +ckt +ciO +cgR +cgN +cmY +cnE +cow +cph +cpM +cqB +crL +cjG +ctv +cUn +cjU +ckG +ckH +cln +chc +chc +czT +czT +czT +czT +czT +czT +czT +czT +czT +czT +cln +cgL +cgL +cmF +cgu +cgR +cgR +cgN +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(103,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aag +aaa +aac +aac +aac +aad +aab +aab +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +afV +ahu +afV +adZ +adZ +adZ +adZ +alQ +amJ +anz +adZ +apv +apv +apv +ask +ath +auo +apv +apv +axI +ayM +aAk +aBH +aCw +aDW +aAk +aGH +axI +aIU +aJZ +aLb +aJZ +aMY +cJZ +are +aQm +aRJ +aSl +aTw +aUm +aVb +aVy +aVY +aWw +aWL +aWw +aXp +aXH +aXW +aUk +abC +aaa +aaa +aaa +aaa +aaa +aad +aac +aab +aad +aab +aab +aad +aac +aac +aab +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +bpN +cRM +arz +aSQ +bvv +arw +aaa +aaa +aZf +aZt +bAd +bAd +bFo +byQ +byQ +bBN +bBN +bBN +byQ +byQ +byQ +byQ +byQ +byQ +byQ +bEi +byQ +bWU +byS +bAd +bAd +byS +cae +cMH +aZH +aZt +aZt +aZt +aZt +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +cgN +ciO +cjo +cjM +cku +ciO +cgR +cgN +cmY +cnF +cox +cpi +cpN +cqA +crM +cjG +ctx +cUn +chc +cgL +ckH +cjt +clg +chc +chc +chc +chc +cCs +chc +chc +chc +chc +chc +cnL +coD +chb +chc +chc +cgu +cgR +cgR +cgN +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(104,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +afV +afS +aht +afS +adZ +adZ +adZ +adZ +afq +amK +aez +aez +apv +aqn +ari +ask +ath +auo +arg +awz +axI +ayN +aAl +aBI +aCw +aDX +aFh +aGI +axI +aIV +aIW +aLc +aIW +aMZ +are +aPa +aQh +aRD +aSB +aTx +aUn +aVc +aVz +aVZ +aWx +cKh +aWw +aWw +aWw +aWL +aUk +abC +aaa +aaa +aaa +aaa +aaa +aad +aac +aac +aac +aab +aab +aac +aac +aac +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +bpN +cRM +arz +aSQ +bvv +arw +aaa +aaa +aZt +bAd +bAd +byQ +byP +byP +byP +byP +byP +byP +byP +byP +byP +byP +byO +byP +byP +byP +byP +byP +byP +byP +byP +byO +caf +bBN +bBN +aZt +aZt +aZt +aZt +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aac +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgN +ciO +cjp +cjN +ckv +ciO +cgR +cgN +cmY +cnG +cnG +cmY +cpO +cmY +cjF +cjG +ctv +cUn +chc +chc +chc +chb +cjt +cjT +cjT +cjT +cBH +cCt +cjT +clg +cEK +cnL +cjT +coD +cgL +cgu +cgu +cgR +cgR +cgR +cgN +cgN +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aac +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(105,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +afV +agN +aht +afS +adZ +adZ +adZ +afS +alR +amL +aez +aez +apv +aqp +arj +asl +ath +aup +avq +awB +axI +axI +axI +aBI +aCw +aDY +axI +axI +axI +cJQ +aIW +aIW +aIW +aIW +are +aPb +aQh +aRD +aSm +aTu +aUk +aUk +aUk +aUk +aUk +aWN +aWL +aXq +aWL +aXU +aYh +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aac +aac +aab +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +bpN +cRM +arz +aSQ +bvv +arw +aaa +aaa +aZt +bBN +bBN +bDb +byP +bGE +bGE +bGE +bGE +bGE +bGE +bGE +bAd +bAd +bAd +bAd +bPt +bVA +bDa +byQ +byQ +byQ +byQ +byQ +byP +byP +bAd +aZt +aZt +aZt +aZt +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgN +ciO +ciO +cjO +ckw +ciO +ciO +cgN +cgN +abC +abC +cmY +cpP +cmY +cjF +cjG +ctv +cUn +cgN +chc +chc +ckz +cgL +cgL +cgL +ckH +cgL +ckz +cgL +cjt +cng +coD +cgL +cgL +ckz +cgu +cgR +cgR +cgR +cgR +cgN +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aab +aac +aac +aac +aac +aac +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(106,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +afV +agO +ahE +afS +adZ +adZ +adZ +aez +alS +amM +aez +aez +apv +apv +apv +asm +ath +aup +apv +apv +axI +ayM +aAk +aBI +aCw +aDY +aAk +aGJ +axI +aIX +aKa +aLd +aLP +aNa +are +aPc +aQh +aRD +aSl +cOF +acH +acH +acH +acH +aUk +aUk +aUk +aUk +aUk +aUk +aUk +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aad +aad +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +abC +abC +abC +abC +abC +abC +abC +aaa +aaa +aaa +arw +bpN +cRM +arz +aSQ +bvv +arw +aaa +aZt +aZt +bBN +bBN +byQ +byP +bGE +bHH +bHH +bKY +bMv +bHH +bOM +bOM +bOM +bOM +bOM +bOM +bOM +bOM +bOM +bOM +bOM +bOM +bOM +byQ +bYK +byS +bAd +bBN +bBN +bAd +bAd +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgR +ciO +cjP +ckx +cle +ciO +cgR +cgN +aaa +aaa +cmY +cpQ +cmY +crN +cjG +cty +cWe +cgN +cgN +chc +cjV +chc +cjX +cgL +ckH +cgL +cjU +cgL +cgL +cgL +cgL +cjX +chc +cjU +cgu +cgR +cgR +cgR +cgR +cgN +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aac +aac +aac +aac +aac +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(107,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +afV +agP +afS +afS +adZ +adZ +adZ +aez +alT +amN +anA +adZ +apv +aqq +arg +asl +ath +aup +arg +awz +axI +ayO +aAm +aBJ +aCw +aDZ +aFi +aGK +axI +are +are +arf +are +are +are +are +aQn +cMk +aSC +cOF +acH +acH +abE +abE +abE +abC +abC +abC +abC +abC +abC +aaa +aaa +aaa +aaa +aaa +aaa +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +abC +abC +aZd +aZd +aZd +aZd +aZe +aZf +aZI +aZf +aaa +aaa +arw +bpN +cRM +arz +aSQ +bvv +arw +aZt +aZt +aZt +bAd +bAd +byQ +byO +bGE +bHI +bJv +bKZ +bMw +bMw +bOM +bQn +bRm +bQn +bOM +bUC +bVB +bUC +bOM +bXG +bYp +bXG +bOM +byQ +byP +byP +bAd +bBN +byQ +cdi +byS +byS +byS +abC +abC +abC +abC +abC +abC +aaa +aaa +aab +aad +aaa +aaa +aaa +aaa +abC +abC +abC +abC +abC +ciO +ciO +ciO +cky +clf +ciO +cgR +cgN +aaa +aaa +aaa +arw +cjg +cjh +cji +ctz +cjg +cgN +cgN +chc +cgR +cgu +cgu +cgu +cgu +chc +chc +chc +chc +cgu +cgu +cgu +cgu +cgR +cgR +cgR +cgR +cgR +cgR +cgN +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aac +aac +aac +aac +aac +aab +aab +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(108,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +afV +agQ +afV +abW +abW +adZ +adZ +aez +aez +afq +amK +adZ +apv +aqr +ark +asn +ati +aup +avr +awC +axI +axI +axI +aBK +aCw +aDZ +axI +axI +axI +abW +abW +abW +abW +abW +abW +aLm +aQh +aRD +aSl +cOF +acH +abE +abE +abE +aWy +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +abC +abC +aZd +aZd +aZd +baJ +aZr +aZC +bhA +cKj +aZt +aZt +aZf +aZf +aaa +arw +bpN +cRM +arz +aSQ +bvv +arw +aZt +aZt +aZH +bAd +bAd +bEi +byP +bGE +bHJ +bHJ +bKZ +bMx +bMx +bOM +bQn +bRn +bQn +bOM +bUC +bVC +bUC +bOM +bXG +bYq +bXG +bOM +bAd +byQ +byP +byP +bAd +byQ +bFq +cdB +bLA +cdB +aZf +arw +arw +arw +abC +abC +abC +aaa +aac +aad +aac +aaa +aaa +abC +abC +arw +arw +arw +arw +ciP +cjq +cjQ +ckw +ciO +ciO +cgR +cgN +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +cgN +cgN +cgN +cgR +cgR +cgR +cgR +cgR +cgN +cgN +cgN +cgN +cgR +cgR +cgR +cgR +cgR +cgN +cgN +cgN +cgN +cgN +cgN +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aac +aac +aac +aac +aac +aac +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(109,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +abW +abW +adZ +aez +aez +afq +amK +adZ +apv +apv +apv +apv +atj +apv +apv +apv +axI +ayM +aAk +aBJ +aCw +aDZ +aAk +aGH +aHS +aHS +aHS +aHS +aHS +aHS +abW +aLm +aQh +aRD +aSx +cOF +abE +abE +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +abC +aZd +aZd +aZd +bcO +bbk +bed +beP +bck +bgB +bhB +aZe +aZt +aZt +aZf +aZf +aaa +arw +bpN +cRM +arz +aSQ +bvv +arw +aZf +aZt +aZH +bAd +byS +byQ +byP +bGE +bHK +bHK +bKZ +bMy +bMy +bOM +bQo +bRo +bSv +bOM +bUD +bVD +bWq +bOM +bXH +bYr +bZb +bOM +bAd +bPt +caM +byP +byP +byP +byP +cMH +cMH +byS +aZI +abC +abC +abC +aaa +aaa +aaa +aaa +aac +aac +aad +aaa +aaa +aaa +aaa +abC +abC +abC +cim +ciO +ciO +ciO +ciO +ciO +cgR +cgR +cgN +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +cgN +cgN +cgN +cgR +cgR +cgR +cgR +cgR +cgR +cgR +cgN +cgN +cgR +cgR +cgR +cgR +cgR +cgN +cgN +cgN +cgN +cgN +cgN +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aac +aac +aab +aac +aac +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(110,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +abW +acH +acH +aez +aez +afq +amK +adZ +adZ +alo +arl +akq +aqG +auq +aoq +awD +axI +ayP +aAn +aBL +aCx +aDZ +aFj +aGL +aHS +aIY +aKb +aLe +aLQ +aHS +abW +aLm +aQo +aRD +aSl +aTy +abE +abE +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aZd +aZd +aZr +aZC +aZQ +bbj +bbj +aZC +beQ +bfK +cMo +bhC +aZe +aZt +aZt +aZf +aZf +aZf +arw +bpN +cRM +arz +aSQ +bvv +arw +aZf +aZt +aZH +bBN +bCZ +byP +byP +bGE +bGE +bGE +bLa +bGE +bGE +bOM +bQp +bRp +bSw +bOM +bQp +bRp +bWr +bOM +bXI +bRp +bZc +bOM +bGE +cMH +cMH +byS +cMH +byP +byP +bBN +bBN +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aad +aaa +aac +aac +aad +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgN +cgN +cgN +cgN +cgN +cgN +cgN +cgN +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +cgN +cgN +cgR +cgR +cgR +cgR +cgR +cgR +cgR +cgR +cgR +cgR +cgR +cgN +cgN +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(111,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +abW +acH +acH +acH +aez +afq +anB +aox +apw +aox +aox +aox +atk +aur +aox +awE +afV +axI +axI +axI +aCy +aEa +aEa +aEa +aHS +aIZ +aKc +aLf +aLR +aHS +abW +aLm +aQp +aRD +aSl +aTy +abE +abE +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aZN +baf +baG +baj +aZQ +bck +aZQ +aZQ +aZQ +beR +bfL +bfL +bhD +aZe +aZH +aZt +aZt +aZt +aZf +boo +bpO +cRM +arz +aSQ +bvw +bwY +aZf +aZt +bAd +bBN +bAf +byP +bAd +bGE +bHL +bJw +bJx +bJx +bGE +bON +bQq +bOO +bSx +bTA +bQq +bOO +bSx +bWV +bXJ +bOO +bZd +bZF +bGE +cbr +cMV +cbr +byS +byQ +byP +byP +bAd +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cgN +cgN +cgN +cgN +cgN +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aaa +aaa +cgN +cgN +cgR +cgR +cgR +cgR +cgR +cgN +cgN +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(112,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +acH +acH +acH +acH +aez +aez +anC +afq +afq +afq +alS +afq +aqG +aus +akq +awF +afo +afo +afo +afo +afo +aEb +aFk +aGM +aHT +aJa +aKd +aLg +aLS +aHS +abW +aLm +cOy +aRD +aSl +aTy +abE +abE +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aZN +aZC +baH +baH +aZQ +aZQ +bah +aZQ +aZQ +beR +bfL +bfL +bhE +cKk +aZH +aZH +aZH +aZH +bal +bop +bal +cSr +bao +btX +bal +bwZ +bal +aZt +bAd +bBN +byQ +byP +bFp +bGF +bHM +bJx +bJx +bJx +bNv +bOO +bQq +bOO +bSy +bSy +bQq +bOO +bSy +bSy +bXJ +bOO +bZe +bXJ +bGE +cMP +cbr +cbr +cNc +byP +byP +byP +bBN +aZH +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aaa +aaa +cgN +cgN +cgR +cgR +cgR +cgR +cgR +cgN +cgN +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(113,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +acH +acH +acH +abW +adZ +adZ +anD +aoy +apx +aqs +akq +aso +aso +aso +aso +aso +aso +ayQ +ayQ +ayQ +ayQ +ayQ +aFl +aGN +aHT +aJb +aKe +aHT +aHT +aHS +aHT +aHT +aQq +aRE +aSt +aTy +abE +abE +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aZd +bag +baH +baH +aZQ +aZr +bag +aZC +aZQ +cMn +bfM +bfM +cKs +aZe +aZH +aZH +aZH +aZH +bal +boq +cQD +cSs +baO +bhM +bal +cKO +bal +aZt +bAd +bAd +bDa +byP +bFq +bGG +bHN +bJy +bJy +bJy +bNw +bOP +bQr +bRq +bSz +bTB +bUE +bVE +bWs +bWW +bXK +bYs +bZf +bXJ +bGE +cMQ +cMW +cbr +cMH +bAd +byQ +byP +bBN +aZH +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aaa +aaa +cgN +cgN +cgR +cgR +cgR +cgR +cgR +cgN +cgN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(114,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +acH +acH +acH +akF +akF +akF +akF +akF +akF +akF +aqG +aso +atl +aut +avs +awG +atp +ayR +aAo +aBM +aCz +ayV +aFm +aGO +aHT +aJc +aKf +cWH +aLT +aHS +aOe +aPd +aQr +aRD +aSl +aTy +abE +abE +abE +abE +akG +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +aZd +aZC +bag +baI +baJ +aZQ +bah +baf +aZC +aZQ +beS +aZQ +aZr +bag +aZe +aZH +bal +bal +bal +bal +bor +cQW +baN +baO +bhM +bal +bwZ +bal +bal +bal +bal +bDb +bEj +bFr +bGH +bHO +bJz +bJz +bMz +bNx +bOQ +bQs +bRr +bSA +bTC +bQs +bQs +bWt +bWX +bXL +bYt +bZg +bXJ +bOM +bOM +bOM +bOM +bOM +bAd +byQ +byP +bBN +aZH +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(115,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +acH +acH +acH +akF +alU +amO +anE +amR +apy +akF +akq +aso +atm +auu +avt +awH +atp +ayS +aAp +aBN +aCA +ayV +aFn +aGP +aHT +aJd +aKg +aLi +aLU +aHS +aOf +aPe +aQr +aRD +aSl +aTy +abE +abE +abE +abE +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aZd +aZO +aZF +baJ +baI +aZr +aZQ +aZC +aZC +aZQ +beT +bag +bgC +cKt +aZe +aZH +bal +bbQ +bbQ +bna +bos +cQW +baN +baO +btY +bal +bxb +byA +bcp +bAO +bal +bDc +bEk +bAd +bGI +bHP +bJA +bLb +bMA +bNy +bJz +bQt +bRs +bSB +bTD +bTD +bTD +bWu +bTD +bXM +bYu +bZh +bZG +cag +caA +cbi +cbi +bOM +bAf +byP +byP +bBN +aZH +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(116,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +acH +acH +acH +abW +akF +alV +amP +anF +aoz +apz +aqt +akq +aso +atn +auv +avt +awI +atp +ayT +aAq +aBN +aCB +ayV +aFo +aGQ +aHT +aJe +aKh +aLh +aLV +cJV +aOf +aPe +aQr +aRD +aSl +aTy +abE +abE +abE +abE +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aZd +aZP +bah +aZQ +aZQ +aZr +aZr +aZr +aZQ +aZQ +beU +aZe +aZe +aZe +aZe +aZH +bal +bcp +bcp +bnb +bcp +cQX +bra +baO +btZ +bal +bxb +bcp +bcp +bAP +bBO +bDd +bEk +bAd +bGI +bHQ +bJx +bLc +bJx +bNz +bJx +bQu +bRt +bSC +bTE +bTE +bTE +bSC +bJx +bXN +bYv +bZi +bZH +bRp +caB +cbj +cbP +bOM +byQ +byP +bBN +bBN +aZH +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aac +aac +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(117,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +acH +acH +acH +abW +akF +alW +amQ +amQ +aoA +apA +aqu +akq +aso +ato +auw +avt +awJ +atp +ayU +aAr +aBN +aCC +ayV +aEc +aGR +aHT +aJf +aKi +aLh +cWI +aNb +aOf +aPe +aQr +aRL +aSl +aTy +abE +abE +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aZd +aZC +aZr +aZQ +baK +aZQ +aZQ +aZC +bag +bck +bck +beV +bfN +bgD +bhF +aZe +aZt +bal +bcp +bcp +bnb +bcY +cQW +baN +baO +bhM +bal +bxa +bcp +bcp +bAP +bBO +bDe +bEl +bAd +bGI +bHR +bJx +bLd +bJA +bNA +bOR +bQv +bRu +bSD +bTF +bTF +bTF +bTK +bJx +bXO +bYw +bZj +bZI +cah +caC +cbi +cbi +bOM +byQ +byP +bBN +aZH +aZH +aZt +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aac +aac +aac +aac +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +ctA +cuk +abC +abC +aXR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aad +aac +aac +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(118,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +acH +acH +acH +abW +akF +alX +amR +anG +aoB +amR +aqu +arm +aso +atp +atp +avu +awK +atp +ayV +aAs +ayV +aCD +ayV +aFp +aGS +aHU +aJg +aKj +aLj +aLW +aNb +aOf +aPe +aQr +aRD +aSl +aTy +abE +abE +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aab +aaa +aaa +aaa +aaa +abC +aZd +aZD +aZQ +aZQ +aZC +bbj +aZF +aZQ +aZC +bdp +bdq +bdq +bdp +bdr +bhG +aZe +aZt +bal +bcp +bcp +bnb +bco +cQW +baN +baO +bua +bvx +bxc +bcp +bco +bco +bal +bDf +byB +byB +bGI +bHS +bJB +bLe +bGE +bGE +bGE +bGE +bRv +bSE +bTG +bTG +bTG +bWv +bJx +bXP +bYx +bOO +bZJ +bOM +bOM +bOM +bOM +bOM +bPt +byP +bBN +aZH +aZH +aZt +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aac +aac +aac +aac +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aac +aac +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(119,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +acH +acH +acH +akF +akF +alY +amS +alY +aoC +apB +aqv +aqt +akF +atq +cJF +avv +awL +awL +ayW +aAt +ayX +aCE +aEc +aFq +aGT +aCO +aJh +aEc +aLk +aLX +cJW +aOf +aPe +aQr +aRD +aSl +cOF +abE +abE +abE +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aad +aaa +aaa +aab +aab +aab +aaa +aaa +aaa +abC +aZd +aZE +aZQ +aZQ +baL +bbk +bbj +aZQ +aZQ +bdq +bee +beW +bdr +beg +bhH +aZe +aZt +bal +ben +bmr +bnc +bco +cQW +brb +bsq +bub +bal +bal +byB +byB +byB +bBP +bDg +bEm +bFs +bGJ +bHT +bJC +bLf +bMB +bNB +bOS +bGE +bRw +bJx +bTH +bUF +bVF +bJx +bJx +bXP +bYy +bZk +bZG +cag +caD +cbk +cbk +bOM +byQ +bYK +byS +aZt +aZt +aZt +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aac +aac +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(120,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +acH +acH +acH +akF +alp +alZ +amT +alY +aoD +amR +aqw +arn +asp +apI +alY +avw +awM +awM +ayX +aze +ayX +aCF +aEc +aFr +aGT +awM +aJi +aEc +aLh +aLY +aNc +aOg +aPf +aQr +aRD +aSl +cOF +abW +abE +abE +abE +abE +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +abC +aZd +aZp +aZr +aZR +bai +bai +bbl +bbH +bcl +bcP +bdq +bef +cQU +bfO +bgE +bhI +cRr +cQG +cQG +cQG +cQG +bnd +cQG +cRc +brc +bsr +buc +bal +bal +byB +bzN +bAQ +bBQ +bDh +bAQ +bAQ +bGK +bHU +bJD +bLg +bMC +bNC +bOT +bGE +bRx +bSF +bTI +bUG +bVG +bJx +cMF +bXP +bYz +bOO +bZH +bRp +caE +cbl +cbQ +bOM +byQ +byP +bAd +aZH +aZt +aZt +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(121,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +acH +acH +acH +akF +alq +ama +amU +alY +aoE +amR +aqx +aro +apI +apI +alY +avx +awM +awM +ayY +aAu +aBO +aCG +aEd +aFs +aGT +awM +aJj +aEc +asu +asu +asu +asu +asu +aQh +aRD +aSm +cOF +abW +abW +abW +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aZd +aZq +aZq +aZq +baj +aZq +aZq +aZq +aZe +bcQ +bdp +bdr +beX +bfP +bgF +bgb +biM +biM +biM +blp +biM +bne +bot +biM +brd +bss +bud +biM +bxd +byC +bzO +bAR +bBR +bDi +bEn +bFt +bGL +bHV +bJE +bLh +bMD +bND +bOU +bQw +bRy +bSG +bJx +bJx +bRt +bJx +bJx +bXO +bYA +bZj +bZI +cah +caF +cbk +cbk +bOM +byQ +byO +bAd +aZH +aZH +aZt +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aab +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +abC +abC +aXR +aaa +aaa +aaa +aaa +aad +aac +aad +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(122,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +abW +acH +akF +akF +akF +amV +alY +aoF +apC +aqy +aro +apI +apI +alY +avy +awN +awN +awN +aze +ayX +aCH +cJN +aFt +aGT +awM +aze +aCO +aEd +aLZ +aNd +aOh +asu +aQs +aRD +aSl +cOF +abW +abW +abW +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aZd +aZr +aZF +aZQ +bag +aZQ +aZQ +bbI +aZe +bcR +bdr +beg +beY +bfQ +cKq +cKu +baO +baO +baO +baO +baO +bnf +bjG +bjG +bjG +bst +bue +bvy +bxe +byD +bzP +bAS +bBS +bAS +bAS +bFu +bGM +bHW +bJF +bLi +bGI +bNC +bOT +bGE +bRz +bSH +bTJ +bJx +bVI +bVG +bJx +bXP +bYx +bOO +bZK +bOM +bOM +bOM +bOM +bOM +byQ +byP +bAd +bBN +aZH +aZt +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aad +aaa +aaa +aad +aac +aac +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(123,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +abW +acH +acH +abW +akF +amW +alY +aoG +apD +aqz +aro +asq +atr +alY +avz +awO +axJ +ayZ +aAv +ayX +aCI +aEe +aFu +aGU +aHV +aze +aCO +aEe +aMa +aNe +awM +aEe +aQt +aRJ +aSl +cOF +acH +acH +abW +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aZd +aZs +aZG +aZS +bak +aZq +cKl +cKm +aZe +bcS +bds +beh +beZ +bfR +bgG +bhJ +biN +biN +biN +biN +biN +bng +bou +bpP +biN +bsu +buf +baP +bxf +byE +bzQ +bAT +bBT +bDj +bEo +bFv +bGN +bHX +bJG +bLj +bGI +bNE +bOV +bGE +bRA +bSI +bTK +bUH +bRt +bWw +bWY +bXP +bYB +bZk +bZG +cag +caG +cbm +cbm +bOM +caM +byP +byP +bBN +aZH +aZt +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aaa +aad +aad +aac +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(124,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +acH +acH +abW +akF +akF +akF +aoH +apE +aqA +arp +asr +ats +aux +avA +awP +awP +aza +aAw +aBP +aCJ +aEf +aFv +aGV +aCJ +aJk +aKk +aEf +aMb +aNf +aKk +aEf +aQu +aRD +aSl +cOF +acH +acH +abW +abE +akG +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +aZe +cKj +aZe +aZe +aZe +cKk +aZe +aZe +aZe +aZe +aZe +aZe +cQV +baN +baO +bhK +biO +biO +biO +biO +cKx +biO +biO +biO +biO +biO +biO +biO +biO +biO +biO +biO +bBU +bDk +bEp +bFw +biO +bHY +bJH +bpS +bGJ +bNF +bNF +bNF +bNF +bNF +bTL +bUI +bVJ +bVJ +bJx +bXP +bYC +bOO +bZH +bRp +caH +cbn +cbR +bOM +byQ +byQ +byP +bBN +aZH +aZt +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aac +aac +aac +aac +aac +aab +aab +aaa +aaa +aad +aaa +aaa +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(125,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +abW +abW +abW +acH +acH +akF +aoI +apF +aqB +arq +arq +apF +auy +avB +awQ +axK +azb +aAx +aBQ +aCK +aEg +aFw +aGW +aHW +aJl +aKl +aLl +aMc +aNg +aOi +aLl +aQv +aRM +aSt +cOJ +acH +acH +abW +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZf +aZt +aZt +aZt +aZt +aZt +bbm +bbJ +bcm +bcT +bdt +bbm +cQW +bfS +baO +bhL +biO +bjC +bkv +bkv +bkv +bkv +bkv +bkv +bkv +bkv +bpQ +bvz +bxg +byF +cXB +abC +abC +abC +abC +bFx +bGO +bHZ +bJI +bLk +bME +bLk +bOW +bQx +bnk +bSJ +bTM +bUJ +bVK +bWx +bWZ +bXQ +bYD +bZj +bZL +cah +caI +cbm +cbm +bOM +bAd +byQ +byP +bBN +aZH +aZt +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aac +aac +aac +aac +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(126,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +abW +abW +abW +abW +acH +acH +anH +aoJ +apG +aqC +arr +ass +att +auz +avC +awR +awR +azc +aAy +aBR +awL +aEh +aFx +aGX +aHX +azf +aKm +aEh +aMd +aNh +aKm +aEh +aQw +aRD +aSl +cOF +acH +acH +abW +abW +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZf +aZf +aZt +aZt +aZt +aZt +bbm +bbm +bcn +bcU +bdu +bbm +cQX +baN +baO +bhM +biO +bjD +bkw +blq +bkw +blq +abC +cXf +cXp +cXr +cKE +bvA +bxh +bms +cXC +cXI +cXL +cXO +cXP +cXQ +bGP +bIa +bJJ +bLl +bLl +bLl +bOX +bQy +bnk +bSK +bTM +bUK +bVL +bWy +bXa +bWy +bYE +bWy +bZM +bOM +bOM +bOM +bOM +bOM +byQ +byQ +byP +bBN +aZH +aZt +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aag +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aac +aac +aac +aad +aab +aab +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(127,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +abW +abW +abW +abW +abW +abW +akF +aoK +apH +aqD +ars +ast +apI +alY +avD +awS +axL +ayZ +aAv +ayX +aCL +aEe +aFy +aGY +aHY +awM +aCO +aEe +aMe +aHY +awM +aEe +aQx +aRD +aSl +cOF +aLm +aLm +aLm +aLm +aLm +aLm +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZf +aZf +aZt +aZt +aZt +bal +bal +bal +bal +bdv +bal +cQW +baN +bgH +bhM +biO +bjD +bkx +bky +bls +bky +bkv +bpQ +bre +bsv +bug +bvB +bxi +byG +byG +byG +byG +bDl +bEq +bFy +bGQ +bIb +bJK +bLm +bMF +bLo +bOY +bQy +bnk +bSL +bTM +bUL +bTC +bWz +bXb +bXR +bYF +bZl +bZN +cag +caJ +cbo +cbo +bOM +bVA +bAd +byP +bBN +aZH +aZt +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aac +aac +aac +aab +aab +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(128,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +acm +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abE +abE +abE +abW +akG +abW +abW +abW +akF +aoL +cJw +aqE +aqE +aqE +apI +alY +avE +awT +awT +awT +aze +ayX +aCH +cJN +aFz +aze +awM +awM +aCO +aEc +aMf +aNi +awN +asu +aQy +aRD +aSl +cOF +aUo +aVd +aVA +aWa +aWz +aLm +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZf +aZf +aZf +aZf +aZt +bal +bbK +bco +bcp +bdw +bcp +cQW +baN +baO +bhM +biO +bjD +bkx +cWJ +cWU +cWW +cXa +cXg +brf +bsw +buh +bvC +bxj +bxj +bzR +bAU +bAU +bDm +bEr +bFz +bGR +bIc +bJL +bLn +bMG +bNG +bOZ +bQy +bnk +bnk +bTM +bUM +bVM +bRs +bXc +bXS +bYG +bJx +bZO +bRp +caK +cbo +cbS +bOM +bAd +bAd +byP +bBN +aZH +aZH +aZH +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aac +aab +aab +aab +aab +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cJh +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(129,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abE +abE +abC +aaa +aaa +abE +akF +akF +akF +akF +akF +akF +akF +anH +avF +awM +awM +azd +aze +aBO +aCM +aEd +aFA +aze +awM +aJm +asu +asu +asu +asu +asu +asu +aQz +aRD +aSq +aTz +aUp +aVe +aVe +aWb +aWA +aLm +aLm +aLm +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZf +aZf +bal +bal +bal +bbL +bcp +bcp +bdx +bcp +cQW +bfT +baO +bhM +biO +bjD +bkx +cWK +bms +bnh +bov +bpR +brg +bsx +cXs +bvD +bvD +bvD +cXD +bAV +bBV +bDn +bEs +bFA +cXR +bId +cMz +bLo +bMH +bNH +bPa +bQz +bnk +bnk +bTM +bUN +bJx +bTH +bXd +bSF +bYH +bSF +bZP +cah +caL +cbo +cbo +bOM +bAd +bAd +byP +bBN +aZH +aZH +aZH +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aaa +aaa +aab +aab +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(130,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aoM +aoM +aoM +art +asu +atu +asu +avG +awM +awM +aze +aze +ayX +aCN +aEc +aFB +aze +awM +aJn +asu +abW +abW +abW +abW +aLm +aQA +aRD +aSl +cOF +aUq +aVf +aVf +aWc +aWB +aWO +aWY +aXr +aUC +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +aOv +bam +baM +bam +bbM +bbM +bcV +bdy +bcp +cQW +bfU +baO +bhM +biO +bjD +bkx +cWL +bms +bni +cXb +cKD +brh +bsy +cXt +bvE +bvE +byH +cXE +bAV +bBW +bDo +bEt +bFB +cXS +bIe +bJK +bLo +cMC +bNH +bPb +bQy +bnk +bSM +bTM +bUO +bVN +bWA +bXe +bJx +bYI +bTD +bZQ +bOM +bOM +bOM +bOM +bOM +bAd +bAd +byP +bBN +aZH +aZH +aZH +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +ctB +cuk +abC +abC +aXR +aaa +aaa +aaa +aad +aaa +aab +aab +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(131,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +anI +aoN +apJ +aqF +aru +asv +atv +asv +avH +awL +awL +azf +aAz +ayX +aCO +aEc +aFC +aze +aCO +asu +asu +abW +abW +abW +abW +aLm +aQB +aRD +aSl +cOF +aLm +aLm +aLm +aLm +aLm +aLm +aLm +aLm +aXI +aXX +aXX +aXX +aXX +aXX +aXX +aXX +aXX +aXX +aXX +aXX +aXX +aXX +aXX +aXX +aXX +aZT +bal +bal +cQD +cQG +cQG +cQG +bdz +cQG +cRc +baN +baO +bhM +biO +bjD +bkx +cWM +bmt +bnj +bow +cXh +bri +bsz +cXu +bvF +bxk +bxk +bsG +cXJ +cXM +bDp +bEt +bFC +cKV +bIf +bJK +bLo +bMI +bNI +bPc +bQy +bnk +bSN +bTN +bUP +bVO +bWB +bXf +bXT +bYJ +bZm +bZR +bGE +bAd +bAd +bAd +bAd +bAd +byQ +byP +bBN +aZH +aZH +aZH +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(132,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +afV +agR +afV +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aoM +aoM +aoM +art +asw +asw +asw +avI +awU +axM +azg +aAA +azg +aCP +azg +aFD +aGZ +aHZ +aFI +abW +abW +abW +abW +abW +aLm +aQB +aRD +aSD +cPq +aUr +aSU +aVB +aWd +aSU +aSU +aSU +aSR +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ban +baN +cQE +bbN +baN +baN +bdA +bei +bfb +bfV +baO +bhM +biO +bjD +bkx +cWN +bmu +bms +bms +cXi +brj +bsA +cXv +bvG +bvG +bvG +bzS +bAW +bBX +bDq +bEt +bFD +bGS +bHZ +bJK +bLo +bLo +bNJ +bPd +bQy +bQy +bQy +bTO +bUQ +bVP +bWC +bGF +bGE +bGE +bGE +bGE +bGE +bAd +bAd +bYa +bAd +bPt +byQ +byP +bBN +aZH +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(133,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +afV +agP +afV +afV +afV +afV +afV +abW +aaa +amX +abE +abW +aaa +abE +abW +asw +atw +auA +avJ +awV +axM +azh +aAB +aBS +aCQ +azg +aFE +aHa +aIa +aFI +abW +aLm +aLm +aLm +aLm +aLm +aQC +aRE +aSE +cPr +aUs +aRG +aRG +aRG +aRG +aRG +aRG +cPC +cPD +cPD +cPD +cPD +cPD +cPD +cPD +cPD +cPD +cPD +cPD +cPD +cPD +cPD +cPD +cPD +cPD +cPD +cQx +cQz +cQF +baO +baO +baO +bdB +bej +bfc +bfW +bgI +bhN +cKx +bjD +bkx +cWO +bmv +bms +box +cXj +brk +brk +bui +bvH +bxl +bvH +bzT +bAX +bBY +bDr +bEu +bFE +bGT +bIa +bJN +bLp +bMJ +bLp +bPe +bQA +bRB +bSO +bTP +bUR +bVQ +bWD +byP +byP +byP +byP +byP +cai +byP +byQ +byQ +bDa +byQ +byQ +byP +bBN +aZH +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(134,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +afV +agS +ahF +aim +aiY +ajN +afS +adZ +adZ +akG +abW +abW +acH +acH +acH +asw +atx +auB +avJ +awW +axM +azi +aAC +aBS +aCR +azg +aFF +aHb +aIb +aFI +abW +aLm +aMg +aNj +aOj +aPg +aQD +aRD +aSF +aSN +aUt +aSN +aSN +aWe +aSN +aSN +aSN +aSP +arA +arA +arA +arA +arA +arA +arA +arA +aYK +arA +arA +arA +arA +arA +arA +arA +arA +arA +bap +cQA +baP +baP +bcq +baP +baP +bek +baP +bfX +bgJ +bhO +biO +bjD +bkx +cWP +bmu +bms +bms +cXk +brl +bsB +cXw +bvI +bvI +bvI +bzU +bAY +bBX +bDs +bEv +bFF +bGU +bIg +bJK +bLo +bLo +bLo +bPa +bQB +bRC +bSP +bTQ +bUS +bQH +bQH +bQH +bQH +bQH +bAd +bTz +byQ +byP +byP +byP +byP +byP +byP +byP +bBN +aZH +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aab +aad +aad +aac +aac +aad +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +abC +abC +aXR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(135,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +afV +agT +ahG +ain +aiZ +ajO +akH +alr +afV +adZ +adZ +aez +aez +aez +aez +asw +aty +auC +avJ +awX +axM +azj +aAD +aBS +aCS +azg +aFG +aHc +aIc +aFI +adZ +aLm +aMh +aNk +aOk +aPh +aQE +aRD +aSl +aLm +aLm +aLm +aLm +aPl +aLm +aLm +aLm +aLm +aXJ +aXY +aXY +aXY +aXY +aXY +aXY +aXY +aXY +aXY +aXY +aXY +aXY +aXY +aXY +aXY +aXY +aZU +bal +cQB +cQG +cQG +cQG +cQG +cQG +cQG +cRd +bfY +bgK +bhP +biO +bjD +bkx +cWQ +bmw +cWX +boy +cXl +cXq +bsC +cXx +bvJ +bxm +bxm +bzV +cXK +cXN +bDt +bEt +bFC +cXT +bIh +bJO +bLq +cMC +bLo +bPa +bQC +bRD +bSQ +bTS +bUT +bQH +bWE +bXg +bXU +bQH +bAd +bAd +bAd +bAd +bAd +byQ +byQ +byQ +byP +byP +bAd +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aad +aac +aac +aad +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(136,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +afV +agT +ahH +aio +aio +ajP +akH +alr +amb +alS +afq +aez +afS +aqG +arv +asw +atz +auD +avK +awY +axM +azk +aAE +aBT +aCT +azg +aFH +aHd +aId +aFI +adZ +aLm +aMi +aNl +aOl +aLm +aQF +aRD +aSl +aLm +aUu +aVg +aVC +aWf +aWC +aWP +aWZ +aXs +aXK +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +aZV +baq +baQ +bbn +bbO +bcp +bcW +bco +bco +cQW +bfY +bgK +bhP +biO +bjD +bkx +cWR +bms +bnl +cXc +cKE +brh +bsy +cXy +bvK +bxn +bvK +cXF +bAZ +bBZ +bDs +bEt +bFB +cXU +bIi +bJK +bLo +bLo +bLo +bPf +bQD +bRE +bSQ +bTS +bUU +bVR +bWF +bXg +bXV +bQH +bAd +bAd +bAd +bAd +bAd +byQ +byP +byP +bYK +byS +bAd +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aad +aab +aad +aac +aac +aac +aad +aad +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(137,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +afV +agU +ahI +ahI +aja +ajQ +afS +adZ +aiS +akq +akq +akq +aoQ +afq +afq +asw +asw +asw +asw +asw +asw +azl +azl +azl +azl +azl +aFI +aFI +aFI +aFI +adZ +aLm +aMj +aNl +aOl +aLm +aQG +aRN +aSG +aTA +aUv +aVh +aVh +aVh +aWD +aLm +aLm +aLm +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bal +bal +bal +bbP +bcr +bcX +bcX +bel +bfd +bfZ +bgL +bhP +biO +bjD +bkx +cWS +bms +cWY +cXd +bpT +bri +bsD +cXz +bvL +bvL +bvL +cXG +bAZ +bBZ +bDs +bEw +bFG +cXV +bIj +bJP +bLr +bML +bLr +bPg +bQE +bRF +bSR +bTT +bUU +bVR +bWF +bXg +bXW +bQH +bAd +bAd +bAd +bAd +cbp +byQ +byP +bAd +bAd +bAd +bAd +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aad +aac +aac +aac +aad +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(138,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +afV +afW +afW +afS +ajb +afS +afS +adZ +adZ +adZ +afq +akq +akq +akq +akq +alQ +atA +auE +ahr +aqj +ahr +ahr +aAF +aBU +ahr +aqj +ahr +aHe +aEj +adZ +adZ +aLm +aMk +aNm +aOm +aPg +aQH +aRD +aSH +aLm +aNp +aNp +aNp +aNp +aNp +aLm +abW +abW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZf +aZt +bal +bbQ +bcs +bcp +bcp +bem +cQW +bfY +bgM +bhP +biO +bjD +bkx +cWT +cWV +cWZ +cXe +cXm +brh +bsE +buj +bvM +bxo +byI +bzW +bBa +bBa +bDu +bEx +bFH +bFI +bIc +bJQ +bLo +bMM +bLo +bPh +bQD +bRG +bSS +bTU +bUV +bQH +bWG +bXg +bXX +bQH +bAd +bAd +bAd +bAd +byQ +byP +byP +bAd +aZt +aZt +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aad +aac +aac +aac +aad +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(139,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +abC +abC +afW +ajc +ahI +afV +abC +akG +adZ +aez +afq +afq +aqH +afq +afq +afq +apx +afq +afq +afq +afq +afq +afq +afq +afq +afq +afq +anC +ajt +afS +aLn +aMl +aNn +aOn +aLm +aQI +aRD +aSI +aLm +aUw +aUw +aNp +aWg +aMo +aLm +abW +abW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZf +aZt +bal +bbQ +bct +bcY +bcp +ben +cQW +bfY +bgM +bhP +biO +bjD +bkx +bkw +blq +bkw +blq +cXn +brj +bsF +buk +bvN +buk +byJ +bzX +buk +buk +bDv +bEy +bFI +bGV +bIk +bJR +bLs +bMN +bNK +bPi +bQF +bRH +bST +bTV +bUW +bVS +bWH +bXh +bXY +bQH +bAd +bAd +bAd +byQ +byP +byP +bAd +bAd +aZH +aZH +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(140,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +afW +ajd +ajR +afV +aaa +abW +abW +aez +aez +aez +aez +aez +afq +aoy +apx +afq +afq +alQ +aez +aoy +apx +aqH +afq +afq +afq +anC +afq +aKn +aLn +aLn +aLm +aLm +aLm +aQB +aRD +aSJ +aLm +aLm +aLm +aLm +aLm +aLm +aLm +abW +abW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZt +aZt +bal +bal +bal +bal +bal +bal +cQX +bfY +bgM +bhP +biO +bjD +bky +bls +bky +bls +bkx +cXo +brm +bsG +cKD +bvO +bxp +byK +bzY +bBb +bBb +bBb +bBb +bBb +bGW +bIl +bJS +bLl +bLl +bLl +bPj +bQB +bRI +bSU +bSS +bUX +bQH +bWI +bWI +bWI +bQH +bAd +bAd +bAd +caM +byP +bAd +bAd +aZt +aZH +aZH +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aac +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(141,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +afV +afV +agP +afV +aaa +abW +abW +abW +acH +acH +aez +aez +aez +afV +adZ +adZ +awZ +aqG +adZ +afS +aez +aez +anN +afq +aoy +aIe +ahr +azq +ahr +auE +ahr +aOo +aPi +aQJ +aRD +aSI +aLm +acH +acH +acH +acH +abW +abW +abW +abW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZH +aZH +aZH +aZt +aZH +aZH +aZH +aZH +cQW +bga +bgM +bhQ +biO +bjE +bkv +bkv +bkv +bkv +bls +abC +abC +bsH +cXA +bvP +bxq +byL +cXH +abC +abC +abC +abC +blr +bGO +bIm +bJT +bLt +bMO +bLt +bPk +bQG +bRJ +bSU +bSS +bUY +bQH +bWI +bWI +bXZ +bQH +bAd +bAd +bAd +byQ +byP +bBN +bBN +aZH +aZH +aZH +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aab +aab +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(142,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aaa +aaa +aaa +aaa +aad +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +afV +agQ +afV +abC +akG +abW +abW +abW +abW +acH +acH +acH +acH +acH +aez +aez +aez +acH +acH +acH +aez +aEi +aez +afV +aez +aez +afq +afq +apx +aus +avh +aPj +aQa +aRD +aSI +aLm +acH +acH +acH +acH +acH +abW +abW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZH +cQW +bfY +bgM +bhP +biO +biO +biO +biO +cKx +biO +biO +biO +biO +biO +biO +biO +biO +biO +biO +biO +biO +biO +bEz +biO +biO +bIn +bJU +bpS +biO +bNL +biO +bQH +bRK +bSU +bTW +bQH +bQH +bWJ +bXi +bXZ +bQH +bAd +bAd +byQ +byP +byP +bBN +aZH +aZH +aZH +aZH +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +abC +abC +aXR +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aac +aab +aab +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(143,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aac +aaa +aaa +aaa +aaa +aac +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +abW +abW +abW +abW +abW +abW +acH +acH +acH +acH +acH +acH +acH +aez +aez +adZ +afq +aez +acH +acH +aez +aez +aez +adZ +aLm +aLm +aLm +aQf +aRJ +aSK +aLm +acH +acH +acH +acH +acH +abW +abW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZH +cQW +bfY +bgN +bhR +bfb +bjF +bfb +bfb +bfb +bnm +boz +bpU +boz +bsI +bul +bvQ +bxr +byM +bzZ +bBc +bCa +bDw +bEA +bFJ +bGX +bIo +bJV +bLu +bJZ +bJZ +bJZ +bJZ +bRL +bSV +bSS +bUZ +bQH +bQH +bQH +bQH +bQH +bTz +byQ +byQ +byP +bEi +bBN +aZH +aZH +aZH +aZH +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +ctC +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(144,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aad +aab +aab +aac +aac +aac +aac +aad +aab +aab +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +abW +abW +abW +abW +abW +abW +abW +abW +abW +abW +abW +adZ +afq +afq +afq +aez +acH +acH +acH +acH +acH +abW +aLm +aOp +aPk +aQK +aRO +aSL +aLm +acH +acH +acH +acH +acH +abW +akG +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +aZI +aZt +aZt +aZH +aZH +aZH +bcu +bcu +bcu +bcu +cRl +bfY +bgO +bhS +biP +bjG +bjG +bjG +bjG +bnn +bjG +bjG +brn +bst +bum +bvR +bxs +byN +bAa +bBd +bBd +bDx +bEB +bEB +bBd +bDx +bJW +bLv +bJZ +bNM +bPl +bJZ +bRM +bSW +bSS +bVa +bQH +bAd +bAd +bAd +byS +bDc +byQ +byP +byP +bAd +bBN +aZH +aZH +aZt +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aad +aac +aac +aac +aac +aac +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(145,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aad +aac +aac +aac +aac +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +abW +abW +abW +abW +abW +abW +abW +abW +afS +afS +afS +afS +alQ +afV +adZ +abW +abW +abW +abW +aLm +aLm +aLm +aOq +aLm +aQL +aRD +aSl +aLm +acH +acH +acH +acH +abW +abW +abW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZt +aZt +aZt +aZH +aZH +aZH +bcu +bcZ +bdC +beo +cRl +bgb +bgP +bhT +biQ +bjH +bjH +blt +bjH +bno +boA +bjH +bro +bsr +bun +bvS +bxt +byE +bAb +bAR +bCb +bDy +bEC +bFK +bGY +bIp +bJX +bLw +bMP +bNN +bPm +bJZ +bRN +bSX +bTX +bVb +bQH +bAd +bAd +bAd +bAd +byQ +byP +byP +bZS +cMH +cMH +bZS +aZH +aZH +aZH +aZt +aaa +aaa +aaa +aaa +aac +aac +aac +aac +aac +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aag +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(146,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +abW +abW +abW +afS +azm +akp +akq +akq +afS +adZ +abW +abW +abW +abW +aLm +aMm +aMn +aOq +aLm +aQM +aRK +aSw +aLm +aLm +aLm +aLm +abE +abE +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZf +aZt +aZt +aZH +aZH +aZH +bcu +bda +bdD +bdD +cRn +cRo +bgQ +bhU +bgQ +cRo +cRv +cQG +cQG +bnp +cQG +cQG +brp +cQz +buo +cQG +cQG +cTm +bAc +bBe +bCc +bDz +bED +bFL +bGZ +bIq +bJY +bLx +bMQ +bNO +bPn +bJZ +bQH +bQH +bTY +bQH +bQH +byS +bAd +bAd +bAd +byQ +byP +bZS +cMH +cbq +cbT +cMH +aZH +aZH +aZH +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aac +aac +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +abC +abC +aXR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(147,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +abW +abW +abW +afS +azn +akp +cJM +afV +afV +abW +abW +abW +abW +abW +aLm +aMn +aNo +aOq +aPl +aQN +aRD +aSM +aTB +aUx +aNp +aLm +abE +abE +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZf +aZt +aZt +aZH +aZH +aZH +bcu +bdb +bdD +bdD +bfe +bgc +bgR +bhV +biR +bjI +bkz +blu +bmx +bnq +bco +bal +brq +bsJ +bup +bal +bxu +cTn +cTp +cTq +bCd +bDA +bEE +bFM +bHa +bBf +bJZ +bJZ +bJZ +bNP +bPo +bJZ +bJZ +bQH +cLc +cLe +byP +cai +bAd +bAd +byQ +byP +byP +caj +caN +caO +cbr +bZS +aZH +aZH +aZH +aaa +aaa +aaa +aaa +aab +aac +aac +aac +aac +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(148,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +akG +abW +afV +azo +aAG +afV +afV +abW +abW +abW +abW +abW +abW +aLm +aMo +aNp +aOq +aLm +aQO +aRD +aSN +aLm +aUy +aVi +aLm +abE +abE +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZf +aZf +aZt +aZH +aZH +aZH +bcu +bdb +bdE +bep +bff +bgd +bgS +bhW +biS +bjJ +bkz +bcp +bcp +bnr +bco +bal +baP +cSv +buq +bvT +bxv +byO +bAd +cTr +bCe +bDB +bEF +bFN +bHb +bBf +bJZ +bLy +bMR +bNQ +bPp +bJZ +bJZ +bQH +bTZ +bQH +bAd +byP +byP +byP +byP +byO +bZS +cMH +cMH +cbr +cbU +cMH +aZH +aZH +aZH +aaa +aaa +aaa +aad +aac +aac +aac +aac +aac +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(149,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +afV +ajo +ajo +afV +abW +abW +abW +abW +abW +abW +abW +aLm +aMo +aNp +aOq +aLm +aQP +aRD +aSN +aLm +aUy +aNp +aLm +abE +abE +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZf +aZf +aZt +aZH +aZH +aZH +bcu +bdc +bdF +beq +beq +bge +bgT +bhX +biT +bjK +bkz +bcY +bcp +bns +boB +bal +baP +cSv +bhP +bvU +bxw +byP +bAe +cTr +bCf +bDC +bEG +bFO +bHc +bBf +bJZ +bLz +bLz +bLz +bPq +bJZ +bJZ +cLa +cLa +cLa +bAd +bAd +byQ +byQ +byQ +byP +cMH +cak +caO +cbr +cbr +cMH +aZt +aaa +aaa +aaa +aaa +aaa +aad +aac +aac +aac +aac +aac +cgf +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(150,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +abW +abW +abW +abW +abW +abW +abW +abW +aLm +aMp +aNq +aOq +aLm +aQN +aRD +aSN +aLm +aUy +aNq +aLm +abE +abE +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZf +aZf +aZt +aZH +aZH +aZH +bcu +bdb +bdD +bdD +bfg +bgf +bgU +bhY +biU +bjL +bkz +bcp +bcp +bnt +boC +bfa +baP +cSv +bur +bal +bxx +byQ +byP +cTr +bCg +bDD +bEH +bFP +bHd +bBf +bJZ +bLz +bLz +bNR +bPr +bJZ +bJZ +bAd +bAd +bAd +bAd +bAd +bVA +byQ +byP +byP +cMH +cal +caP +caO +caO +cMH +aZt +aaa +aaa +aaa +aaa +aaa +aad +aac +aac +aac +aac +aac +aab +aaa +aaa +aaa +aag +aaa +aaa +chi +chi +chC +abC +abC +ciQ +cjr +cjr +chi +chi +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aaa +aXR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(151,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +abW +abW +abW +abW +abW +abW +abW +abW +aLm +aLm +aLm +aOr +aLm +aQQ +aRD +aSi +aLm +aUz +aLm +aLm +abE +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZf +aZf +aZt +aZH +aZH +aZH +bcu +bdb +bdD +bdD +bfh +bgc +bgV +bhZ +biV +bjM +bkz +bbQ +bbQ +bnu +boD +bal +baP +cSv +bus +bal +bxy +byR +byP +cTu +cTq +cTz +bBf +bBf +bBf +bBf +bJZ +bLz +bLz +bLz +bPs +bJZ +bJZ +bAd +bAd +bAd +bAd +bAd +bYa +byQ +byP +bAd +cMH +bZS +bZS +cbs +cbV +cMH +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +arw +abC +arw +aYn +aXB +cin +aYn +aYn +cjR +aYB +arw +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aXR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(152,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaf +aaf +aeh +aeh +aeh +aeh +aeh +aeh +aaa +aaa +ahT +ajS +ahT +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +abW +abW +abW +abW +abW +abW +aLm +aOs +aLm +aQN +aRD +aSO +aLm +aUA +aLm +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZf +aZf +aZt +aZt +aZH +aZH +bcu +bcu +bcu +bcu +bcu +bcu +bcu +bcu +bcu +bcu +bkz +bal +bal +bal +boE +bal +baP +cSv +bhP +bal +bxz +byS +byP +byP +cTu +cTA +bBf +bBN +bBN +bBN +bJZ +bJZ +bJZ +bJZ +bJZ +bJZ +bJZ +bAd +bAd +bAd +bAd +bAd +byQ +byP +bYK +byS +aZH +aZH +cMH +bZS +cMH +cMH +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +che +che +che +abC +aYB +abC +chi +che +che +che +chi +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqC +aQS +arz +cUy +cuk +aaa +aXR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(153,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaf +adg +adg +adg +adg +adg +aaf +aaf +aaf +adg +adg +adg +adg +ajT +ahT +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +abW +abW +abW +abW +abW +abW +abW +abW +aLm +aOt +aLm +aQR +aRP +aSP +aLm +aUz +aLm +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +aZI +aZt +aZt +aZt +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZt +aZt +aZt +bal +boF +bal +brr +cSv +bhP +bal +bxA +byS +bAf +byP +bBN +bBN +bBN +bBN +bBN +caM +bJZ +bJZ +bJZ +bJZ +bJZ +bJZ +bJZ +bAd +bAd +bAd +bAd +byQ +byP +byP +bBN +bBN +aZt +aZt +aZt +aZt +aZt +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aYG +cio +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +cqD +crO +csA +ctD +cqD +aXR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(154,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaf +aaf +aaf +aaf +adg +adt +adt +adt +adg +adg +adg +adg +adg +adt +adt +adt +ajT +aae +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +abW +akG +abW +abW +abW +abW +abW +abW +aaa +aOu +aPm +aQS +arz +aSQ +aTC +aUB +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZt +aZt +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZt +aZt +aZf +bal +boG +bal +bap +cSB +but +bal +bxz +byS +bAd +bLA +byP +byQ +byQ +byQ +byQ +bDa +byQ +byQ +byQ +bNS +bAd +bAd +bAd +byS +bAd +bAd +bAd +byQ +byP +bAd +bBN +aZH +aZt +aZt +aZt +aZt +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aYG +abC +aaa +aaa +aaa +aaa +cfI +cfI +cfI +aaa +aaa +aaa +cmZ +cpR +cmZ +crP +csB +ctE +cul +cfJ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(155,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aae +aae +aae +aae +aae +aae +aae +aae +adg +adt +adN +aei +aeH +adt +afz +adt +agV +ahJ +aip +adt +ajU +aae +aae +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +abW +abW +abW +abW +abW +aaa +arw +aPn +aQS +arz +aSQ +aTD +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZt +aZt +aZf +aZf +aaa +boH +bpV +aQS +cSC +aSQ +bvV +bxB +aZt +bAd +byS +byP +byP +byP +byP +byP +byP +byP +byP +byP +byQ +bPt +bAd +bAd +bFo +bUa +bAd +byQ +byQ +byP +bBN +aZH +aZH +aZt +aZt +aZt +aZt +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +chp +chQ +chp +cfI +cfI +cfI +cfI +cfI +cfI +cfJ +cfJ +cfI +cfI +cmZ +cpS +cmZ +crP +csC +ctF +cqD +cfJ +cfJ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(156,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaf +aaf +aaa +aaa +aae +aae +aae +aae +aae +aae +aae +aae +adg +adt +adO +aej +aeI +afd +afA +afd +agW +ahK +aiq +adt +ajT +aae +aaf +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +aPn +aQS +arz +aSQ +aTD +arw +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZH +aZH +aZH +aZH +aZH +aZt +aZt +aZt +aZt +aZt +aZt +aZH +aZH +aZH +aZt +aZt +aZf +aZf +aaa +arw +bpW +aQS +cSC +aSQ +bvW +arw +aZt +aZt +bAd +bBN +byQ +byQ +byQ +bBg +byQ +byQ +byQ +byP +byP +byQ +byQ +byQ +byQ +byQ +bDa +byQ +byP +byP +bBN +aZH +aZH +aZt +aZt +aZt +aZt +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +chp +chR +chp +cfI +cfI +cfI +cfJ +cfJ +cfJ +cfJ +cmZ +cnH +cnH +cmZ +cpT +cmZ +crQ +csC +ctF +cqD +cfJ +cfJ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(157,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaf +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +adg +adu +adt +adt +adt +adt +afB +afX +adt +adt +adt +aje +ajT +aaf +aaf +aaf +aae +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +aPn +aQS +arz +aSQ +aTD +arw +aaa +aaa +aaa +aaa +aaa +aad +aad +aad +aab +aab +aab +aab +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZt +aZt +aZt +aZf +aZf +aZf +aZf +aZH +aZH +aZH +aZH +aZf +aZf +aZI +aaa +arw +bpW +aQS +cSC +aSQ +bvW +arw +aZt +aZt +aZt +bBN +bBN +bBN +bBN +byS +bBN +bBN +bBN +bAd +byP +byP +byP +byO +byP +byP +byP +byP +byP +bAd +bBN +aZH +aZt +aZt +aZt +aZt +aZt +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfI +chp +chp +chS +chp +chp +cfI +cfJ +cfJ +cgi +cgi +cgi +cmZ +cnI +coy +cpj +cpU +cqE +crR +csD +ctG +cqD +cfJ +cfJ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(158,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aae +aae +aae +aae +aae +aae +aae +aae +aaf +aae +aae +aae +aae +aae +aae +adg +adv +adP +aek +aeJ +afe +afC +afd +afd +ahL +air +ajf +ajT +aaf +aaf +aaf +aae +aaf +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +aPn +aQS +arz +aSQ +aTD +arw +aaa +aaa +aaa +aaa +aad +aac +aac +aac +aac +aac +aad +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZf +aZf +aZf +aZf +aZf +aZt +aZt +aZt +aZt +aZH +aZH +aZf +aaa +abC +aaa +arw +bpW +aQS +cSC +aSQ +bvW +arw +aZt +aZt +aZt +aZt +aZt +aZH +aZH +aZH +aZt +aZt +aZt +bAd +bAd +bBN +bBN +bBN +bBN +bBN +bBN +bBN +bBN +bBN +aZH +aZH +aZt +aZt +aZt +aZt +aZf +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfJ +cfI +chq +chD +chT +cip +chr +chc +chc +chc +cgu +cgu +cgu +cmZ +cnJ +coz +cpk +cpV +cqF +crS +csC +ctH +cqD +cfJ +cfJ +cfJ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(159,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aae +aae +aae +aae +aae +aae +aae +aae +aaf +aaf +aaf +aaf +aaf +aaf +aaf +adg +adg +adQ +ael +aeK +adS +afD +adS +adt +ahM +ais +adg +ajT +aae +aaf +aae +aae +aaf +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +aPn +aQS +arz +aSQ +aTD +arw +aaa +aaa +aaa +aaa +aad +aad +aab +aac +aac +aac +aac +aac +aac +aaa +aaa +aad +aad +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZI +aZf +aZf +aZt +aZt +aZt +aZt +aZI +aZt +aZt +aaa +aaa +aaa +abC +aaa +arw +bpW +aQS +cSC +aSQ +bvW +arw +aaa +aZt +aZt +aZt +aZH +aZH +aZH +aZH +aZt +aZt +aZt +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZH +aZt +aZt +aZt +aZt +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfI +cfI +cfI +chr +chE +chU +ciq +ciR +cjs +cjS +cgL +chc +chc +chc +cna +cnK +coA +cpl +cpW +cqG +crT +csC +ctF +cqD +cfJ +cfJ +cfJ +cfJ +cqD +cza +cqD +aaa +aaa +aaa +cqD +cza +cqD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(160,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaf +aaf +aal +aal +aal +aal +aal +aal +aal +aal +aal +aal +aal +aaf +aaf +aaf +adg +adR +aem +aeL +adS +afE +adS +adt +adt +adt +adg +ajV +aae +aae +aae +aae +aaf +aaf +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +aPn +aQT +arz +aSQ +aTD +arw +aaa +aaa +aaa +aaa +aaa +aad +aab +aab +aab +aab +aab +aad +aac +aac +aac +aac +aac +aac +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +abC +aaa +arw +bpW +aQS +cSC +aSQ +bvW +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZt +aZH +aZH +aZH +aZH +aZt +aZt +aZt +aZH +aZH +aZH +aZH +aZt +aZt +aZt +aZt +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +cfI +cfI +cfI +cfI +cfI +cfI +chq +chF +chV +cir +chq +cjt +cjT +cjT +clg +chb +chc +cmZ +cmZ +cmZ +cmZ +cmZ +cmZ +crU +csE +ctI +cqD +cfJ +cfJ +cfJ +cfJ +cxr +czb +cxr +aaa +aaa +aaa +cxr +czb +cxr +aaa +aaa +cqD +cqD +cqD +cqD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(161,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaf +aal +aal +aal +aal +aal +aal +aal +aal +aal +aal +aal +aal +aal +aaf +aaf +adw +adS +adS +adS +adS +afF +adS +adS +adS +adS +adw +ajV +aae +aae +aae +aae +aaf +aaf +aaf +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +aPn +aQS +arz +aSQ +aTD +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aab +aab +aac +aac +aac +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +abC +aaa +arw +bpW +aQS +cSC +aSQ +bvW +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aZt +aZH +aZH +aZH +aZH +aZt +aaa +aZI +aZt +aZt +aZt +aZt +aZt +aZt +aZt +aZt +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfI +cfI +cfI +cfI +cfI +cfI +chq +chq +chr +chr +chr +cgu +cgu +ckz +cjt +cjT +cms +cnb +cmF +coB +cgL +cpX +cqH +crV +csC +ctF +cWG +cqD +cqD +cqD +cqD +cqD +czc +cqD +cqD +cqD +cqD +cqD +czc +cqD +cqD +cqD +cul +cFR +cGj +cqD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(162,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaf +aal +aal +aau +aax +aax +abl +aax +abM +aax +aax +aaw +aal +aal +aal +aaf +adw +adT +aen +aeM +adS +afG +afY +agX +ahN +ait +adw +ajV +aae +aae +aaf +aaf +aaf +aaf +aaf +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +aPn +aQS +arz +aSQ +aTD +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aab +aab +aab +aad +aac +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +abC +aaa +arw +bpW +aQS +cSC +aSQ +bvW +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aZt +aZt +aZt +aZt +aZt +aZt +aZt +aZt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfI +cfI +cfI +cfI +cfI +cfI +cfJ +cgi +cgi +cgi +cgi +cgu +cgu +cjV +cgu +cgL +cmt +cjT +cjT +coC +cjT +cpY +cqI +crW +csF +cVo +cum +cum +cum +cxp +cxU +cxU +cxU +cxU +cxU +cBI +cxU +cDh +cxU +cxU +cxU +cxU +cBI +cFS +cGk +cxr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(163,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aae +aae +aae +aal +aal +aav +aax +aaw +aaw +abx +aax +aax +aax +aaw +aaw +cJi +aal +aal +aal +adU +aeo +aeM +aff +aeM +afZ +agY +aeM +aiu +adw +ajV +aae +aae +aaf +aaf +aaf +aaf +aaf +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +aPn +aQS +arz +aSQ +aTD +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +abC +aaa +arw +bpW +aQS +cSC +buu +bvW +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aac +aad +aaa +aaa +aaa +aaa +aaa +cfJ +cfI +cfI +cfI +cfI +cfI +cfI +cfJ +cfJ +cgi +cgi +cgi +cgi +cgi +cgu +cgu +cgu +cgu +chc +chc +cnL +coD +cgL +cpZ +cqD +crX +csG +ctK +cun +cun +cwu +cxq +cxV +cxV +cxV +cxV +cAM +cxV +cxV +cDi +cDZ +cDZ +cDZ +cDZ +cLJ +cDZ +cGl +cxr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(164,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aae +aae +aae +aal +aal +aaw +aaE +aaS +cJk +aaX +abN +abZ +acn +acu +aax +aaw +aal +aal +aal +aal +aal +aal +aal +aal +aga +agZ +ahO +aiv +adw +ajW +akI +akI +akI +akI +akI +aaf +aaf +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +aPn +aQS +arz +aSQ +aTD +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aag +aaa +abC +aaa +arw +bpW +aQS +cSC +aSQ +bvW +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aab +aab +aac +aac +aad +aaa +aaa +aaa +aaa +aaa +cfI +cfI +cfI +cfI +cfI +cfI +cfI +cfJ +cfJ +cfJ +cfJ +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cfJ +chc +cnM +cgL +cgL +chc +cqD +crY +cLu +cVp +csC +csC +cwv +cul +cxr +cxr +cxr +cxr +cqD +cza +cza +cqD +cxr +cxr +cxr +cxr +cqD +cza +cza +cqD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(165,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aae +aae +aae +aal +cJi +aaw +aaF +aaT +aax +aby +aaX +aca +aax +acv +aax +aaw +aal +adh +adx +adh +adh +adh +adh +aal +agb +aha +ahP +aiw +adw +ajX +akJ +akJ +akJ +amY +akI +akI +akI +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arw +aPn +aQS +arz +aSQ +aTD +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +abC +aaa +arw +bpW +aQS +cSC +aSQ +bvW +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aad +aac +aac +aac +aac +aac +aac +aad +aaa +aaa +aaa +aaa +cfJ +cfI +cfI +cfI +cfJ +cfJ +cfJ +cfJ +cfJ +cfJ +cfJ +cgi +cgi +cgi +cgi +cfJ +cfJ +cfJ +cfJ +chc +chc +cln +chb +chc +chc +cqD +crZ +csH +cVq +csH +csC +cwv +cqD +aaa +aaa +aaa +aaa +cxr +czb +czb +cxr +aaa +aaa +aaa +aaa +cxr +czb +czb +cxr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(166,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aae +aae +aae +aal +aal +aax +aaG +aaU +abm +abm +abO +aaX +aax +acv +aax +aau +aal +cJi +aal +aal +aal +aal +cJi +aal +agc +ahb +aeM +aix +adw +ajY +akK +als +als +amZ +anJ +aoO +apK +aqI +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +aPn +aQS +arz +aSQ +aTD +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aXn +aXn +aXn +aXn +aaa +aXn +aXn +aXn +aXn +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +abC +aaa +arw +bpW +aQS +cSC +aSQ +bvW +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aac +aac +aac +aac +aac +aaa +aaa +aaa +aaa +aaa +cfI +cfI +cfI +cfI +cfJ +cfJ +cfJ +cfJ +cfJ +cfJ +cfJ +cgi +cgi +cgi +cfJ +cjU +cjV +clh +clQ +cmu +ckG +cln +cmA +chc +chc +cqD +csa +csI +cVr +cuo +csC +cww +cqD +aaa +aaa +aaa +aaa +cqD +czc +czc +cqD +aaa +aaa +aaa +aaa +cqD +czc +czc +cqD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aac +aad +aab +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(167,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aae +aae +aae +aal +aal +aax +aaH +aaS +abn +aaS +abP +aax +aaX +acw +aax +acP +aal +aaw +ady +adV +aaw +ady +aaw +aal +agd +ahc +adw +adw +adw +agk +akL +akI +akI +akI +akI +akI +akI +akI +arx +arx +arx +arx +arx +arx +arx +arx +arx +arx +arx +arx +arx +arx +arx +arx +arx +arx +arx +arx +arx +aPo +aQS +arz +aSQ +aTD +arw +abC +abC +abC +abC +abC +abC +abC +abC +aXn +aXn +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aXn +aXn +abC +abC +abC +abC +abC +abC +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +abC +aaa +arw +bpW +aQS +cSC +aSQ +bvW +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aac +aac +aac +aac +aac +aac +aac +aaa +aaa +aaa +cfI +cfI +cfI +cfI +cfI +cfI +cfJ +cgi +cgi +cgi +cfJ +cfJ +cfJ +cgi +cgi +cgi +cfJ +cjU +ckA +cli +clR +cmv +ckH +cln +chc +cpm +cpm +cpm +cpm +cpm +cVs +cup +csB +cwx +cqD +aaa +aaa +aaa +aaa +cyL +cyL +cCu +cyL +cyM +cyM +cyM +cyM +cyL +cCu +cyL +cyL +cyL +cyL +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aad +aac +aac +aab +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(168,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aae +aae +aae +aal +aal +aaw +aaI +aaS +aaS +aaS +aaH +aaE +aaS +acx +abZ +abZ +acR +adi +adi +adi +adi +aeN +adi +acR +age +ahd +ahQ +aiy +ajg +ahQ +akM +alt +alt +ana +alt +alt +apL +aqJ +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +arz +arz +aSQ +aTD +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aXn +aXn +abC +aaa +aaa +abC +aaa +aaa +aYL +aaa +aaa +abC +aaa +aaa +abC +aXn +aXn +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +abC +aaa +arw +bpW +aQS +cSC +aSQ +bvW +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aag +aaa +aaa +aaa +aaa +aaa +aaa +aad +aac +aac +aaa +aad +aab +aab +aad +aaa +aaa +aaa +cfI +cfI +cfI +cfJ +cfJ +cfJ +cfJ +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cfJ +cjV +ckB +clj +clS +cmw +cgL +cln +chc +cpm +cqa +cqJ +csb +csJ +ctL +cuq +csC +cwv +cxr +aaa +cyL +cyL +cyL +cyL +cBJ +czW +cDj +cDl +cDl +cDl +cDl +cDj +czW +cGm +cLG +cGO +cHd +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aad +aac +aac +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(169,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aae +aae +aae +aal +aal +aay +aaJ +aaV +aaS +abz +abQ +acb +aco +acy +acK +abm +acS +adj +adz +adj +aep +aeO +adj +acS +agf +ahe +agk +aiz +ajh +agk +akN +alu +amc +anb +amc +amc +apM +aqK +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +aSQ +aTD +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aXn +aaa +abC +aYo +aYo +aYo +aYo +aYo +aYG +aYo +aYo +aYo +aYo +aYo +abC +aaa +aXn +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +abC +aaa +arw +bpW +aQS +cSC +aSQ +bvW +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfI +cfI +cfI +cfJ +cfJ +cfJ +cfJ +cfJ +cfJ +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cfJ +cjV +ckC +clk +clT +cmx +cjT +cnN +chc +cpm +cqb +cqK +cqK +cqK +cVs +cur +csC +cwv +cxr +aaa +cyL +czd +czV +cLF +cBK +czW +czW +czW +czW +czW +czW +czW +czW +czW +cGB +cGO +cHd +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aac +aac +aac +aad +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(170,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aae +aae +aae +aal +aal +aaw +aaK +aaW +aaS +aaS +aaw +aaE +aaS +acz +acc +acc +acT +adk +adA +adk +adk +adk +adk +acT +agg +ahf +ahR +aiA +aji +ahR +akO +alv +amd +anc +anK +amd +amd +aqL +arA +arA +arA +arA +arA +axa +arA +arA +arA +arA +arA +arA +arA +arA +arA +aJo +arA +arA +arA +arA +arA +arA +arz +arz +aSQ +aTD +arw +aaa +aaa +aaa +aaa +aaa +aag +aaa +aXn +aaa +aaa +aYp +aYu +aYu +aYu +aYu +aYM +aYQ +aYQ +aYQ +aYQ +aYZ +aaa +aaa +aXn +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +abC +aaa +arw +bpW +aQS +cSC +aSQ +bvW +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfI +cfI +cfI +cfJ +cfJ +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cfJ +cjV +ckD +cll +clU +cmy +cnc +cjt +cms +cpm +cqc +cqL +cqL +csK +ctM +cus +cvA +cwx +cxr +aaa +cyM +cze +czW +cAN +czW +czW +cDk +cDk +cDk +cDk +cDk +cDk +czW +czW +cyL +cGO +cHd +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aaa +aaa +aad +aac +aac +aac +aad +aab +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(171,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aae +aae +aae +aal +aal +aax +aaw +aaS +abo +aaS +abR +aax +aaX +acA +aax +acP +aal +adl +adB +aaw +aaw +adB +adl +aal +agh +ahg +agk +agk +agk +agk +akP +akI +akI +akI +akI +akI +akI +akI +arB +arB +arB +arB +arB +arB +arB +arB +arB +arB +arB +arB +arB +arB +arB +arB +arB +arB +arB +arB +arB +aPp +aQS +arz +aSQ +aTD +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aXn +aaa +aaa +aYq +aYq +aYq +aYq +aYq +aYG +aYq +aYq +aYq +aYq +aYq +aaa +aaa +aXn +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +abC +aaa +boI +bpX +aQS +cSC +aSQ +bvX +bxC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfI +cfI +cfJ +cfJ +cfJ +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cfJ +cfJ +cjU +ckE +cll +cll +cjU +cnd +cnO +cln +cpm +cqd +cqM +csc +cqM +ctN +cut +csC +cwv +cxr +aaa +cyM +czf +czX +cyL +czW +czW +cLG +cyM +cyM +cyM +cyM +cLF +czW +czW +cyL +cyL +cHe +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aab +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(172,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aae +aae +aae +aal +aal +aax +aaw +aaX +aaw +aaw +aaw +aaX +aax +acB +aax +aau +aal +aal +aal +aal +aal +aal +aal +aal +agi +ahh +ahS +aiB +agk +ajZ +akQ +alw +ame +ame +anL +aoP +apN +aqM +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +aPq +aQS +arz +aSQ +aTD +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aXn +abC +abC +abC +abC +abC +abC +abC +aYG +abC +abC +abC +abC +abC +abC +abC +aXn +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +abC +aaa +boJ +baS +baT +cST +buv +baS +bxD +aaa +aaa +aaa +aaa +bbo +bbo +bbo +bbo +bbo +bbo +baW +baW +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfI +cfJ +cfJ +cfJ +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cjU +cjU +cjV +cjU +cjU +chb +cnP +cln +cpm +cqe +cqe +cqe +cqe +cVs +cuq +csC +cwv +cxr +aaa +cyM +cze +czW +cAN +czW +czW +cDl +cDl +cDl +cDl +cDl +cDl +czW +czW +cyL +cGO +cHd +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(173,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aae +aae +aae +aal +cJi +aaw +aaF +aaT +aax +aby +aaX +aca +aax +acB +aax +aaw +aal +adh +adh +adh +aeq +adh +adh +aal +agj +ahi +ahS +aiB +agk +ajX +akJ +akJ +akJ +akJ +akI +akI +akI +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +aPq +aQS +arz +aSQ +aTD +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aYo +aYo +aYo +aYo +aYo +aYG +aYo +aYo +aYo +aYo +aYo +aaa +aaa +aXn +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +bbo +bbo +aaa +abC +aaa +boJ +baS +bbS +bCj +buw +baS +bxE +baS +bbo +aaa +bbo +bbo +bbo +bbo +bbo +bbo +bbo +bbo +baW +baW +baW +baW +bbo +bbo +bbp +bbo +bbp +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +cfK +cfJ +cfJ +cfJ +cfJ +cfJ +cfJ +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cfJ +cfJ +cfJ +cfJ +chc +ckF +cnP +coE +cpm +cUj +cUt +cUt +cUt +cVv +cuq +csC +cwv +cxr +aaa +cyL +czd +czY +cLG +czW +czW +czW +czW +czW +czW +czW +czW +czW +czW +cGB +cGO +cHd +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(174,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaf +aaf +aal +aal +aaw +aaE +aaS +cJk +aaX +abS +acc +acp +acC +aax +aaw +aal +aal +aal +aal +aal +aal +aal +aal +agk +agk +agk +agk +agk +ajW +akI +akI +akI +akI +akI +aaf +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +aPq +aQS +arz +aSQ +aTD +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aXn +aaa +aaa +aYp +aYu +aYu +aYu +aYu +aYM +aYQ +aYQ +aYQ +aYQ +aYZ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +bbo +bbo +bbp +bbo +bbo +bbo +bbo +bbo +abC +aaa +boJ +baS +bbS +bCj +bux +baS +bxF +baS +bbo +bbo +bbo +bbo +bbo +bbo +bbo +bbo +bbo +bbo +bbo +bbo +bbo +bbq +bbq +bbq +bbo +bbo +baW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfJ +cfJ +cfJ +cfJ +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cfJ +cfJ +cfJ +cfJ +chc +ckF +cnP +cUf +cqf +cUk +cqN +csd +csL +cqf +cuu +cvB +cwv +cxr +aaa +cyL +cyL +cyL +cyL +cBL +czW +cDm +cDk +cDk +cDk +cDk +cDm +czW +cGm +cLF +cGO +cHd +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(175,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaf +aal +aal +aaz +aax +aaw +aaw +abA +aax +aax +aax +aaw +acL +cJi +aal +aal +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +ajV +aaf +aaf +aaf +aaf +aaf +aaf +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +aPq +aQS +arz +aSQ +aTD +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aXn +aaa +aaa +aYq +aYq +aYq +aYq +aYq +aYG +aYq +aYq +aYq +aYq +aYq +aaa +aaa +aXn +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +bbq +bbq +bbq +bbq +bbq +bbq +bbo +bbo +abC +baS +boK +baS +bbS +bCj +buw +baS +bxG +baS +baS +baS +bbo +bbo +bbo +bbo +bbo +bbo +bbo +bbo +bbq +bbq +bbq +bbq +bbq +bbq +bbo +bbo +bbo +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfJ +cfJ +cfJ +cgi +cgi +cgi +cgi +cgi +cfJ +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cfJ +chc +chc +cnP +cln +cqf +cUl +cqO +cse +csM +cqf +cuq +csC +cwv +cqD +aaa +aaa +aaa +aaa +cyL +cyL +cCu +cyL +cyM +cyM +cyM +cyM +cyL +cCu +cyL +cyL +cyL +cyL +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(176,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaf +aal +aal +aau +aaL +aax +abp +aax +abM +aax +aaL +aaw +aal +aal +aal +aaf +aaf +aae +aae +aae +aae +aae +aaf +aaf +aaf +aaf +aaf +ajV +aaf +aaf +aaf +aaf +aaf +aaf +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +aPq +aQS +arz +aSQ +aTD +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aXn +abC +abC +abC +abC +abC +abC +abC +aYG +abC +abC +abC +abC +abC +abC +abC +aXn +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +bbq +bbq +bbq +bbq +bbq +bbq +bbo +bbq +abC +baS +boL +baS +brs +bCj +buw +baS +bxH +byT +bAg +baS +bbo +bbo +bbo +bbo +bbo +bbo +bbo +bbo +baS +baS +baS +baS +baS +baS +bbo +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfJ +cfJ +cfJ +cgi +cgi +cgi +cgi +cgi +cfJ +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cfJ +cfJ +chc +cnP +cln +cqf +cqf +cqP +cse +csN +ctO +cuq +csC +cwv +cqD +aaa +aaa +aaa +aaa +cqD +cza +cza +cqD +aaa +aaa +aaa +aaa +cqD +cza +cza +cqD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(177,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaf +aal +aal +aal +aal +aal +aal +aal +aal +aal +aal +aal +aal +aal +aaf +aaf +aaf +aae +aae +aae +aae +aae +aaf +aaf +aaf +aaf +aaf +ajV +aaf +aaf +aaf +aaf +aaf +aaf +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +aPq +aQS +arz +aSQ +aTD +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aXn +aaa +aaa +aYo +aYo +aYo +aYo +aYo +aYG +aYo +aYo +aYo +aYo +aYo +aaa +aaa +aXn +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +bbo +bbq +bbq +bbq +bbq +bbq +bbq +bbq +bbq +baS +baS +boM +bdK +bbS +bCj +buw +baS +bxI +byU +bAh +baS +bbo +bbo +bbo +bbo +bbo +bbo +bbo +bbo +baS +bdG +bfl +bey +bgo +baS +bbp +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +cfK +cfJ +baS +baS +baS +baS +baS +baS +baS +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cfJ +cfJ +chc +cnP +cjt +cUh +cqf +cqQ +cse +csO +ctP +cuv +cvC +cwy +cqD +aaa +aaa +aaa +aaa +cxr +czb +czb +cxr +aaa +aaa +aaa +aaa +cxr +czb +czb +cxr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(178,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaf +aal +aal +aal +aal +aal +aal +aal +aal +aal +aal +aal +aaf +aaf +aaf +aaf +aae +aae +aae +aae +aae +aae +aae +aae +aae +aaf +ajV +aaf +aae +aae +aaf +aaf +aaf +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +aPq +aQU +arz +aSQ +aTD +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aXn +aaa +aaa +aYp +aYu +aYu +aYu +aYu +aYM +aYQ +aYQ +aYQ +aYQ +aYZ +aaa +aaa +aXn +aaa +aaa +aaa +aaa +abC +aaa +aaa +bbo +bbo +bbq +bbq +bbq +bbq +bbq +bbq +bbq +bbq +baS +bnv +boN +baS +bbS +bCj +buw +baS +bxJ +byV +bAi +baS +bbo +bbo +bbo +bbo +bbo +bbo +bbo +bbo +baS +bey +bey +bey +bey +baS +bbo +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfJ +baS +cgq +cgy +cgG +cgY +bAg +baS +cfJ +cfJ +cfJ +cgi +cgi +cgi +baS +baS +baS +baS +cgi +cgu +cnQ +cnO +cln +cqf +cqR +cse +csP +ctO +cuq +csC +cwv +cLB +cxr +cxr +cxr +cxr +cqD +czc +czc +cqD +cxr +cxr +cxr +cxr +cqD +czc +czc +cqD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(179,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aae +aae +aae +aae +aae +aae +aaf +aae +aae +aae +aae +aaf +ajV +aaf +aae +aae +aaf +aaf +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +aPq +aQS +arz +aSQ +aTD +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aXn +aaa +aaa +aYq +aYq +aYq +aYq +aYq +aYG +aYq +aYq +aYq +aYq +aYq +aaa +aaa +aXn +aaa +aaa +aaa +aaa +abC +aaa +aaa +bbo +bbo +bbq +bbq +bbq +bbq +bbq +bbq +bbq +bbq +baS +bnw +boO +baS +bbS +bCj +buw +baS +bxJ +byV +bAj +baS +baS +baS +baS +bbo +bbo +bbo +bbo +bbo +baS +bey +bey +bey +bey +baS +baS +baS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +baS +baS +baS +cgr +byV +cgH +cgZ +chf +baS +baS +cfJ +cfJ +cgi +cgi +cgi +baS +bNT +bey +baS +cgi +cgu +cjV +coF +cnM +cqf +cqS +cse +csQ +cqf +cuw +cvD +ctJ +cxp +cxU +cxU +cxU +cxU +cAO +cxU +cxU +cDh +cxU +cxU +cFa +cxU +cxU +cFS +cGk +cxr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(180,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaf +aaf +aae +aae +aae +aae +aae +aaf +aaf +aaf +aaf +aae +aae +aae +aae +aae +aae +aae +aae +aae +aaf +aae +aae +aae +aae +aaf +ajV +aaf +aaf +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +aPq +aQS +arz +aSQ +aTD +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aXn +abC +abC +abC +abC +abC +abC +abC +aYG +abC +abC +abC +abC +abC +abC +abC +aXn +aaa +aaa +aaa +aaa +abC +bbo +bbo +bbo +bbo +bbq +bbq +baS +baS +baS +baS +baS +bbq +baS +bnx +boP +baS +brt +bsK +buy +baS +bxK +byW +bAk +baS +bCh +bDE +baS +bbo +bbo +bbo +bbo +bbo +baS +bev +bPu +bQI +bRO +bSY +bUb +bSY +bVT +bVT +bVT +bVT +bxC +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +cfT +cgc +cgg +bSY +cgs +cgz +cgI +cha +chg +chj +baS +cfJ +cfJ +cfJ +cfJ +cfJ +baS +bey +cLm +baS +cgi +cgu +cjX +cnP +cpo +cqf +cqT +csf +csR +cqf +cux +cvE +cwz +cxs +cxW +cxW +cxW +cxW +cAP +cxW +cxW +cDn +cEa +cEa +cEa +cEa +cFF +cFT +cGl +cxr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(181,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaf +aaf +aaf +aaf +aaf +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aaf +aaf +aaf +ahT +aka +ahT +aaf +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +aPq +aQS +arz +aSQ +aTD +arw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aXn +aaa +aaa +aYo +aYo +aYo +aYo +aYo +aYG +aYo +aYo +aYo +aYo +aYo +aaa +aaa +aXn +aaa +aaa +aaa +aaa +abC +bbo +bbo +bbq +bbq +bbq +bbq +baS +bia +biW +bjN +baS +baS +baS +bny +baS +baS +bbS +bCj +buw +baS +baS +byX +baS +baS +baS +bDF +baS +baS +baS +baS +baS +baS +bdK +baS +bPv +baS +baS +baS +baS +baS +baS +baS +baS +baS +bYL +bZn +bZn +bZn +bZn +bZn +bZn +bZn +bZn +bZn +bZn +bZn +bZn +bZn +bZn +bZn +bZn +bZn +cfU +baS +baS +baS +baS +baS +bdK +baS +baS +chk +baS +baS +baS +baS +baS +baS +baS +cLl +baS +baS +baS +baS +baS +coH +cpp +cqf +cqU +cqf +cqf +cqf +cuy +cvF +cwA +cul +cxr +cxr +cxr +cxr +cqD +cBM +cCv +cqD +cxr +cxr +cxr +cxr +cul +cFU +cGj +cqD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(182,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aaf +aaf +aaf +ahT +akb +ahT +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +aPq +aQS +arz +aSQ +aTD +arw +aaa +aaa +aaa +aaa +alx +alx +alx +aaa +aaa +aaa +aYp +aYu +aYu +aYu +aYu +aYM +aYQ +aYQ +aYQ +aYQ +aYZ +aaa +aaa +aXn +aaa +aaa +aaa +aaa +bbp +bbo +bbo +bbq +bbq +bbq +bbq +baS +bib +biX +biX +biX +blv +bmy +bnz +boQ +bpY +bru +bsL +buz +biX +biX +byY +bAl +bBh +bCi +bAl +bAl +bAl +bAl +bIr +bAl +bAl +bAl +bAl +bPw +bQJ +bRP +buw +bUc +bVc +bVU +buw +bXj +buv +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +ary +buv +bXj +buw +bVU +bib +biX +biX +chh +chl +chs +chG +chW +cis +chG +chG +chG +chG +cLn +chG +chG +cne +cnR +coI +cpq +cqg +cqV +bAl +bAl +ctQ +cuz +cvG +cwv +cqD +aaa +aaa +aaa +aaa +cqD +cqD +cqD +cqD +aaa +aaa +aaa +aaa +cqD +cqD +cqD +cqD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(183,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aaf +aaf +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +alx +alF +alx +alx +alx +alx +alx +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +arw +aPq +aQS +arz +aSQ +aTD +arw +aaa +aaa +aaa +alx +alx +alx +alx +aaa +aaa +aaa +aYq +aYq +aYq +aYq +aYq +aYG +aYq +aYq +aYq +aYq +aYq +aaa +aaa +aXn +aaa +aaa +aaa +aaa +bbo +bbo +bbo +baS +baS +baS +baS +baS +bic +cKy +biY +biY +blw +biY +bnA +bHe +cRL +bHe +bsM +bbs +bbs +bbs +bbs +bbs +bBi +bCj +bbT +bEI +bFQ +bHe +bIs +bHe +bHe +bHe +bHe +bPx +bpZ +bfn +bbs +bbs +bbs +bbs +bbs +bbs +baU +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +baU +bbs +cgk +bbs +bpZ +bbs +bbs +bfn +bbs +cht +bbs +bbs +bbs +bbs +cju +bbs +bbs +bbs +bbs +bbs +bbs +cNn +bbs +bil +bpZ +cqW +bbs +bbs +bbs +cuA +cvH +cwv +cqD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(184,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aae +aae +aae +aae +aae +aae +aaf +aaf +aaf +ahT +abC +abC +abC +abC +aaa +aaa +aaa +aaa +alx +alx +alx +alx +alx +and +and +alx +alx +alx +abC +aaa +aaa +alx +alx +alx +alx +alx +aaa +abC +aaa +aaa +aaa +arw +aPq +aQS +arz +aSQ +aTD +arw +aaa +aaa +aaa +alx +alx +alx +alF +abC +abC +abC +abC +abC +abC +abC +abC +aYG +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +bbp +bbo +bbo +baS +ber +ber +bgg +baS +bid +bbs +bjO +bkA +blx +cKC +bnB +boR +bqa +brv +cSU +buA +bsN +bvY +byZ +byZ +bBj +bCk +bDG +bEJ +bFR +bHf +bIt +bHf +bLB +bHf +bHf +bPy +bQK +bRQ +cLb +bSZ +bVd +bSZ +bSZ +bSZ +bYb +arA +arA +arA +arA +arA +arA +arA +arA +arA +cdj +arA +arA +arA +arA +arA +arA +arA +arA +arA +bYb +bSZ +bSZ +bSZ +cgA +cgJ +bSZ +bRQ +cLb +chu +bkA +bkA +bkA +bkA +cjv +bkA +bkA +bkA +bkA +cmz +cnf +cnS +bkA +cpr +cqh +cqX +cqh +cqh +cqh +cuB +cvI +cwB +cqD +aaa +aaa +aaa +aaa +cqD +cqD +cqD +cqD +aaa +aaa +aaa +aaa +cqD +cqD +cqD +cqD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(185,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +abC +abC +aaa +aaa +aaa +alx +alx +and +alx +and +and +and +alx +alx +and +alF +alx +and +and +alx +alx +alx +alx +aaa +abC +aaa +aaa +aaa +aOv +aPr +aQS +arz +aSQ +aTE +aUC +aaa +aaa +akR +alx +alx +alx +alx +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aYG +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bbo +bbo +bbo +baS +bes +bey +bgh +bgW +bie +biZ +bjP +bkB +bkB +bkB +bkB +boS +bqb +cSt +cSV +bqb +bqb +bqb +bxL +bxL +bBk +bCl +bxL +bEK +cKT +bEK +bEK +bEK +bEK +bEK +baS +bPz +baS +baS +baS +baS +baS +baS +baS +baS +baS +bYM +bZo +bZo +bZo +bZo +bZo +bZo +bZo +bZo +bZo +bZo +bZo +bZo +bZo +bZo +bZo +bZo +bZo +cfV +baS +baS +baS +baS +baS +baS +baS +baS +baS +chv +baS +baS +baS +baS +baS +baS +baS +baS +bdK +baS +baS +baS +coJ +cpp +baS +baS +baS +baS +baS +cuC +cvJ +cwC +cLB +cxr +cxr +cxr +cxr +cqD +cBN +cCw +cqD +cxr +cxr +cxr +cxr +cul +cFV +cGj +cqD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(186,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +abC +abC +alF +alx +alx +and +and +adZ +aez +aez +aez +afV +adZ +aez +afV +afV +aez +aez +alx +and +and +alx +alx +aaa +aaa +aaa +aKo +aOw +aKo +aQV +aRP +aSR +aLm +aUD +aLm +akR +akR +alx +alx +alx +alx +alx +alx +aaa +aaa +aaa +aaa +aaa +abC +aYG +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bbo +bbo +bbo +baS +bet +bfi +bgi +bgX +bif +bja +bjQ +bkB +bly +bly +bly +bmz +bqb +brw +bsO +buB +bvZ +cTh +cMr +bxM +btb +bCm +bDH +bEK +bFS +bHg +bIu +bKa +bLC +bEK +bNT +bPA +bex +bRR +bbR +bUd +bVe +bVV +bVV +bVV +bVV +bYN +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +aZV +cgd +cgh +cgl +cgt +cgB +cgB +cgB +cgB +cgB +chw +baS +cfJ +cgi +cgi +cgu +cgu +chc +chc +clV +cmA +cgL +cgL +coK +cps +chc +chc +chc +chc +cqD +cuD +cvK +cwD +cxp +cxU +cxU +cxU +cxU +cAQ +cxU +cxU +cDh +cxU +cxU +cxU +cxU +cBI +cFS +cGn +cxr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(187,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +alx +alx +and +aez +aez +afV +aqH +afq +apx +aoQ +afK +aiS +azp +aoQ +aBV +adZ +afV +aez +aez +alx +alx +alx +akR +akR +aKo +aOx +aKo +aQW +aRD +aSS +aLm +aUE +aLm +alx +alx +alx +and +and +alx +alx +alx +aaa +aaa +aaa +aaa +aaa +abC +aYG +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bbq +bbq +bbq +baS +beu +bfj +bgj +baS +big +bja +bjP +bkC +blz +bmz +bmz +boT +bqb +brx +bsP +cSW +buC +cTi +bxN +buH +btb +bCm +buH +bEL +bFT +bHh +bIv +bHh +bLD +bEK +bey +bPB +bey +bdG +baS +baS +baS +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +abC +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +baS +baS +baS +bey +bey +bey +bey +baS +baS +baS +cfJ +cgi +cgi +cgu +cgu +ckF +clm +cjT +cjT +cng +cjT +coL +coD +chc +chc +chc +chc +cqD +cuE +cvL +cwE +cxq +cxV +cxV +cxV +cxV +cAR +cxV +cxV +cDi +cDZ +cDZ +cDZ +cDZ +cLJ +cDZ +cGl +cxr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(188,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +akR +alx +and +and +aez +aez +afq +aoQ +afq +afq +apx +afq +afq +afq +anC +afq +aqH +afq +aoQ +afq +aez +and +and +aKo +aLo +aLo +aKo +aOy +aKo +aQW +aRD +aST +aLm +aUF +aLm +aLm +aLm +alx +and +and +alx +alx +alx +alx +alx +aaa +aaa +abC +abC +aYG +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bbq +bbq +bbq +baS +bev +bfk +bgk +baS +big +bjb +bjR +bkB +bly +bly +bly +boU +bqb +bry +bsP +cSW +buD +cTi +bxO +buH +btb +bCn +bDI +bEM +bFU +bHi +bIw +bHh +bLE +bEK +bey +bPB +bey +ber +baS +bbo +bbo +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +abC +aaa +aaa +aaa +abC +aaa +aaa +aaa +cfJ +cfJ +cfJ +baS +bdG +bQL +bfl +bgo +baS +cfJ +cgi +cgi +cgi +cgi +cgu +cgu +ckF +cln +clW +clW +clW +clW +clW +clW +clW +clW +clW +clW +clW +cuF +cvM +cwF +cqD +cxr +cxr +czg +cxr +cqD +cza +cza +cqD +cxr +cxr +cxr +cxr +cqD +cza +cza +cqD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(189,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aag +aaa +aaa +aaa +aaa +aaa +aaa +abC +akR +akR +alx +and +and +aez +apO +aoR +ahr +ahr +ahr +ahr +avL +ahr +ahr +azq +ahr +ahr +ahr +aEj +adZ +aez +aez +aez +aKo +aLp +aMq +aNr +aOz +aPs +aQW +aRD +aSU +aLm +aUG +aVj +aVD +aLm +alx +and +aXa +aXb +aXa +aXa +aYi +alx +aaa +aaa +abC +aYF +aYH +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bbq +bbq +bbq +baS +baS +baS +baS +baS +big +bja +bjP +bkB +blA +bmz +bmz +boV +bqb +brz +bsQ +cSY +buE +cTi +bxP +bza +bBl +bCo +bDJ +bEN +bFV +bHh +bIx +bHh +bLF +bEK +bNU +bPC +bQL +bRS +baS +bbo +bbo +bbo +bbo +aaa +aXR +aXR +aXR +aXR +aXR +aXR +aXR +aXR +aXR +aXR +aaa +aXR +aXR +aXR +aXR +aXR +aXR +aXR +aaa +aaa +cfJ +cfJ +cfJ +baS +baS +baS +baS +baS +baS +cfJ +cgi +cgi +cgi +cgi +cgu +cgu +cgL +cln +clW +cmB +cnh +cmC +cnV +cmC +cpt +cpt +csg +cpt +clW +cuE +cvN +cwG +cqD +cfI +cfI +aaa +aaa +cxr +czb +czb +cxr +aaa +aaa +aaa +aaa +cxr +czb +czb +cxr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(190,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajj +akc +ajn +alx +alx +aez +aez +afV +afq +anC +arC +arC +arC +arC +arC +arC +arC +arC +arC +arC +afq +anC +afV +adZ +aIf +adZ +aKo +aLq +aMr +aNs +aOA +aPt +aQX +aRD +aSV +aLm +aUH +aVk +aVE +aLm +adZ +aez +aXa +aXt +aXL +aXZ +aYi +aYi +aYi +abC +abC +aYG +abC +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bbo +bbq +bbq +bbq +bbq +bbq +bbq +bbq +baS +big +bja +bjP +bkB +bly +bly +bly +boW +bqb +brA +bsR +cSZ +buF +cTl +bxQ +brQ +bBm +bCp +bDK +bEM +bFU +bHi +bIy +bKb +bLG +bEK +bNV +bPD +baS +baS +baS +bbo +bbo +bbo +bbo +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfJ +cfJ +cfJ +cfJ +cfJ +cfJ +cfJ +cfJ +cfJ +cfJ +cfJ +cgi +cgi +cgi +cgi +cgu +cjU +ckG +cln +clW +cmC +cni +cmC +cnj +cmC +cmC +cnV +csh +cpt +clW +cuG +csC +cLA +cqD +cfI +cfI +cfI +aaa +cqD +czc +czc +cqD +aaa +aaa +aaa +aaa +cqD +czc +czc +cqD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(191,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajk +akd +ajn +ajn +ajn +ajn +aiS +aoQ +aoR +aqN +arC +asx +atB +asx +atC +atC +axN +azr +asx +arC +aqH +aEk +aoQ +afq +apO +adZ +aKp +aLr +aMs +aNt +aOB +aPu +aQY +aRF +aSW +cKe +aUI +aVl +aVF +aLm +ajt +afq +aXb +aXu +aXM +aYa +aYj +aYr +aYj +aYn +aYn +aYH +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bbo +bbo +bbo +bbo +bbo +bbq +bbo +bbq +baS +big +bja +bjP +bkB +blz +bmz +bmz +boU +bqb +brB +bsS +buG +bqb +bqb +bzb +bzb +bBn +bCq +brE +bEL +bFT +bHh +bIz +bHh +bLH +bEK +bNW +bPE +bgp +bgp +bbq +bbq +bbo +bbo +bbo +bbp +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +cfK +cfJ +cfJ +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgu +chc +cgL +clo +clW +cmD +cnj +cnT +cnj +cnV +cmC +cpt +csi +csS +ctR +cuH +csC +cwG +cxr +cfI +cfI +cfI +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aag +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(192,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajl +ake +akS +aly +amf +ane +alr +aoR +apP +adZ +arC +asy +atC +asx +asx +axb +atC +atC +aAH +arC +adZ +amI +ahr +ahr +ahr +aEj +aKo +aKo +aKo +aKo +aKo +aKo +aQZ +aRQ +aSX +aLm +aUJ +aVe +aVG +aLm +alR +aWQ +aXc +aXv +aXN +aYb +aYi +aYi +aYi +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +bbp +bbo +bbo +bbo +bbo +bbq +bbo +bbq +baS +big +bja +bjP +bkB +bly +bly +bly +boX +bqc +brC +bsT +buH +buH +bwc +bxS +bAm +bxS +bCr +bDL +bEK +bFW +bHj +bIz +bKc +bLI +bEK +bNX +bPF +bQM +bgs +bgp +bgp +bbq +bbq +bbo +bbo +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfJ +cfJ +cfJ +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgu +chc +cgL +cln +clW +cmC +cmC +cnU +coM +cpt +cpt +cpt +cpt +cpt +clW +cuI +csC +cwG +cxr +cfI +cfI +cfI +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(193,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cJr +akf +akT +aly +amg +ajn +anM +aoS +apx +adZ +arC +asz +atD +auF +avM +atC +axO +atC +aAI +arC +adZ +adZ +adZ +aiS +akq +amI +aEj +aqH +adZ +adZ +adZ +aLm +aRa +aRK +aSY +aLm +aUK +aVf +aVH +aLm +afq +anC +aXb +aXb +aXa +aXb +aYi +alx +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bbq +bbq +bbq +bbq +bbq +bbq +bbq +bbq +cKp +big +bja +bjP +bkB +blB +bmA +bmA +bmA +bqd +brD +bsU +buH +buI +bqe +bxT +bzc +bBo +bCr +brE +bEK +bFX +bHh +bIz +bKd +bLJ +bEK +bhd +bPG +bQN +bRT +bTa +bgp +bbq +bbo +baW +baW +baW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfJ +cfJ +cfJ +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cfJ +cfJ +cfJ +chc +cjW +cgL +clp +clW +cmC +cmC +cnV +cmC +cnV +cpt +cqY +csj +csj +clW +cuH +csC +cwG +cxr +cfI +cfI +cfI +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(194,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajl +akg +akU +aly +amh +ajn +anN +aoT +adZ +adZ +arC +asx +atC +auG +avN +auG +axP +axO +aAI +arC +adZ +adZ +adZ +adZ +adZ +afq +amI +ahr +aEj +adZ +adZ +aPl +aRb +aRR +aSZ +aTF +aUL +aLm +aLm +aLm +aoR +apu +adZ +alx +alx +alx +alx +alx +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bbq +bbq +bbq +baS +baS +baS +baS +baS +baS +big +bja +bjS +bkB +blC +bmB +bnC +bmz +bkB +brE +cMq +buH +buH +bqe +cTo +bAn +bBp +bCr +bDM +bEK +bFY +bHk +bIA +bKe +bLK +bEK +bNY +bNZ +bit +bhd +bTb +bgp +bbq +bbo +baW +baW +baW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfJ +cfJ +cgi +cgi +cgu +cgu +cgu +cgu +cfJ +cfJ +cgi +cgi +cfJ +chc +chc +chc +cjX +cgL +cln +clW +cmC +cnk +cnW +cnW +cnW +cqi +cqZ +csk +csT +ctS +cuJ +cvD +cwH +cxr +cfI +cfI +cfI +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aag +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(195,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajl +akf +akU +alz +ami +ajn +ajn +anV +anV +anV +arC +arC +arC +auH +avO +auH +arC +arC +aAJ +arC +anV +anV +anV +adZ +adZ +afq +aqH +afq +amI +ahr +aOo +aPv +aRc +aRS +aTa +aLm +aLm +aLm +adZ +adZ +anC +afq +aLm +aLm +aLm +aLm +aLm +alx +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bbq +bbq +bbo +baS +bdG +bew +bfl +bgl +baS +big +bja +bjP +bkD +bkD +bkD +bkD +bkD +bqe +brE +bsT +buH +buH +cWw +bzd +bqe +bqe +bCs +bDN +bEK +bFZ +bEM +bIB +bKf +bEK +bEK +cKY +bNZ +bNZ +bhd +bTb +bgp +bbq +bbq +bbo +bbo +baW +baW +baW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfJ +cfJ +cgi +cgi +cgu +cgC +cgK +cgu +chc +chc +cgu +cgu +chc +chc +ciS +cjw +cjw +cgL +cln +clW +cmE +cnl +cmC +cnV +cmC +cmC +cmC +csl +cmC +clW +cLy +csC +cwG +cxr +cfI +cfI +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(196,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajl +akf +akU +alA +amh +anf +ajn +aoU +aoU +aqO +arD +asA +atE +auI +avP +auI +axQ +azs +aAK +aBW +aCU +aEl +anV +aez +aez +aez +aez +afq +aoy +afq +avh +aPw +aRd +aRD +aTb +aLm +adZ +adZ +adZ +aWh +apu +aez +aLm +aMo +aMn +aYc +aLm +alx +alx +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bbq +bbo +baS +bdH +bex +bex +bgm +bgY +bih +bjc +bjR +bkD +blD +bmC +bnD +boY +bqf +brF +bsV +buJ +buJ +buJ +buJ +buJ +bBq +bCt +bDO +bEO +bGa +bHl +bIC +bKg +bLL +bMS +bLP +bPH +bNZ +bhc +bTb +bgp +bbq +bbq +bbo +bbo +bbo +baW +baW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfJ +cfJ +cfJ +cgi +cgi +cgu +cgD +cgL +cgL +cgL +chb +cgL +chc +cgL +cgL +ciS +cjw +cjV +ckG +cln +clW +clW +clW +clW +clW +clW +clW +clW +clW +clW +clW +cuK +csC +cwG +cxr +cfI +cfI +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(197,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cJs +akf +akU +aly +amj +ang +anO +aoV +apQ +apQ +arE +arE +cLT +arE +avQ +apQ +apQ +azt +aAL +aBX +aoU +aEm +anV +aez +aez +aez +aez +aez +afV +aez +adZ +aLm +aRe +aRT +aTc +aPv +aUM +ahr +ahr +apu +aez +aez +aLm +aNp +aNp +aYd +aLm +aLm +aLm +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +baS +baS +baS +bdI +bey +bey +bgn +baS +big +bbs +bjP +bkD +blE +bmD +bnE +boZ +bqg +brG +bsW +buH +buH +buH +buH +buH +bxQ +bCu +bDP +bDP +bGb +bHm +bID +bKh +bLM +bMT +bOb +bPI +bNZ +bhd +bTc +bgr +bbo +bbq +bbq +bbo +bbo +baW +baW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfJ +cfJ +cfJ +cgi +cgi +cgu +cgu +cgM +chb +cgL +cgL +cgL +cgL +cgL +cit +chc +chc +chc +ckH +cln +chc +chc +chc +chc +chc +chc +chc +chc +chc +chc +ctT +cuF +csC +cwG +cxr +cfI +cfI +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(198,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajl +akh +akV +alB +amk +anh +anP +aoW +aoW +aoW +arF +arF +aoW +arF +avR +aoU +aoU +aoU +aoU +aBX +aoU +cMb +anV +aez +aez +aez +aez +anV +anV +anV +anV +anV +aRd +aRD +aTa +aPw +alr +afq +aoy +afq +aez +aez +aLm +aXw +aXO +aXO +aYk +aYs +aYv +aYw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +arw +bar +baR +baR +bbR +bcv +bbR +bdJ +ber +ber +bgo +baS +bii +bjd +bjT +bkD +blF +bmE +bnF +bpa +bqh +brH +bsX +brQ +brQ +brQ +bze +brQ +brQ +bCv +buH +buH +buH +bHn +buH +bKi +bLN +bMU +bOc +bPJ +bNZ +bjg +bTb +bgp +bbq +bbq +bbq +bbo +bbo +bbo +bbo +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfJ +cfJ +cfJ +cgi +cgi +cgu +cgu +cgu +chc +chc +cgu +cgu +chc +chc +chc +chc +chc +chc +chc +clq +cgL +chc +cgL +cnX +chc +cgL +chc +chc +cjV +csU +clW +cuG +csC +cwG +cxr +cfI +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(199,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajm +aki +akW +alC +alD +ani +ajn +aoU +aoU +aqP +arG +asB +atF +asG +avS +axc +aoW +aoW +aoW +aBY +aCV +aEn +anV +aez +aez +aez +aez +anV +aMt +aNu +aOC +aPx +aRf +aRU +aTa +aLm +aLm +aLm +aLm +aLm +aLm +aLm +aLm +aXx +cKe +aLm +aLm +aLm +aLm +aYx +aYz +aYz +aYz +aYz +aYz +aYz +aYz +aYz +aYz +aYz +aYz +aYz +bas +baS +baS +baS +baS +baS +baS +baS +baS +cKp +baS +bij +bbs +bjU +bkD +bkD +bkD +bkD +bkD +bqi +brI +bsY +bqe +bwd +bwd +bqe +bwd +bqe +bwd +bwd +bqe +bGc +bHo +bIE +bIE +bIE +bMV +bOc +bPK +bNZ +bQM +bTd +bgp +bbq +bbq +bbq +bbo +bbo +bbo +bbp +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +cfK +cfI +cfJ +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgu +cgu +cgu +cjt +cjT +cjT +cnm +cjT +cjT +cjT +cjT +cng +csm +csV +coJ +cuF +cvO +cwH +cxr +cfI +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(200,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajn +akj +ajl +alD +aml +anj +ajn +aoU +aoU +aoY +arH +asC +anV +auJ +avT +aoY +aoU +aoU +aAM +anV +aCW +aEn +anV +anV +anV +anV +anV +anV +aMu +aoU +aoU +aBX +aRg +aRD +aTd +aTG +aUN +aTG +aTG +aWi +aTG +aWR +aTG +aXy +aTG +aTG +aYl +aYt +cPO +cPT +cPT +cPT +cPT +cPT +cPT +aYU +cPT +cPT +cPT +cPT +cPT +cPT +cPT +cQC +bbr +cQJ +bcw +cQJ +cQJ +cQJ +bfm +cQJ +cQJ +bik +bbs +bjP +bkD +blG +bmF +bnG +bpb +bqj +brJ +bsZ +cKK +bwe +bxV +bzf +bAo +bBr +bxV +bDQ +bwc +buH +bHn +bIE +bKj +bLO +cMD +bOd +bPL +bNZ +bhd +bTb +bgp +bgp +bbq +bbq +bbo +bbo +bbo +bbo +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfI +cfI +cfJ +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cfJ +cgi +cgi +cgi +cgi +cgi +cgu +cgu +cgu +clr +ckz +cgL +cln +chb +cgL +cgL +chb +ckH +cgL +cpX +coJ +cuF +csC +cwI +cqD +cfI +cfI +aaa +aaa +cqD +cza +cza +cqD +aaa +aaa +aaa +aaa +cqD +cza +cza +cqD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(201,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ajm +alE +alE +alE +anQ +aoX +aoU +aoY +arI +arM +aoY +arM +arI +aoY +axR +azv +aAN +anV +aCX +aEo +aBW +aHf +aIg +aJp +aKq +aLs +aMv +aoU +aoU +aBX +aRg +aRV +aTe +aRD +aUO +aRD +aRD +aWj +aRD +aTS +aRD +aRD +aRD +aRD +aYm +aRD +aRP +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +arz +baU +bbs +bbT +bbs +bbs +bbs +bbs +bfn +bbs +bbs +bil +cKz +bjP +bkD +blE +bmD +bnE +bpc +bqg +brG +bta +buK +bwf +bxW +bzg +bAp +bBs +bCw +bDR +bEP +bDK +bHn +bIE +bKk +bLP +bLP +bOc +bPM +bNZ +bhd +bTe +bhf +bgp +bbq +bbq +bbo +bbo +bbq +bbo +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfI +cfI +cfJ +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cfJ +cfJ +cfJ +cfJ +cgu +cgu +cgu +chc +cjU +cmF +cnn +ckz +chc +chc +chc +chc +chc +chX +chX +cNr +cvP +cwJ +cqD +cfI +cfI +cfI +aaa +cxr +czb +czb +cxr +aaa +aaa +aaa +aaa +cxr +czb +czb +cxr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(202,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +akR +akR +akR +anR +aoY +aoY +aoY +arH +asD +aoY +auK +avT +aoY +aoY +aoY +aoY +anV +aCY +aEp +aFJ +aHg +aIh +aoU +aEn +aoY +aMw +aoU +aoU +aPy +aRh +aRW +aTf +aTH +aUP +aVm +aVI +aWk +aWE +aWS +aXd +aQN +aXP +aQN +aQN +aQN +aQR +arA +arA +arA +arA +arA +arA +arA +arA +arA +arA +arA +arA +arA +arA +baV +bbt +bbU +bcx +bdd +bdd +bez +bfo +bdd +bdd +bim +bcx +bjV +bkD +blF +bmE +bnF +bpd +bqh +brH +btb +buL +bwg +bxX +bzh +bzh +bzh +bCx +bDS +bEQ +bGd +bHp +bIE +bKl +bLP +bLP +bOc +bPN +bNZ +bRU +bTf +bUe +bgp +bbq +bbq +bbo +bbq +bbq +bbq +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfJ +cfJ +cfJ +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cfJ +chX +chX +chX +chX +chX +chX +chX +chY +chX +chX +chX +chX +chX +chX +chY +chX +chX +ctU +cuL +cvQ +cwK +cLB +cxr +cxr +cxr +cxr +cqD +czc +czc +cqD +cxr +cxr +cxr +cxr +cqD +czc +czc +cqD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(203,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +anS +aoZ +aoZ +aoZ +arJ +asE +aoZ +auL +avU +aoZ +aoZ +aoZ +aaa +anV +aCZ +aEq +aFK +aHh +aoU +aoU +aKr +aLt +aMx +aoU +aoU +aPy +aPy +aRX +aTg +aTI +anV +aLm +aLm +aWl +aPJ +aPl +aLm +aLm +aLm +aLm +aLm +aLm +aLm +aYy +aYy +aYy +aYy +aYy +aYy +aYy +aYy +aYy +aYy +aYy +aYy +aYy +aYy +baS +baS +baS +baS +baS +bdK +baS +baS +baS +bgZ +bin +baS +bjW +bjW +bjW +bjW +bjW +bjW +bjW +brK +btc +bqe +bwh +bxY +bzi +bAq +bBt +bwh +bxY +bqe +bGe +bHn +bIE +bKm +bLP +bMX +bOe +bLQ +bQO +bRV +bTg +bOn +bgp +bbq +bbq +bbo +bbq +bbq +bbq +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfJ +cfJ +cfJ +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cfJ +chY +ciu +ciT +ciT +cjY +ciA +cls +cNm +cmG +clX +cnY +cLq +clX +cNm +clX +csn +clu +clu +cuM +csC +cwL +cxt +cxX +cxX +cxX +cxX +cAS +cxX +cxX +cDo +cEb +cxU +cxU +cxU +cxU +cFS +cGk +cxr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(204,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +anS +aoZ +apR +apR +apR +apR +atG +apR +apR +apR +axS +aoZ +aAO +aoY +aDa +aEr +aBY +aHi +aoU +aoU +aKs +aoY +aMy +aoU +aoU +aoU +aoU +aRY +azA +aTJ +anV +alx +aLm +aWm +aPI +aUR +aUR +aXz +aLm +alx +alx +alx +aaa +aaa +abC +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +abC +aaa +aaa +baW +baW +bbo +bbo +bbq +bbq +bbq +bbq +bgp +bha +bio +bje +bjW +bkE +blH +blI +blI +bpe +bjW +brL +bsY +bqe +bwd +bwd +bqe +bwd +bqe +bwd +bwd +bqe +bGf +bHn +bIF +bKn +cKW +bMY +bOf +bPO +bNZ +bNZ +bTh +bUf +bgq +bbo +bbo +bbo +bbq +bbq +bbq +bbo +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfI +cfJ +cfJ +cfJ +cfJ +cfJ +cgi +cgi +cgi +cgi +cgi +cgi +cfJ +chX +civ +ciU +cjx +cjZ +ckI +clt +cjx +cmH +cjx +cjx +cjx +cjx +cjx +cjx +cjx +cjx +cjx +cuN +cLz +cwM +cxq +cxV +cxV +cxV +cxV +cAT +cBO +cxV +cDi +cEc +cEL +cEL +cLI +cFG +cFW +cGo +cxr +cfI +cfI +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(205,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +anS +aoZ +apR +apR +apR +apR +apR +apR +apR +apR +apR +azw +aAP +aoY +aCW +aEs +anV +aHj +aIi +azy +aKt +aBY +aMz +aoW +aoW +aoW +aoW +aRZ +cOC +aTJ +anV +alx +aLm +aWn +aOl +aNp +aXe +aXA +aLm +alx +alx +alx +aaa +aaa +abC +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +abC +aaa +aaa +baW +baW +baW +bbo +bbq +bbq +bbq +bbq +bgp +bhb +bip +bjf +bjW +bkF +blI +bmG +blI +bpf +bqk +brM +btd +buM +bwi +bwi +bzj +bwi +bBu +bwi +bDT +bER +bGg +bHq +bIE +bKo +cKX +bMZ +bOg +bLP +bQP +bNZ +bTi +bRY +bgq +bbo +bbq +bbq +bbq +bbo +bbo +baW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfI +cfJ +cfJ +cfJ +cfJ +cfJ +cgi +cgi +cgi +cgi +cgi +cgi +cfJ +chX +civ +ciV +ciX +cka +chX +clu +ciX +ciV +ciX +ciX +ciX +ciX +ciX +ciX +ciX +ckb +clv +cum +cum +cwN +cul +cqD +cqD +cza +cqD +cqD +cqD +cqD +cqD +cza +cqD +cqD +cqD +cul +cFX +cGp +cqD +cfJ +cfI +cfI +cfI +aaa +cfJ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(206,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +anS +aoZ +apR +apR +apR +apR +apR +apR +apR +apR +apR +azw +aAP +aoY +aCW +aEs +anV +aHk +aCW +aJq +aKu +aLu +aMA +aoU +aoU +aoU +aoU +aRY +apb +aTJ +anV +alx +aLm +aMg +aWF +aWT +aXf +aNF +aLm +alx +alx +alx +alx +aXR +aXR +aXR +aaa +aXR +aXR +aXR +aXR +aaa +aXR +aXR +aXR +aXR +aXR +baW +baW +baW +bbo +bbo +bbo +bbq +bbq +bgp +bhc +bip +bhd +bjW +bkG +blJ +bmH +bnH +bpg +bql +brN +bsW +brE +buH +buH +buH +buH +buH +buH +bDU +bES +bDI +buH +cWA +bIE +bIE +bIE +bIE +bNZ +bNZ +bNZ +bTb +bhd +bgq +bbo +bbq +bbq +bbq +bbo +bbo +baW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfI +cfJ +cfJ +cfJ +cfJ +cgi +cgi +cgi +cgi +cgi +cgi +cgi +cfJ +chX +ciw +ciW +ciX +ckb +ckJ +clv +clv +clv +clv +clv +clv +clv +cqk +clv +clv +csW +chX +cqD +cqD +cqD +cqD +cfI +cxr +czb +cxr +cfI +cfI +cfI +cxr +czb +cxr +cfI +cfJ +cqD +cqD +cGq +cqD +cfJ +cfJ +cfJ +cfI +cfI +cfJ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(207,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +acD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +anS +aoZ +apR +apR +apR +apR +apR +apR +apR +apR +apR +azw +aAP +aoY +aDb +aEt +anV +aHl +aCW +aoU +aKv +aoY +aMB +aNv +aOD +aPz +aRi +aSa +aTh +aTK +anV +alx +aLm +aLm +aLm +aLm +aLm +aLm +aLm +alx +alx +alx +alx +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +baW +baW +baW +baW +bbo +bbo +bbo +bbq +bgp +bhd +bip +bjg +bjW +bkH +blI +bmI +cMp +bph +bjW +brE +bsX +brN +bwj +bxZ +bzk +bAr +bzk +bCy +bDV +bET +buH +buH +bGh +bKp +bLR +bNa +bOh +bGk +bgq +bgq +bTe +bUg +bgs +bbo +bbq +bbq +bbq +bbo +bbo +baW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfJ +cfJ +cfJ +cfJ +cfJ +cfJ +cfJ +cgi +cgi +cfJ +chX +cix +ciX +ciX +ckc +chX +ciX +ciX +ciX +ciX +ciX +coN +ciX +cql +ciX +ciX +csX +chX +cfJ +cfJ +cfJ +cfI +aaa +cqD +czc +cqD +cfI +cfI +aaa +cqD +czc +cqD +aaa +cfJ +cfJ +cFY +cGr +cFY +cFY +cfJ +cfJ +cfI +cfJ +cfJ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(208,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +anS +aoZ +apR +apR +apR +apR +apR +apR +apR +apR +axS +aoZ +aAQ +aoY +aCW +aEs +anV +aHm +aCW +aJr +aKw +anV +anV +anV +anV +aPA +anV +aSb +avk +anV +anV +alx +and +and +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +baW +baW +baW +bbo +bbo +bbo +bgq +bhd +bip +bhc +bjW +bkI +blK +blI +bnI +bpi +bjW +brO +bte +brE +bwk +cWx +bya +bya +bya +bCz +bDW +bEU +bGh +bGh +bGh +bKq +bLS +bLS +bOi +bGk +bgq +bRW +bTe +bjg +bgq +bbo +bbq +bbq +bbq +bbo +bbo +baW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfJ +cfJ +cfJ +cfJ +cfJ +cfJ +cfJ +cgi +cgi +cfJ +chX +ciy +ciX +cjy +ckd +ciA +ciX +ciX +ciX +ciX +ciX +ciX +ciX +ciX +ciX +ciX +ciX +chX +cfJ +cfJ +cfI +cfI +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cCx +cEd +cCx +aaa +aaa +cfJ +cFY +cGs +cGC +cFY +cFY +cHm +cHm +cqD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(209,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +anS +aoZ +aoZ +aoZ +arK +arK +aoZ +auM +arK +aoZ +aoZ +aoZ +aaa +anV +aCZ +aEs +anV +aHn +aCW +aoU +aEn +anV +aez +aez +adZ +adZ +akq +aSc +cOD +apO +adZ +alx +alx +alx +and +alx +and +and +and +and +and +alx +alx +alx +alF +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +bbp +bbo +bbo +bbo +bgr +bhe +bip +bhd +bjW +bkJ +bkJ +bkJ +bkJ +bkJ +bjW +brE +btb +brE +bwl +bya +bzl +bAs +bBv +bCA +bDX +bEV +bGi +bHr +bIG +bKr +bLT +bNb +bOj +bGk +bQQ +bhd +bTb +bhc +bgq +bbo +bbo +bbo +bbo +bbo +bbo +bbo +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfJ +cfJ +cfJ +cfI +cfI +cfJ +cfJ +cfJ +cfJ +cfJ +chY +ciz +ciY +ciY +cke +ciA +ciX +clY +ciX +ciX +ciX +coO +ciX +ciX +ciX +clY +cLv +chX +cfJ +cfJ +cfI +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cCx +cDp +cDq +cDp +cCx +aaa +cfJ +cFY +cGt +cGD +cGP +cGP +cHn +cHy +cHm +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(210,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +akR +akR +akR +anR +aoY +aoY +aoY +arL +asF +aoY +asF +arL +aoY +aoY +aoY +aoY +anV +aCY +aEs +anV +aHo +aCW +aoU +aKx +anV +aez +aez +adZ +adZ +amJ +anz +afq +afq +aez +and +and +and +and +and +and +and +and +alx +and +and +and +alx +alx +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bbo +bbo +bbo +bgq +bhd +biq +bjh +bjW +bkK +bkK +bkK +bkK +bpj +bqk +brP +btb +buN +bwm +bya +bzm +bAt +bAt +bCB +bDY +bEW +bGj +bHs +bIH +bKs +bLU +bNc +bOk +bPP +bQR +bRX +bTj +bhd +bgq +bbo +bbo +bbo +bbo +bbo +bbo +bbo +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfJ +cfJ +cfJ +cfI +cfI +cfI +cfJ +cfJ +cfJ +cfJ +chX +ciA +ciA +chX +ckf +chX +clw +cLo +ciA +ciA +ciA +chX +clw +cLo +clw +chX +chX +chX +cfJ +cfJ +cfI +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cCy +cDq +cDq +cEM +cCy +aaa +cfI +cfJ +cFY +cGE +cGQ +cFY +cHm +cHz +cHm +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(211,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +akR +akR +akR +alx +anT +aoX +aoU +aoY +arM +arM +aoY +arM +arM +aoY +axT +azx +aAR +anV +aCX +aEs +anV +aHp +aIj +aJs +aKy +aHp +aez +aez +adZ +afq +amK +afq +afq +aTL +aez +and +and +and +and +and +and +and +and +alx +and +and +and +alx +alx +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bbo +bbo +bbq +bgq +bhf +bip +bhb +bjX +bkL +blL +blL +bnJ +blL +bqm +brQ +btf +buO +bwn +bya +bzn +bAu +bBw +bAu +bAu +bEX +bGk +bHt +bII +bKt +bLV +bII +bOl +cKZ +bQS +bOn +bTb +bhd +bgq +bbo +bbo +bbo +bbo +bbo +bbo +bbo +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfI +cfJ +cfJ +cfJ +cfJ +cfI +cfI +cfI +cjz +ckg +cjz +ckg +cjz +cfI +cfI +cfI +cjz +ckg +cjz +ckg +cjz +cfI +cfI +cfJ +cfJ +cfI +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cCy +cDr +cDq +cEN +cCy +aaa +aaa +cfI +cFY +cFY +cFY +cFY +abC +cHA +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(212,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +akR +alx +alx +alx +anU +apa +aoU +aoY +arL +arL +aoY +arL +arL +aoY +aoU +aoU +aAM +anV +aDc +aEs +aFL +aHq +aIk +aJt +aKz +aHp +aez +aez +aez +afq +amK +afp +afV +adZ +aez +aez +aez +aez +aez +and +and +alx +alx +alx +and +and +and +alx +alx +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bbo +bbo +bbq +bgp +bhg +bip +bji +bjW +bkM +blM +bmJ +bnK +bkM +bjW +brR +btg +buP +bwo +bya +bzo +bAv +bBx +bCC +bDZ +bEY +cKU +bHu +bIJ +bHu +bLW +bIJ +cWD +bGk +bgq +bOn +bTb +bhd +bgq +bbo +bbq +bbq +bbq +bbq +bbo +bbp +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +cfK +cfJ +cfJ +cfJ +cfI +cfI +cfI +cfI +cjz +ckg +cjz +ckg +cjz +cfI +cfI +cfI +cjz +ckg +cjz +ckg +cjz +cfI +cfI +cfJ +cfJ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cCz +cDs +cDq +cEO +cCz +aaa +aaa +cfJ +cfJ +cfK +cfJ +aaa +abC +cHA +abC +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(213,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +akR +alx +alx +alx +anV +apb +aoU +aoU +aoU +asG +atH +aoW +aoW +aoW +aoW +azy +aoW +aBY +aDd +aEs +aFM +aHq +aIl +aJu +aKA +aHp +adZ +aez +aez +apx +cOz +aqH +adZ +adZ +adZ +adZ +afq +aWo +afV +afS +afS +afV +alx +alx +alx +alx +alx +alx +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bbo +bbo +bbq +bgp +bhh +bir +bgq +bjW +bjW +bjW +bjW +bnL +bjW +bjW +brS +bjY +buQ +bwp +byb +bya +cKP +bya +bya +bya +bya +bGk +bHv +bIK +bHv +bHv +bHv +bHv +bGk +bgq +bOn +bTb +bUg +bgr +bbo +bbq +bbq +bbq +bbq +bbo +bbo +bbo +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfJ +cfI +cfI +cfI +aaa +aaa +cjz +ckg +cjz +ckg +cjz +cfI +cfI +cfI +cjz +ckg +cjz +ckg +cjz +aaa +aaa +cfI +cfI +cfI +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cCy +cDs +cDq +cEO +cCy +aaa +aaa +aaa +cfI +abC +aaa +aaa +abC +cHB +caQ +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(214,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +akR +akR +alx +alx +anV +apc +apS +apS +arN +arN +cLU +arN +arN +apS +apS +azz +apS +aBZ +aDe +aEu +aFN +aHq +aIm +aJu +aKB +aHp +adZ +adZ +afV +alR +amK +afq +adZ +afq +akq +akq +akq +avh +awu +alr +aOF +afS +afV +afS +afV +akR +akR +akR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bbo +bbq +bgp +bhd +bip +bgq +bgq +bgq +bgq +bgq +bgp +bgp +bgp +bjY +bth +buR +bwq +bjY +bgq +bAw +bhb +bCD +bkR +bgq +bGk +cWy +bHv +bHv +cWy +bIK +cWy +bGk +bgq +bOn +bTb +bhd +bgq +bbo +bbq +bbq +bbq +bbq +bbq +bbq +bbo +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfI +aaa +aaa +aaa +cjz +ckg +cjz +ckg +cjz +cfI +aaa +aaa +cjz +ckg +cjz +ckg +cjz +aaa +aaa +cfI +cfI +cfI +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cCy +cDs +cDq +cEO +cCy +aaa +aaa +aaa +aaa +abC +aaa +aaa +abC +abC +cHA +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aad +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(215,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +akR +alx +alx +alx +anV +apd +aoU +aoU +arO +arO +aoU +arO +arO +aoU +axU +azA +aoU +aBX +aoU +aEn +aFO +aHq +aIm +aJu +aKC +aHp +aHp +aNw +afq +afq +amK +akq +aEi +akq +akq +aqH +afq +afp +afV +akq +akp +afS +akp +akp +ajo +akR +akR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bbo +bbo +bbq +bgp +bhd +bip +bgq +bgp +bgp +bgp +bgq +bgp +bgp +bgp +bjY +bti +bqp +bpr +bnM +bhd +bhd +bhd +bhd +blR +bgq +bGk +cWz +bHv +bHv +bHv +bHv +bHv +bGk +bgp +bOn +bTb +buZ +bgq +bbo +bbo +bbq +bbq +bbq +bbq +bbq +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +chX +ckf +chX +clx +chX +aaa +aaa +aaa +chX +clx +chX +clx +chX +aaa +aaa +aaa +cfI +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cCy +cDs +cDq +cEO +cCy +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +abC +cHA +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(216,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +akR +akR +alx +alx +anV +ape +ape +aqQ +arP +asH +atI +auN +apQ +apQ +axV +azB +aAS +aBW +aDf +aEv +aFP +aHq +aIn +aJv +aKD +cNU +cOb +cOf +aOE +cOs +anz +adZ +adZ +aez +aez +aez +adZ +adZ +afS +akp +aXg +akp +akp +akp +ajo +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bbo +bbo +bbo +bbo +bgs +bhe +bip +bgq +bgq +bgp +bgp +bgp +bgp +bgp +bgp +bjY +btj +bqp +bpr +bnM +bhc +bhg +blS +bgq +bye +bhf +bGk +bGk +bHv +cWB +bHv +bHv +bGk +bGk +bhd +bOn +bTb +bhd +bgq +bgq +bbo +bbo +bbo +bbo +bbq +bbq +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +chm +chm +chm +ckh +chm +cly +chm +chn +chn +chn +chm +cpu +chm +cpu +chm +chm +chm +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cCA +cDs +cDq +cEO +cCA +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +abC +cHA +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(217,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +akR +akR +ank +ank +apf +apf +aqR +ank +ank +ank +ank +ank +ank +ank +azC +ank +ank +anV +anV +anV +aHp +aHp +aHp +aHp +aHp +aHp +aoR +ahr +apu +afq +adZ +alx +and +and +and +alx +alx +afS +akp +aXh +afV +aXQ +akp +ajo +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bbo +bbo +bbo +bgq +bhd +bis +bjj +bgq +bgq +bgq +bgp +bgp +bgp +bgq +bjY +btk +buS +bwr +bjY +bgq +bgq +bgr +bgq +bip +bhd +bhh +bGk +bGk +bGk +bGk +bGk +bGk +bhd +bhd +bOn +bTb +bhd +bhd +bgq +bgq +bgq +bgp +bbq +bbo +bbo +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +chm +chm +chm +chm +ciZ +cjA +cjB +chm +chJ +ckk +ckk +ckk +ckk +coP +chJ +chm +cra +cra +csY +chm +chm +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cCy +cDt +cDq +cEP +cCy +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +abC +cHA +abC +abC +cHf +cIX +cHf +aaa +aaa +aaa +aaa +aaa +aac +aac +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(218,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ank +anW +apg +apT +aqS +aph +ank +atJ +atJ +avV +axd +axW +azD +aAT +ank +adZ +adZ +adZ +adZ +adZ +aJw +ahr +ahr +ahr +aNx +aoy +afq +aez +aez +alx +and +and +and +and +alx +afS +aRj +aXi +afS +ala +ajr +ajo +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +baW +bbo +bbq +bgp +bhd +bhd +bip +bjY +bjY +bjY +bjY +bjY +bjY +bjY +bjY +bjY +buQ +bws +bjY +bgq +bgq +bgq +bgq +bip +bhd +bhd +bhg +bhd +bKu +bhc +bhd +bhd +bPQ +bQT +bRY +bTk +bhd +bhd +bhg +bhd +bXk +bgp +bbq +bbo +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +chm +chx +chH +chZ +chm +cja +cjB +cki +chm +clz +chJ +chJ +chJ +chJ +chJ +cpv +chm +cra +cra +csY +ctV +cuO +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cCy +cDs +cDq +cEO +cCy +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +cHf +cHO +cHf +cHf +cHC +cIY +cHf +aaa +aaa +aaa +aaa +aab +aac +aac +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(219,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ank +anX +aph +apU +aqT +arQ +asI +atK +auO +auO +auO +avW +azE +avW +ank +apO +aqH +aoR +ahr +ahr +apu +afq +aqH +afq +aNy +afV +adZ +aez +and +alx +and +and +and +and +alx +afV +afV +afV +afV +afV +afV +afV +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +bbp +bbo +bbq +bgp +bgq +bhd +bip +bjY +bkN +blN +blP +bnM +bpk +bqn +brT +bnM +buT +bwt +bjY +bgp +bgp +bgp +bgp +bis +bjZ +bjZ +bHw +bjZ +bjZ +bjZ +bjZ +bOm +bPR +bQU +bQU +bTl +bjZ +bkR +bhd +bhd +bgr +bgr +bgs +abC +abC +abC +abC +abC +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +chn +chy +chI +cia +chm +cja +cjB +cki +chm +chJ +clZ +clZ +clZ +clZ +clZ +chJ +cqm +cra +cra +csZ +ctV +cuO +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cCy +cCz +cEe +cCz +cCy +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +cHf +cHP +cHC +cIw +cIH +cIZ +cHf +aaa +aaa +aaa +aaa +aac +aac +aac +aac +aac +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(220,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +akR +akR +ank +anY +api +apV +apV +apV +asJ +atL +atL +avX +atL +atL +azF +aAU +ank +aDg +auE +apu +afq +afq +afq +aKE +adZ +adZ +afV +adZ +alx +alx +alx +alx +and +and +and +and +alx +alx +akR +akR +alx +alx +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +baW +bbo +bbq +bbq +bgq +bhc +bip +bjY +bkO +blO +bmK +bnN +bpl +bqo +brU +btl +bqp +bpr +bjY +bjY +bjY +bjY +bgp +bgp +bgp +bhd +bip +bhd +bgq +bgq +bhd +bOn +bOn +bhd +blS +bhd +bgq +bVf +bjZ +bjZ +bXl +bYc +bYO +acI +acI +acI +caQ +abC +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +chn +chz +chJ +cib +chm +chn +cjC +chn +ckK +chJ +cma +cma +cma +cma +cma +chJ +chm +crb +cso +csZ +ctV +cuO +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +cHf +cHO +cHC +cIx +cII +cJa +cHf +aaa +aaa +aaa +aad +aac +aac +aac +aac +aac +aac +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(221,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +akR +alx +ank +anZ +apj +apW +aqU +arR +ank +atM +auP +avW +avW +axX +azG +aAV +ank +afK +afq +aoy +apx +anN +adZ +afV +adZ +alx +alx +alx +alx +and +and +and +and +and +and +and +alx +akR +akR +akR +akR +akR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +baW +baW +bbq +bbo +bgq +bhd +bip +bjY +bkP +blP +bmL +bnO +bpm +bqp +bkQ +bkQ +buU +bpr +bnM +blP +bzr +bjY +bgp +bgp +bgp +bjg +bip +bgq +bgq +bgq +bgq +bOn +bOn +bgq +bgs +bgq +bgq +bgq +bhd +bhd +bgs +bgs +bgs +abC +abC +bZT +caR +bZT +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +chn +chA +chJ +cic +chm +cjb +chJ +ckj +ckL +chJ +chJ +chJ +chJ +chJ +chJ +chJ +chm +chm +chm +chm +ctV +cuO +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +cHf +cHC +cHQ +cIe +cHS +cIg +cIz +cHf +aaa +aaa +aaa +aac +aac +aac +aac +aad +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(222,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +akR +akR +alx +ank +ank +ank +ank +ank +ank +ank +ank +auQ +avY +auQ +ank +ank +ank +ank +adZ +adZ +afV +adZ +adZ +adZ +adZ +adZ +alx +alx +alx +alx +and +and +and +and +and +and +and +alx +alx +akR +akR +akR +akR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +baW +baW +bbq +bbo +bgq +bhd +bip +bjY +bkQ +bkQ +bkQ +bkQ +bpn +bqq +brV +btm +buV +bwu +bnO +bzp +blP +bjY +bgp +bgp +bgp +bhd +bir +bgq +bgq +bgq +bgq +bOo +bPS +bgp +bbq +bbq +bgq +bgq +bgq +bgq +bgq +bgq +aaa +aaa +aaa +bZT +caS +bZT +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +chn +chz +chJ +chJ +ciB +chJ +chJ +ckk +ckl +chJ +clZ +clZ +clZ +clZ +clZ +chJ +chn +cjd +csp +cjd +ctV +cuO +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +cHf +cHD +cHR +cIf +cIy +cIh +cIA +cHf +aaa +aaa +aad +aab +aad +aad +aad +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(223,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +akR +alx +alx +alx +alx +alx +alx +alx +akR +akR +atN +auR +avW +avW +atN +akR +akR +alx +alx +and +and +and +alx +alx +alx +alx +and +and +and +and +and +and +and +and +alx +alx +alx +alx +alx +alx +alx +akR +akR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +baW +bbq +bbo +bgs +bhe +bip +bjY +bkN +blN +bmL +bnO +bpm +bqr +brW +bmK +buW +bmK +byc +bzq +bAx +bjY +bgq +bgs +bhe +bhd +bip +bgq +bgq +bgq +bgq +bOn +bOn +bgp +bbq +bbq +bbo +bbo +bbo +bbo +bbo +bbo +aaa +aaa +aaa +bZT +caR +cam +bZT +bZT +bZT +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +chn +chB +chK +cid +chm +cjc +chJ +ckl +ckl +chJ +cma +cma +cma +cma +cma +chJ +cqn +cjc +cjc +cjc +ctV +cuO +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaP +abC +cHf +cHf +cHE +cHS +cIg +cIz +cHC +cHf +cHf +aaa +aaa +aaa +aad +aaa +aad +aad +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(224,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +alF +akR +alF +alx +alx +alx +alx +aaa +akR +atN +auS +avW +axe +atN +aaa +akR +akR +alx +and +and +and +and +and +and +and +and +and +and +and +and +and +and +and +alx +alx +alx +alx +alx +alx +alx +alx +alx +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +baW +bbq +bbo +bgq +bhd +bip +bjY +bkO +blQ +bmK +bnP +bpl +bqs +blP +btn +buX +blP +bnM +bzr +blP +bjY +bgq +bgq +bhd +bEa +bEb +bgq +bgq +bgq +bgq +bOp +bOp +bgp +bbq +bbq +bbo +bbo +bbo +bbo +bbo +bbo +aaa +aaa +aaa +bZT +caT +cbt +cbW +ccq +ccI +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +chm +chx +chL +cie +chm +cjd +chJ +chJ +chJ +chJ +chJ +chJ +chJ +chJ +chJ +chJ +chn +cjc +cjc +cjc +ctV +cuO +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cHg +cHo +cHF +cHT +cIh +cIA +cHf +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(225,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +atN +atN +avZ +atN +atN +aaa +aaa +akR +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +baW +bbo +bbq +bgp +bhc +bip +bjY +bkP +blP +blP +bnM +bpo +bqt +brX +bto +buY +bwv +bnM +blP +bzr +bjY +bgq +bgq +bhc +bip +bgs +bgs +bgr +bgr +bgr +bOq +bOq +bgr +bgs +bbo +bbo +bbo +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bZT +caU +cbu +cbX +bZT +bZT +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +chm +chm +chm +chm +cje +cjD +cjc +cjc +clA +cmb +cmb +cmb +cmb +coQ +clA +chn +crc +csq +crc +chm +chm +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cHf +cHf +cHf +cHf +cHf +cHf +cHf +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(226,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +asK +asK +asL +awa +asL +asK +asK +aaa +aaa +aaa +aaa +aaa +aaa +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +baW +bbo +bbq +bgp +bhd +bip +bjY +bjY +bjY +bjY +bkQ +bpp +bqu +bkQ +bjY +bjY +bjY +bjY +bjY +bjY +bjY +bgq +bgq +bhd +bip +bgs +bIL +bIN +bLY +bNd +bOr +bPT +bQV +bgs +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bZT +caV +caW +cbY +bZT +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +chm +chn +chm +chn +chm +chm +chm +chn +chn +chn +chm +chm +chm +chn +chm +chn +chm +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(227,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aad +aaa +aaa +aaa +aab +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +asK +atO +auT +auT +auU +axY +asK +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +alx +alx +alx +alx +alx +and +alx +alx +alx +and +alx +alF +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +bbp +bbo +bbq +bgp +bhd +bis +bjZ +bkR +bgq +bjY +bnQ +bpq +bqv +bqn +bjY +cWu +bjY +byd +bhd +bAw +bgq +bgp +bgp +bhg +bip +bgr +bIM +bKv +bLZ +bNe +bOs +bPU +bQW +bgs +bgs +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bZT +cam +caW +cbv +cam +bZT +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(228,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +asL +atP +auU +auT +auU +axZ +azH +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +alx +alx +alx +alx +alx +alx +alx +alx +alx +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bbo +bbq +bgp +bit +bhd +bhd +bkS +bkR +bjY +blP +bpr +bqw +blP +cWt +cWv +bjY +bip +buZ +bgp +bgp +bgp +bgp +bhd +bip +bgr +bIN +bKw +bMa +bNf +bOt +bPV +bQX +bRZ +bTm +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bZU +can +caX +bZT +bZT +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(229,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aaa +aaa +aaa +aaa +aad +aac +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +asK +atQ +auT +auT +auU +aya +asK +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +alx +alx +alx +alx +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aab +aaa +aaa +aad +aac +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bbo +bgq +bgr +bhe +bhd +bhd +blR +bjY +blP +bps +bqx +blP +bjY +bjY +bjY +bir +bhc +bgp +bgp +bgp +bgq +bhd +bip +bgr +bIO +bKx +bMb +bgr +bOu +bOu +bOu +bgs +bgs +abC +abC +abC +abC +abC +abC +abC +abC +bZT +bZT +bZT +bZT +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(230,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aab +aab +aab +aab +aad +aac +aac +aad +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +asK +asK +asL +awb +asL +asK +asK +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aaa +aaa +aaa +aac +aad +aad +aac +aac +aac +aac +aad +aad +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bbo +bbo +bgq +bgq +bhg +bhd +bip +bjY +bnR +bpt +bqy +brY +bjY +bgq +bjg +bye +bjg +bgp +bgp +bgp +bEa +bjZ +bGl +bgs +bIP +bKy +bMc +bgs +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(231,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aab +aac +aac +aac +aac +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aac +aac +aac +aac +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aac +aac +aac +aac +aac +aac +aac +aac +aad +aaa +aad +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bbo +bbq +bbq +bgp +bhd +bhd +bip +bjY +bjY +bjY +bqz +bjY +bjY +bgq +bhd +bip +bhd +bhd +bhd +bhd +bip +bhd +bgr +bgs +bIQ +bgs +bgs +bgs +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(232,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aac +aac +aac +aac +aac +aac +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aab +aab +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aad +aac +aac +aac +aad +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bbq +bbq +bgp +bgq +bhd +bis +bjZ +bjZ +bjZ +bqA +bjZ +bjZ +bjZ +bjZ +byf +bjZ +bjZ +bjZ +bjZ +bEb +bhd +bgq +bgs +bIR +bgs +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(233,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aag +aaa +aaa +aaa +aaa +aaa +aab +aac +aac +aac +aac +aac +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aad +aac +aac +aac +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aad +aaa +aad +aad +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bbq +bbq +bgp +bgq +blS +bhd +bhd +bhd +bqC +blS +bhb +bva +bhd +bhd +bhd +blS +bhc +bhd +bhd +bgq +bgq +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(234,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aac +aac +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aab +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bbq +bbq +bbq +bgq +bgs +bgq +bgq +bhd +bIQ +bgs +btp +bgs +bww +bgq +bgq +bgs +bgq +bgq +bgq +bgq +bbo +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aag +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(235,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bbo +bbo +bbq +bbq +bgp +bpu +bqD +brZ +btq +bvb +bww +bgp +bbq +bbo +bbq +bbq +bbq +bbq +bbo +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(236,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bbo +bbq +bbq +bbq +bpv +bgs +bgs +btr +bgs +bww +bbq +bbq +bbo +bbo +bbo +bbp +bbo +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(237,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaP +akk +aaP +abC +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +bbo +bbo +bbo +bpv +bgs +bsa +bts +bsa +bgs +bbq +bbo +bbo +bbo +bbo +abC +aaa +aaa +aaP +bIS +aaP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aac +aac +aad +aad +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(238,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaP +abc +aaP +aaP +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bbo +bpw +bgs +bsb +btt +bsb +bgs +bbq +aaa +aaa +aaa +aaa +abC +aaa +aaP +bEZ +bIT +aaP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aag +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aab +aac +aac +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(239,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaP +akl +akX +aaP +aaP +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abD +bsb +btu +bsb +abD +aaa +aaa +aaa +aaa +aaa +abC +aaP +bEZ +bHx +abb +aaP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aac +aac +aac +aac +aac +aac +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(240,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaP +akm +akY +alG +aaP +aaP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bsb +btv +bsb +aaa +aaa +aaa +aaa +aaa +aaa +aaP +bEZ +bGm +abs +abb +aaP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aab +aab +aad +aac +aac +aac +aac +aac +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(241,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaP +akn +akZ +abr +abV +anl +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +btw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bEc +abV +abr +abr +bIU +aaP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aac +aac +aac +aac +aac +aac +aac +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(242,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaP +aaP +aaP +aaP +aaP +aaP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cKF +cKF +cKF +cKF +cKF +aaa +aaa +aaa +aaa +aaa +aaP +aaP +aaP +aaP +aaP +aaP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aab +aab +aab +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(243,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(244,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aag +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(245,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(246,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aag +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(247,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(248,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aad +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(249,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aac +aac +aac +aad +aad +aaa +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(250,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aad +aac +aac +aac +aac +aac +aac +aab +aab +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aag +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(251,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aad +aad +aac +aac +aac +aac +aac +aac +aac +aac +aad +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(252,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aad +aad +aac +aac +aac +aac +aad +aad +aac +aac +aad +aad +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(253,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac +aac +aac +aad +aad +aac +aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(254,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(255,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 26dbc90924..48f1c4b36d 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -1,6 +1,6 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aaa" = ( -/turf/open/space, +/turf/open/space/basic, /area/space) "aab" = ( /obj/docking_port/stationary{ @@ -29,9 +29,7 @@ /turf/open/space, /area/space) "aad" = ( -/obj/effect/landmark{ - name = "carpspawn" - }, +/obj/effect/landmark/carpspawn, /turf/open/space, /area/space) "aae" = ( @@ -158,10 +156,7 @@ /area/space) "aar" = ( /obj/structure/lattice/catwalk, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/space, /area/solar/auxstarboard) "aas" = ( @@ -530,7 +525,7 @@ icon_state = "doors"; name = "WARNING: EXTERNAL AIRLOCK"; pixel_x = 32 - }, + }, /obj/effect/turf_decal/stripes/line{ dir = 2 }, @@ -557,14 +552,14 @@ /turf/open/floor/plasteel/yellow/side{ dir = 9; initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, + }, /area/mining_construction) "abj" = ( /turf/open/floor/plasteel/yellow/side{ dir = 1; icon_state = "yellow"; initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, + }, /area/mining_construction) "abk" = ( /obj/effect/decal/cleanable/dirt, @@ -696,9 +691,7 @@ icon_state = "0-4"; d2 = 4 }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/auxsolarstarboard) "abx" = ( @@ -707,7 +700,7 @@ d2 = 8; icon_state = "4-8"; pixel_x = 0 - }, + }, /obj/structure/cable{ d1 = 2; d2 = 4; @@ -724,7 +717,7 @@ d2 = 8; icon_state = "4-8"; pixel_x = 0 - }, + }, /obj/machinery/door/airlock/external{ name = "External Solar Access"; req_access_txt = "10" @@ -741,7 +734,7 @@ d2 = 8; icon_state = "4-8"; pixel_x = 0 - }, + }, /obj/structure/fans/tiny, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, @@ -753,7 +746,7 @@ d2 = 8; icon_state = "4-8"; pixel_x = 0 - }, + }, /turf/open/space, /area/solar/auxstarboard) "abB" = ( @@ -911,7 +904,7 @@ icon_state = "doors"; name = "WARNING: EXTERNAL AIRLOCK"; pixel_x = 0 - }, + }, /turf/closed/wall/r_wall, /area/maintenance/auxsolarstarboard) "abM" = ( @@ -954,7 +947,7 @@ icon_state = "doors"; name = "WARNING: EXTERNAL AIRLOCK"; pixel_x = 0 - }, + }, /turf/open/floor/plating, /area/hallway/secondary/entry{ name = "Arrivals" @@ -992,7 +985,7 @@ desc = "A sign that shows there are doors here. There are doors everywhere!"; icon_state = "doors"; name = "WARNING: EXTERNAL AIRLOCK" - }, + }, /turf/open/floor/plating, /area/hallway/secondary/entry{ name = "Arrivals" @@ -1305,7 +1298,7 @@ /turf/open/floor/plasteel/yellow/side{ dir = 9; initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, + }, /area/mining_construction) "acx" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -1316,7 +1309,7 @@ dir = 1; icon_state = "yellow"; initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, + }, /area/mining_construction) "acy" = ( /obj/effect/decal/cleanable/dirt, @@ -1512,9 +1505,7 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/hallway/secondary/entry{ @@ -1622,9 +1613,7 @@ /obj/structure/chair{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/hallway/secondary/entry{ @@ -1772,9 +1761,7 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/holopad, /obj/structure/cable/white{ icon_state = "1-2" @@ -2063,9 +2050,7 @@ name = "Arrivals" }) "aeb" = ( -/obj/effect/landmark{ - name = "Observer-Start" - }, +/obj/effect/landmark/observer_start, /turf/open/floor/plasteel/neutral, /area/shuttle/arrival) "aec" = ( @@ -2277,7 +2262,7 @@ /turf/open/floor/plasteel/yellow/side{ dir = 10; initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, + }, /area/mining_construction) "aeB" = ( /obj/structure/cable/white{ @@ -2493,7 +2478,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch"; - req_access_txt = "12" + req_access_txt = "0"; + req_one_access_txt = "32;47;48" }, /obj/effect/turf_decal/stripes/line{ dir = 2 @@ -2557,7 +2543,7 @@ /turf/open/floor/plasteel/neutral/side{ dir = 5; initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, + }, /area/maintenance/starboard/fore_starboard_maintenance) "afc" = ( /obj/structure/grille, @@ -2645,9 +2631,7 @@ /area/maintenance/starboard/fore_starboard_maintenance) "afo" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/starboard/fore_starboard_maintenance) @@ -2798,9 +2782,7 @@ /turf/open/floor/plasteel/redyellow, /area/maintenance/starboard/fore_starboard_maintenance) "afI" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -3466,9 +3448,7 @@ name = "Arrivals" }) "agY" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -3721,7 +3701,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating, @@ -3806,7 +3786,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating, @@ -4578,9 +4558,7 @@ }) "aju" = ( /obj/structure/chair/comfy/brown, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/grimy, /area/hallway/secondary/entry{ name = "Arrivals" @@ -4743,7 +4721,7 @@ anchored = 1; dir = 4; icon_state = "reflector_box" - }, + }, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -4762,8 +4740,9 @@ }) "ajO" = ( /obj/machinery/camera{ - c_tag = "Atmospherics - Reflector Box"; - name = "atmospherics camera" + c_tag = "Supermatter Engine - Fore"; + name = "atmospherics camera"; + network = list("SS13","Engine") }, /turf/open/floor/plasteel/vault{ dir = 5 @@ -4776,7 +4755,7 @@ anchored = 1; dir = 8; icon_state = "reflector" - }, + }, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -4976,7 +4955,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /turf/open/floor/plating, /area/bridge{ name = "Customs" @@ -5058,7 +5037,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /turf/open/floor/plating, /area/security/checkpoint2) "akA" = ( @@ -5197,7 +5176,7 @@ anchored = 1; dir = 1; icon_state = "reflector_double" - }, + }, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -5521,9 +5500,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/starboard/fore_starboard_maintenance) "alA" = ( @@ -5633,7 +5610,7 @@ anchored = 1; dir = 4; icon_state = "reflector_double" - }, + }, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -6334,7 +6311,7 @@ /turf/open/floor/plasteel/neutral/side{ dir = 6; initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, + }, /area/maintenance/fpmaint2/fore_port_maintenance) "ano" = ( /obj/structure/table/wood, @@ -6459,9 +6436,7 @@ buildstackamount = 0; dir = 1 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/machinery/airalarm{ dir = 1; icon_state = "alarm0"; @@ -6740,7 +6715,7 @@ anchored = 1; dir = 1; icon_state = "reflector" - }, + }, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -7028,10 +7003,7 @@ /area/shuttle/syndicate) "aoG" = ( /obj/structure/lattice/catwalk, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/space, /area/solar/auxport) "aoH" = ( @@ -9586,15 +9558,11 @@ "atl" = ( /obj/machinery/ai_status_display, /turf/closed/wall/r_wall, -/area/engine/gravity_generator{ - name = "Atmospherics Engine" - }) +/area/engine/supermatter) "atm" = ( /obj/machinery/status_display, /turf/closed/wall/r_wall, -/area/engine/gravity_generator{ - name = "Atmospherics Engine" - }) +/area/engine/supermatter) "atn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line{ @@ -9667,9 +9635,7 @@ /area/maintenance/fpmaint2/fore_port_maintenance) "atu" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/structure/cable/white{ icon_state = "1-2" }, @@ -9687,7 +9653,7 @@ /obj/structure/table/wood, /obj/effect/decal/cleanable/dirt, /obj/item/clothing/suit/suspenders, -/obj/effect/landmark/costume, +/obj/effect/spawner/lootdrop/costume, /turf/open/floor/plasteel/redblue, /area/maintenance/fpmaint2/fore_port_maintenance) "atx" = ( @@ -9799,9 +9765,7 @@ /area/janitor) "atI" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start{ - name = "Janitor" - }, +/obj/effect/landmark/start/janitor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -9828,9 +9792,7 @@ /area/janitor) "atL" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start{ - name = "Janitor" - }, +/obj/effect/landmark/start/janitor, /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -9852,9 +9814,7 @@ /turf/open/floor/plasteel/neutral, /area/janitor) "atN" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /turf/open/floor/plating, @@ -10242,9 +10202,7 @@ dir = 4 }, /turf/open/floor/plating, -/area/engine/gravity_generator{ - name = "Atmospherics Engine" - }) +/area/engine/supermatter) "auC" = ( /obj/machinery/power/rad_collector{ anchored = 1 @@ -10254,9 +10212,7 @@ icon_state = "0-8" }, /turf/open/floor/circuit/green, -/area/engine/gravity_generator{ - name = "Atmospherics Engine" - }) +/area/engine/supermatter) "auD" = ( /obj/structure/grille, /obj/machinery/atmospherics/pipe/simple/general/visible{ @@ -10265,9 +10221,7 @@ }, /obj/structure/window/reinforced/highpressure/fulltile, /turf/open/floor/plating, -/area/engine/gravity_generator{ - name = "Atmospherics Engine" - }) +/area/engine/supermatter) "auE" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; @@ -10275,18 +10229,14 @@ scrub_Toxins = 0 }, /turf/open/floor/engine, -/area/engine/gravity_generator{ - name = "Atmospherics Engine" - }) +/area/engine/supermatter) "auF" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 }, /turf/open/floor/engine, -/area/engine/gravity_generator{ - name = "Atmospherics Engine" - }) +/area/engine/supermatter) "auG" = ( /obj/structure/grille, /obj/machinery/atmospherics/pipe/simple/general/visible{ @@ -10294,9 +10244,7 @@ }, /obj/structure/window/reinforced/highpressure/fulltile, /turf/open/floor/plating, -/area/engine/gravity_generator{ - name = "Atmospherics Engine" - }) +/area/engine/supermatter) "auH" = ( /obj/machinery/power/rad_collector{ anchored = 1 @@ -10306,9 +10254,7 @@ d2 = 4 }, /turf/open/floor/circuit/green, -/area/engine/gravity_generator{ - name = "Atmospherics Engine" - }) +/area/engine/supermatter) "auI" = ( /obj/structure/cable{ d1 = 4; @@ -10324,9 +10270,7 @@ dir = 8 }, /turf/open/floor/plating, -/area/engine/gravity_generator{ - name = "Atmospherics Engine" - }) +/area/engine/supermatter) "auJ" = ( /obj/structure/cable{ d1 = 2; @@ -10876,15 +10820,11 @@ }, /obj/structure/window/reinforced/highpressure/fulltile, /turf/open/floor/plating, -/area/engine/gravity_generator{ - name = "Atmospherics Engine" - }) +/area/engine/supermatter) "avQ" = ( /obj/machinery/power/supermatter_shard/crystal, /turf/open/floor/engine, -/area/engine/gravity_generator{ - name = "Atmospherics Engine" - }) +/area/engine/supermatter) "avR" = ( /obj/structure/grille, /obj/machinery/atmospherics/pipe/manifold/general/visible{ @@ -10893,9 +10833,7 @@ }, /obj/structure/window/reinforced/highpressure/fulltile, /turf/open/floor/plating, -/area/engine/gravity_generator{ - name = "Atmospherics Engine" - }) +/area/engine/supermatter) "avS" = ( /obj/structure/cable{ d1 = 4; @@ -10912,9 +10850,7 @@ dir = 8 }, /turf/open/floor/plating, -/area/engine/gravity_generator{ - name = "Atmospherics Engine" - }) +/area/engine/supermatter) "avT" = ( /obj/structure/cable{ d1 = 2; @@ -11275,9 +11211,7 @@ /turf/open/floor/plasteel, /area/quartermaster/storage) "awF" = ( -/obj/effect/landmark/start{ - name = "Cargo Technician" - }, +/obj/effect/landmark/start/cargo_technician, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/quartermaster/storage) @@ -11364,9 +11298,10 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/camera{ - c_tag = "Atmospherics - Engine Port"; + c_tag = "Supermatter Engine - Port"; dir = 4; - name = "atmospherics camera" + name = "atmospherics camera"; + network = list("SS13","Engine") }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, @@ -11407,9 +11342,7 @@ dir = 4 }, /turf/open/floor/plating, -/area/engine/gravity_generator{ - name = "Atmospherics Engine" - }) +/area/engine/supermatter) "awV" = ( /obj/structure/cable{ d1 = 2; @@ -11443,9 +11376,10 @@ pixel_y = 0 }, /obj/machinery/camera{ - c_tag = "Atmospherics - Engine Starboard"; + c_tag = "Supermatter Engine - Starboard"; dir = 8; - name = "atmospherics camera" + name = "atmospherics camera"; + network = list("SS13","Engine") }, /obj/structure/cable{ d1 = 1; @@ -11468,9 +11402,7 @@ /area/maintenance/fpmaint2/fore_port_maintenance) "awZ" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/fpmaint2/fore_port_maintenance) "axa" = ( @@ -11579,9 +11511,7 @@ pixel_x = -32 }, /obj/machinery/light/small, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/crew_quarters/toilet{ @@ -11641,9 +11571,7 @@ }) "axq" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start{ - name = "Cargo Technician" - }, +/obj/effect/landmark/start/cargo_technician, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ icon_state = "manifold"; dir = 8 @@ -11654,9 +11582,7 @@ }) "axr" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -11881,18 +11807,14 @@ dir = 5 }, /turf/closed/wall/r_wall, -/area/engine/gravity_generator{ - name = "Atmospherics Engine" - }) +/area/engine/supermatter) "axQ" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 10 }, /obj/machinery/meter, /turf/closed/wall/r_wall, -/area/engine/gravity_generator{ - name = "Atmospherics Engine" - }) +/area/engine/supermatter) "axR" = ( /obj/machinery/door/airlock/glass_atmos{ heat_proof = 1; @@ -11901,9 +11823,7 @@ req_one_access_txt = "24;10" }, /turf/open/floor/engine, -/area/engine/gravity_generator{ - name = "Atmospherics Engine" - }) +/area/engine/supermatter) "axS" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ icon_state = "intact"; @@ -11911,17 +11831,13 @@ }, /obj/machinery/meter, /turf/closed/wall/r_wall, -/area/engine/gravity_generator{ - name = "Atmospherics Engine" - }) +/area/engine/supermatter) "axT" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 9 }, /turf/closed/wall/r_wall, -/area/engine/gravity_generator{ - name = "Atmospherics Engine" - }) +/area/engine/supermatter) "axU" = ( /obj/structure/cable{ d1 = 1; @@ -12552,9 +12468,7 @@ name = "Gas to Filter" }, /turf/open/floor/engine, -/area/engine/gravity_generator{ - name = "Atmospherics Engine" - }) +/area/engine/supermatter) "azf" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1; @@ -12562,9 +12476,7 @@ name = "Gas to Chamber" }, /turf/open/floor/engine, -/area/engine/gravity_generator{ - name = "Atmospherics Engine" - }) +/area/engine/supermatter) "azg" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible, /obj/structure/extinguisher_cabinet{ @@ -13104,9 +13016,7 @@ "aAd" = ( /obj/machinery/atmospherics/pipe/simple/general/visible, /turf/closed/wall/r_wall, -/area/engine/gravity_generator{ - name = "Atmospherics Engine" - }) +/area/engine/supermatter) "aAe" = ( /obj/machinery/atmospherics/components/binary/pump, /obj/effect/turf_decal/bot, @@ -13422,9 +13332,7 @@ /area/quartermaster/storage) "aAN" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start{ - name = "Cargo Technician" - }, +/obj/effect/landmark/start/cargo_technician, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/quartermaster/storage) @@ -13478,7 +13386,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/cable/white, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, @@ -13633,8 +13541,9 @@ pixel_y = 0 }, /obj/machinery/camera{ - c_tag = "Atmospherics - Engine Aft"; - name = "atmospherics camera" + c_tag = "Supermatter Engine - Aft"; + name = "atmospherics camera"; + network = list("SS13","Engine") }, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -13664,9 +13573,7 @@ dir = 1 }, /turf/open/floor/plasteel, -/area/engine/gravity_generator{ - name = "Atmospherics Engine" - }) +/area/engine/supermatter) "aBe" = ( /obj/machinery/atmospherics/pipe/manifold/general/visible, /obj/machinery/meter, @@ -14145,7 +14052,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating, @@ -14792,7 +14699,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = 0 - }, + }, /obj/machinery/light_switch{ pixel_x = 38 }, @@ -15075,7 +14982,7 @@ icon_state = "doors"; name = "WARNING: EXTERNAL AIRLOCK"; pixel_x = 32 - }, + }, /obj/machinery/camera{ c_tag = "Solar - Fore Port"; name = "solar camera" @@ -15483,9 +15390,7 @@ /turf/open/floor/plasteel/grimy, /area/crew_quarters/bar) "aDZ" = ( -/obj/effect/landmark/start{ - name = "Bartender" - }, +/obj/effect/landmark/start/bartender, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ icon_state = "manifold"; dir = 1 @@ -15517,9 +15422,7 @@ /turf/open/floor/plasteel/black, /area/crew_quarters/bar) "aEe" = ( -/obj/effect/landmark/start{ - name = "Bartender" - }, +/obj/effect/landmark/start/bartender, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; on = 1 @@ -15537,9 +15440,7 @@ }, /area/crew_quarters/bar) "aEh" = ( -/obj/effect/landmark/start{ - name = "Bartender" - }, +/obj/effect/landmark/start/bartender, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -15835,7 +15736,7 @@ d2 = 8; icon_state = "4-8"; pixel_x = 0 - }, + }, /obj/machinery/door/airlock/external{ name = "External Solar Access"; req_access_txt = "24"; @@ -15853,7 +15754,7 @@ d2 = 8; icon_state = "4-8"; pixel_x = 0 - }, + }, /obj/structure/fans/tiny, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, @@ -15870,7 +15771,7 @@ d2 = 8; icon_state = "4-8"; pixel_x = 0 - }, + }, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -15887,9 +15788,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/auxsolarport) "aER" = ( @@ -16051,7 +15950,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = 0 - }, + }, /obj/machinery/light_switch{ pixel_x = 24; pixel_y = 24 @@ -16360,9 +16259,7 @@ }, /area/hallway/primary/fore) "aFF" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -16522,9 +16419,7 @@ /turf/open/floor/plasteel, /area/quartermaster/storage) "aFV" = ( -/obj/effect/landmark/start{ - name = "Cargo Technician" - }, +/obj/effect/landmark/start/cargo_technician, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, @@ -16863,7 +16758,7 @@ d1 = 1; d2 = 4; icon_state = "1-4" - }, + }, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/engine/gravity_generator{ @@ -17052,9 +16947,7 @@ /area/crew_quarters/bar/atrium) "aGZ" = ( /obj/structure/chair/stool/bar, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/redyellow, /area/crew_quarters/bar/atrium) "aHa" = ( @@ -17088,9 +16981,7 @@ /obj/structure/chair/office/dark{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Cargo Technician" - }, +/obj/effect/landmark/start/cargo_technician, /turf/open/floor/plasteel/brown{ icon_state = "brown"; dir = 9 @@ -17112,9 +17003,7 @@ name = "\improper Cargo Office" }) "aHf" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -18077,7 +17966,7 @@ icon_state = "doors"; name = "WARNING: EXTERNAL AIRLOCK"; pixel_x = 32 - }, + }, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -19047,7 +18936,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/machinery/light{ dir = 1 }, @@ -19181,9 +19070,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/landmark/start{ - name = "Cargo Technician" - }, +/obj/effect/landmark/start/cargo_technician, /turf/open/floor/plasteel/neutral, /area/quartermaster/office{ name = "\improper Cargo Office" @@ -19231,7 +19118,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/cable/white{ icon_state = "0-4" }, @@ -19868,9 +19755,7 @@ /turf/open/floor/plasteel/redblue, /area/crew_quarters/theatre) "aMw" = ( -/obj/effect/landmark/start{ - name = "Clown" - }, +/obj/effect/landmark/start/clown, /turf/open/floor/plasteel/redblue, /area/crew_quarters/theatre) "aMx" = ( @@ -20383,7 +20268,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/poddoor/preopen{ @@ -20426,7 +20311,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/poddoor/preopen{ @@ -20898,9 +20783,7 @@ /turf/open/floor/carpet, /area/crew_quarters/bar/atrium) "aOr" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/redyellow, /area/crew_quarters/bar/atrium) "aOs" = ( @@ -21019,7 +20902,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/machinery/power/apc{ dir = 8; name = "Cargo Bay APC"; @@ -21518,9 +21401,7 @@ /obj/machinery/atmospherics/pipe/simple/yellow/visible{ dir = 4 }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral, /area/atmos) @@ -21735,9 +21616,7 @@ /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/theatre) "aPM" = ( -/obj/effect/landmark/start{ - name = "Mime" - }, +/obj/effect/landmark/start/mime, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -21755,7 +21634,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = 0 - }, + }, /obj/machinery/light_switch{ pixel_x = 26; pixel_y = -26 @@ -22076,9 +21955,7 @@ /obj/structure/chair/office/dark{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Cargo Technician" - }, +/obj/effect/landmark/start/cargo_technician, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -22269,9 +22146,7 @@ "aQJ" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/brown, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/red/side{ dir = 8 }, @@ -22313,9 +22188,7 @@ /obj/structure/bed, /obj/item/weapon/bedsheet/brown, /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/red/side{ dir = 8 }, @@ -22772,9 +22645,7 @@ /area/crew_quarters/bar/atrium) "aRE" = ( /obj/structure/chair/stool, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/redyellow, /area/crew_quarters/bar/atrium) "aRF" = ( @@ -22845,9 +22716,7 @@ /obj/structure/chair/office/dark{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Cargo Technician" - }, +/obj/effect/landmark/start/cargo_technician, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment{ dir = 4 @@ -23039,9 +22908,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/landmark/start{ - name = "Quartermaster" - }, +/obj/effect/landmark/start/quartermaster, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/structure/disposalpipe/segment{ dir = 4 @@ -23168,9 +23035,7 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/obj/effect/landmark/start{ - name = "Quartermaster" - }, +/obj/effect/landmark/start/quartermaster, /turf/open/floor/plasteel/neutral, /area/quartermaster/qm) "aSl" = ( @@ -23206,9 +23071,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark/start{ - name = "Quartermaster" - }, +/obj/effect/landmark/start/quartermaster, /turf/open/floor/plasteel/neutral, /area/quartermaster/qm) "aSo" = ( @@ -24154,7 +24017,7 @@ icon_state = "doors"; name = "WARNING: EXTERNAL AIRLOCK"; pixel_x = 32 - }, + }, /obj/effect/turf_decal/stripes/line{ dir = 2 }, @@ -24521,9 +24384,7 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ icon_state = "manifold"; dir = 4 @@ -24561,7 +24422,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = 0 - }, + }, /obj/machinery/light{ icon_state = "tube1"; dir = 4 @@ -25701,9 +25562,7 @@ }) "aWZ" = ( /obj/structure/chair/office/dark, -/obj/effect/landmark/start{ - name = "Cargo Technician" - }, +/obj/effect/landmark/start/cargo_technician, /turf/open/floor/plasteel/brown, /area/quartermaster/office{ name = "\improper Cargo Office" @@ -25810,7 +25669,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/cable/white{ @@ -25936,9 +25795,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -26168,9 +26025,7 @@ /area/atmos) "aXP" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start{ - name = "Atmospheric Technician" - }, +/obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/plasteel/neutral, /area/atmos) "aXQ" = ( @@ -26192,9 +26047,7 @@ /area/atmos) "aXS" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start{ - name = "Atmospheric Technician" - }, +/obj/effect/landmark/start/atmospheric_technician, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment{ dir = 2; @@ -26223,9 +26076,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, -/obj/effect/landmark/start{ - name = "Atmospheric Technician" - }, +/obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/plasteel/neutral, /area/atmos) "aXW" = ( @@ -26354,7 +26205,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = 0 - }, + }, /obj/machinery/chem_master/condimaster{ name = "BrewMaster 3000" }, @@ -26692,7 +26543,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/cable/white, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, @@ -27198,9 +27049,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/landmark/start{ - name = "Chef" - }, +/obj/effect/landmark/start/cook, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ icon_state = "manifold"; dir = 1 @@ -27506,7 +27355,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating, @@ -27586,9 +27435,7 @@ pixel_y = 26 }, /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/light/small{ dir = 1 }, @@ -27940,9 +27787,7 @@ /area/crew_quarters/kitchen) "bbr" = ( /obj/machinery/holopad, -/obj/effect/landmark/start{ - name = "Cook" - }, +/obj/effect/landmark/start/cook, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/crew_quarters/kitchen) @@ -27976,9 +27821,7 @@ /obj/structure/chair{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/brown{ icon_state = "brown"; dir = 8 @@ -28101,9 +27944,7 @@ }) "bbL" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start{ - name = "Shaft Miner" - }, +/obj/effect/landmark/start/shaft_miner, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -28112,9 +27953,7 @@ name = "\improper Mining Office" }) "bbM" = ( -/obj/effect/landmark/start{ - name = "Shaft Miner" - }, +/obj/effect/landmark/start/shaft_miner, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; on = 1 @@ -28124,9 +27963,7 @@ name = "\improper Mining Office" }) "bbN" = ( -/obj/effect/landmark/start{ - name = "Shaft Miner" - }, +/obj/effect/landmark/start/shaft_miner, /turf/open/floor/plasteel/neutral, /area/quartermaster/miningdock{ name = "\improper Mining Office" @@ -28674,9 +28511,7 @@ }) "bcR" = ( /obj/machinery/holopad, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, @@ -28875,7 +28710,7 @@ name = "WARNING: BLAST DOORS"; pixel_x = 0; pixel_y = 0 - }, + }, /turf/open/floor/plating, /area/security/brig) "bdl" = ( @@ -29531,7 +29366,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating, @@ -29751,9 +29586,7 @@ pixel_x = 26; pixel_y = 26 }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel/red/side{ dir = 5 }, @@ -30249,9 +30082,7 @@ /turf/open/floor/plasteel/red, /area/crew_quarters/kitchen) "bfR" = ( -/obj/effect/landmark/start{ - name = "Cook" - }, +/obj/effect/landmark/start/cook, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -30490,7 +30321,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/cable/white{ icon_state = "0-8" }, @@ -30734,9 +30565,7 @@ /area/security/main) "bgD" = ( /obj/structure/chair/office/dark, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel/red/side, /area/security/main) "bgE" = ( @@ -31010,9 +30839,7 @@ /turf/open/floor/plating, /area/maintenance/fpmaint2/fore_port_maintenance) "bhl" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/fpmaint2/fore_port_maintenance) "bhm" = ( @@ -31336,9 +31163,7 @@ /obj/structure/chair{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/brown, /area/hallway/primary/fore) "bhW" = ( @@ -31618,9 +31443,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel/red/side{ dir = 4 }, @@ -32054,7 +31877,7 @@ /area/space) "bjo" = ( /obj/structure/rack, -/obj/effect/landmark/costume, +/obj/effect/spawner/lootdrop/costume, /obj/effect/spawner/lootdrop/maintenance{ lootcount = 2; name = "2maintenance loot spawner" @@ -32080,9 +31903,7 @@ /turf/open/floor/plasteel, /area/hydroponics) "bjr" = ( -/obj/effect/landmark/start{ - name = "Botanist" - }, +/obj/effect/landmark/start/botanist, /turf/open/floor/plasteel/neutral, /area/hydroponics) "bjs" = ( @@ -32212,7 +32033,7 @@ dir = 4; icon_state = "direction_supply"; name = "supply department" - }, + }, /obj/structure/sign/directions/medical{ pixel_y = -8 }, @@ -32393,9 +32214,7 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -33120,9 +32939,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/neutral, /area/security/brig) "blt" = ( @@ -33261,9 +33078,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/landmark/start{ - name = "Head of Security" - }, +/obj/effect/landmark/start/head_of_security, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -33316,9 +33131,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/landmark/start{ - name = "Head of Security" - }, +/obj/effect/landmark/start/head_of_security, /turf/open/floor/plasteel/grimy, /area/security/hos) "blL" = ( @@ -33547,9 +33360,7 @@ icon_state = "intact"; dir = 1 }, -/obj/effect/landmark/start{ - name = "Atmospheric Technician" - }, +/obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/plasteel/neutral, /area/atmos) "bmi" = ( @@ -33793,9 +33604,7 @@ /obj/structure/chair/office/dark{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Botanist" - }, +/obj/effect/landmark/start/botanist, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/hydroponics) @@ -33940,9 +33749,7 @@ }, /area/hallway/primary/central) "bmS" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/structure/cable/white{ icon_state = "4-8" }, @@ -34206,9 +34013,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -34276,9 +34081,7 @@ }, /area/security/main) "bnz" = ( -/obj/effect/landmark{ - name = "secequipment" - }, +/obj/effect/landmark/secequipment, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -34935,9 +34738,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/landmark{ - name = "Observer-Start" - }, +/obj/effect/landmark/observer_start, /turf/open/floor/plasteel{ icon_state = "L8" }, @@ -35296,9 +35097,7 @@ /obj/structure/cable/white{ icon_state = "1-8" }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -35377,9 +35176,7 @@ }, /area/security/main) "bpz" = ( -/obj/effect/landmark{ - name = "secequipment" - }, +/obj/effect/landmark/secequipment, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -35567,9 +35364,7 @@ /obj/machinery/atmospherics/pipe/manifold/yellow/visible{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Atmospheric Technician" - }, +/obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/plasteel/neutral, /area/atmos) "bpU" = ( @@ -36045,9 +35840,7 @@ /obj/structure/chair/office/dark{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel/red/side{ dir = 1 }, @@ -36075,9 +35868,7 @@ }, /area/security/main) "bqV" = ( -/obj/effect/landmark{ - name = "secequipment" - }, +/obj/effect/landmark/secequipment, /obj/machinery/light/small{ dir = 4 }, @@ -36743,9 +36534,7 @@ /obj/item/weapon/storage/pod{ pixel_x = 32 }, -/obj/effect/landmark{ - name = "secequipment" - }, +/obj/effect/landmark/secequipment, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -38439,10 +38228,13 @@ /turf/closed/wall/r_wall, /area/engine/break_room) "bvt" = ( -/obj/machinery/computer/atmos_control, /obj/machinery/status_display{ pixel_x = -32 }, +/obj/structure/cable/white{ + icon_state = "0-4" + }, +/obj/machinery/modular_computer/console/preset/engineering, /turf/open/floor/plasteel/caution{ dir = 8 }, @@ -38458,10 +38250,11 @@ icon_state = "1-4" }, /obj/machinery/holopad, -/obj/effect/landmark/start{ - name = "Atmospheric Technician" - }, +/obj/effect/landmark/start/atmospheric_technician, /obj/effect/turf_decal/bot, +/obj/structure/cable/white{ + icon_state = "1-8" + }, /turf/open/floor/plasteel, /area/atmos) "bvw" = ( @@ -39242,7 +39035,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/sign/electricshock{ @@ -39309,7 +39102,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -39437,9 +39230,18 @@ /obj/machinery/button/door{ id = "atmoslock"; name = "Atmospherics Lockdown Control"; - pixel_x = -26; + pixel_x = -38; req_access_txt = "24" }, +/obj/machinery/computer/security/telescreen{ + desc = "Used for watching the Engine."; + dir = 4; + layer = 4; + name = "Engine Monitor"; + network = list("Engine"); + pixel_x = -24; + pixel_y = 0 + }, /turf/open/floor/plasteel/caution{ dir = 8 }, @@ -39675,7 +39477,7 @@ name = "WARNING: BLAST DOORS"; pixel_x = 0; pixel_y = 32 - }, + }, /turf/open/floor/plasteel/darkblue/side{ icon_state = "darkblue"; dir = 1 @@ -40149,7 +39951,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating, @@ -40169,7 +39971,7 @@ d1 = 1; d2 = 4; icon_state = "1-4" - }, + }, /turf/open/floor/plasteel/neutral, /area/engine/gravity_generator) "byB" = ( @@ -40745,9 +40547,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -41263,9 +41063,7 @@ pixel_x = 4; req_access_txt = "16" }, -/obj/effect/landmark{ - name = "tripai" - }, +/obj/effect/landmark/tripai, /turf/open/floor/circuit/green, /area/ai_monitored/turret_protected/ai) "bAd" = ( @@ -41380,9 +41178,7 @@ pixel_x = -3; req_access_txt = "16" }, -/obj/effect/landmark{ - name = "tripai" - }, +/obj/effect/landmark/tripai, /turf/open/floor/circuit/green, /area/ai_monitored/turret_protected/ai) "bAk" = ( @@ -41744,6 +41540,7 @@ pixel_y = -3 }, /obj/effect/turf_decal/bot, +/obj/item/weapon/circuitboard/machine/autolathe, /turf/open/floor/plasteel, /area/storage/tech) "bAQ" = ( @@ -41900,7 +41697,7 @@ icon_state = "pipe-j1s"; name = "HoP Junction"; sortType = 15 - }, + }, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -42291,9 +42088,7 @@ pixel_y = -23; req_access_txt = "16" }, -/obj/effect/landmark/start{ - name = "AI" - }, +/obj/effect/landmark/start/ai, /turf/open/floor/circuit/green, /area/ai_monitored/turret_protected/ai) "bBO" = ( @@ -42469,7 +42264,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = 0 - }, + }, /obj/machinery/airalarm{ dir = 1; icon_state = "alarm0"; @@ -42560,7 +42355,7 @@ dir = 1; icon_state = "yellow"; initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, + }, /area/engine/break_room) "bCn" = ( /obj/item/weapon/twohanded/required/kirbyplants{ @@ -42571,7 +42366,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = 0 - }, + }, /obj/machinery/light_switch{ pixel_y = 26 }, @@ -43164,9 +42959,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; on = 1 @@ -43311,7 +43104,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = 0 - }, + }, /obj/machinery/light_switch{ pixel_y = -26 }, @@ -43357,7 +43150,7 @@ desc = "A handy sign praising the engineering department."; icon_state = "safety"; name = "engineering plaque" - }, + }, /turf/closed/wall, /area/engine/break_room) "bDO" = ( @@ -43468,9 +43261,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/neutral, /area/engine/break_room) "bEb" = ( @@ -43593,6 +43384,7 @@ dir = 4 }, /obj/effect/turf_decal/bot, +/obj/item/weapon/circuitboard/machine/autolathe, /turf/open/floor/plasteel, /area/storage/tech) "bEl" = ( @@ -43641,9 +43433,7 @@ /turf/open/floor/plasteel, /area/storage/primary) "bEo" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/neutral, /area/storage/primary) "bEp" = ( @@ -43661,9 +43451,7 @@ /turf/open/floor/plasteel, /area/storage/primary) "bEr" = ( -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -43716,7 +43504,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = 0 - }, + }, /turf/open/floor/plasteel/neutral/corner, /area/hallway/primary/central) "bEx" = ( @@ -43953,7 +43741,7 @@ /turf/open/floor/plasteel/neutral/side{ dir = 5; initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, + }, /area/maintenance/starboard) "bEX" = ( /obj/structure/closet/secure_closet/detective, @@ -44713,7 +44501,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/machinery/power/apc{ cell_type = 10000; dir = 1; @@ -45330,7 +45118,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = 0 - }, + }, /obj/machinery/button/door{ id = "transitlock"; name = "Transit Tube Lockdown Control"; @@ -45697,7 +45485,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/poddoor/preopen{ @@ -45852,7 +45640,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ icon_state = "intact"; dir = 5 @@ -45984,9 +45772,7 @@ icon_state = "comfychair"; dir = 4 }, -/obj/effect/landmark/start{ - name = "Captain" - }, +/obj/effect/landmark/start/captain, /turf/open/floor/plasteel/grimy, /area/crew_quarters/captain) "bID" = ( @@ -46023,7 +45809,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/effect/decal/cleanable/dirt, /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, @@ -46817,7 +46603,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/cable/white{ icon_state = "0-4" }, @@ -47218,9 +47004,7 @@ /obj/structure/chair/office/dark{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Detective" - }, +/obj/effect/landmark/start/detective, /obj/structure/disposalpipe/segment, /turf/open/floor/carpet, /area/security/detectives_office) @@ -47246,18 +47030,14 @@ /area/security/detectives_office) "bKZ" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start{ - name = "Detective" - }, +/obj/effect/landmark/start/detective, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/vault{ dir = 5 }, /area/security/detectives_office) "bLa" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/neutral, /area/hallway/primary/starboard) "bLb" = ( @@ -47324,9 +47104,7 @@ /obj/structure/chair/office/dark{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Warden" - }, +/obj/effect/landmark/start/warden, /turf/open/floor/plasteel/red/side{ dir = 8 }, @@ -47590,9 +47368,7 @@ /obj/structure/chair/office/light{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Chief Engineer" - }, +/obj/effect/landmark/start/chief_engineer, /turf/open/floor/plasteel/neutral, /area/crew_quarters/chief) "bLG" = ( @@ -48116,7 +47892,9 @@ /area/storage/tools) "bMM" = ( /obj/structure/table, -/obj/item/stack/sheet/metal, +/obj/item/stack/sheet/metal{ + amount = 50 + }, /obj/item/stack/rods{ amount = 50 }, @@ -48151,9 +47929,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -48875,7 +48651,7 @@ icon_state = "direction_bridge"; name = "command department"; pixel_y = -8 - }, + }, /turf/closed/wall, /area/storage/primary) "bOj" = ( @@ -49125,14 +48901,14 @@ icon_state = "direction_bridge"; name = "command department"; pixel_y = 0 - }, + }, /obj/structure/sign/directions/engineering{ desc = "A direction sign, pointing out which way the Supply department is."; dir = 1; icon_state = "direction_supply"; name = "supply department"; pixel_y = 8 - }, + }, /turf/closed/wall, /area/storage/tools) "bOG" = ( @@ -49403,7 +49179,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = 0 - }, + }, /obj/machinery/light/small{ dir = 4 }, @@ -49885,9 +49661,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/landmark/start{ - name = "Chief Engineer" - }, +/obj/effect/landmark/start/chief_engineer, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ icon_state = "intact"; dir = 8 @@ -50339,9 +50113,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark/start{ - name = "Captain" - }, +/obj/effect/landmark/start/captain, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /turf/open/floor/carpet, @@ -50655,7 +50427,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating, @@ -50777,9 +50549,7 @@ icon_state = "4-8" }, /obj/machinery/holopad, -/obj/effect/landmark/start{ - name = "Cyborg" - }, +/obj/effect/landmark/start/cyborg, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -51168,6 +50938,15 @@ icon_state = "tube1"; dir = 8 }, +/obj/machinery/computer/security/telescreen{ + desc = "Used for watching the Engine."; + dir = 4; + layer = 4; + name = "Engine Monitor"; + network = list("Engine"); + pixel_x = -30; + pixel_y = 0 + }, /mob/living/simple_animal/parrot/Poly, /turf/open/floor/plasteel/vault{ dir = 5 @@ -51634,9 +51413,7 @@ icon_state = "tube1"; dir = 8 }, -/obj/effect/landmark/start{ - name = "Captain" - }, +/obj/effect/landmark/start/captain, /turf/open/floor/plasteel/white, /area/crew_quarters/captain/captains_quarters) "bSP" = ( @@ -51676,9 +51453,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/structure/cable/white{ icon_state = "1-4" }, @@ -51836,7 +51611,7 @@ icon_state = "pipe-j1s"; name = "Security Junction"; sortType = 7 - }, + }, /turf/open/floor/plasteel/red/corner, /area/hallway/primary/starboard) "bTh" = ( @@ -51940,7 +51715,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -52154,7 +51929,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = 0 - }, + }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -52727,9 +52502,7 @@ /obj/structure/chair/office/dark{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Head of Personnel" - }, +/obj/effect/landmark/start/head_of_personnel, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -53162,9 +52935,7 @@ pixel_y = -36; req_access_txt = "63" }, -/obj/effect/landmark/start{ - name = "Warden" - }, +/obj/effect/landmark/start/warden, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; on = 1 @@ -53345,7 +53116,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = 0 - }, + }, /obj/machinery/porta_turret/ai, /turf/open/floor/plasteel/vault{ dir = 8 @@ -53893,7 +53664,7 @@ name = "WARNING: BLAST DOORS"; pixel_x = 0; pixel_y = -32 - }, + }, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -54455,9 +54226,7 @@ /turf/open/floor/plasteel/neutral, /area/hallway/primary/central) "bXZ" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/blue/corner, /area/hallway/primary/central) @@ -54814,7 +54583,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = 0 - }, + }, /turf/open/floor/wood, /area/lawoffice) "bYN" = ( @@ -55269,9 +55038,7 @@ /obj/structure/chair/office/dark{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Librarian" - }, +/obj/effect/landmark/start/librarian, /turf/open/floor/plasteel/black, /area/library) "bZI" = ( @@ -55580,9 +55347,7 @@ /obj/structure/cable/white{ icon_state = "1-4" }, -/obj/effect/landmark/start{ - name = "Captain" - }, +/obj/effect/landmark/start/captain, /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -55651,9 +55416,7 @@ /obj/machinery/newscaster{ pixel_x = 32 }, -/obj/effect/landmark/start{ - name = "Captain" - }, +/obj/effect/landmark/start/captain, /turf/open/floor/carpet, /area/crew_quarters/captain/captains_quarters) "cap" = ( @@ -55795,9 +55558,7 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/obj/effect/landmark/start{ - name = "Lawyer" - }, +/obj/effect/landmark/start/lawyer, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ icon_state = "manifold"; dir = 4 @@ -55826,9 +55587,7 @@ /obj/structure/chair/office/dark{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; on = 1 @@ -55902,9 +55661,7 @@ /obj/structure/cable/white{ icon_state = "2-4" }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -56117,7 +55874,7 @@ dir = 8; icon_state = "camera"; network = list("Singularity") - }, + }, /turf/open/floor/plating/airless, /area/engine/engineering) "cbf" = ( @@ -56263,9 +56020,7 @@ /area/engine/engineering) "cbq" = ( /obj/structure/chair/office/dark, -/obj/effect/landmark/start{ - name = "Station Engineer" - }, +/obj/effect/landmark/start/station_engineer, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -56621,9 +56376,7 @@ /obj/structure/chair{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -56902,9 +56655,7 @@ pixel_x = -32; pixel_y = -64 }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -56917,9 +56668,7 @@ /obj/structure/cable/white{ icon_state = "1-4" }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -56931,9 +56680,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel/neutral, /area/security/brig) "ccC" = ( @@ -56948,9 +56695,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -57187,7 +56932,7 @@ dir = 1; icon_state = "yellow"; initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, + }, /area/engine/engineering) "ccX" = ( /turf/open/floor/plasteel/yellow/side{ @@ -57224,7 +56969,7 @@ /turf/open/floor/plasteel/yellow/side{ dir = 9; initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, + }, /area/engine/engineering) "cdc" = ( /obj/machinery/vending/engivend, @@ -57244,9 +56989,6 @@ /turf/open/floor/plating, /area/engine/engineering) "cde" = ( -/obj/machinery/computer/monitor{ - name = "Engineering Power Monitoring Console" - }, /obj/machinery/firealarm{ dir = 8; pixel_x = -24; @@ -57263,6 +57005,7 @@ dir = 1; name = "engineering camera" }, +/obj/machinery/modular_computer/console/preset/engineering, /turf/open/floor/plasteel/vault, /area/engine/engineering) "cdf" = ( @@ -57297,9 +57040,7 @@ }, /area/maintenance/fpmaint2/port_maintenance) "cdk" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plasteel/neutral/side{ dir = 8 }, @@ -57341,9 +57082,7 @@ /area/library) "cdq" = ( /obj/structure/chair/comfy/brown, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/wood, /area/library) "cdr" = ( @@ -57407,9 +57146,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/landmark/start{ - name = "Head of Personnel" - }, +/obj/effect/landmark/start/head_of_personnel, /turf/open/floor/wood, /area/crew_quarters/heads) "cdz" = ( @@ -57505,7 +57242,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = 0 - }, + }, /turf/open/floor/plasteel/neutral/corner, /area/hallway/primary/central) "cdK" = ( @@ -57600,9 +57337,7 @@ pixel_x = -26; pixel_y = 3 }, -/obj/effect/landmark/start{ - name = "Lawyer" - }, +/obj/effect/landmark/start/lawyer, /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1; @@ -57907,7 +57642,7 @@ dir = 4; icon_state = "camera"; network = list("Singularity") - }, + }, /turf/open/space, /area/space) "cey" = ( @@ -57993,9 +57728,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "ceG" = ( -/obj/effect/landmark/start{ - name = "Station Engineer" - }, +/obj/effect/landmark/start/station_engineer, /turf/open/floor/plasteel/neutral, /area/engine/engineering) "ceH" = ( @@ -58024,9 +57757,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "ceJ" = ( -/obj/effect/landmark/start{ - name = "Station Engineer" - }, +/obj/effect/landmark/start/station_engineer, /turf/open/floor/plasteel/yellow/side{ dir = 4 }, @@ -58332,9 +58063,7 @@ }, /area/crew_quarters/courtroom) "cfv" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -58356,9 +58085,7 @@ /area/crew_quarters/courtroom) "cfy" = ( /obj/machinery/holopad, -/obj/effect/landmark/start{ - name = "Lawyer" - }, +/obj/effect/landmark/start/lawyer, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/crew_quarters/courtroom) @@ -58615,7 +58342,7 @@ d1 = 1; d2 = 4; icon_state = "1-4" - }, + }, /obj/structure/cable{ d1 = 2; d2 = 4; @@ -58688,9 +58415,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/landmark/start{ - name = "Station Engineer" - }, +/obj/effect/landmark/start/station_engineer, /turf/open/floor/plasteel/neutral, /area/engine/engineering) "cgg" = ( @@ -58748,9 +58473,7 @@ /obj/structure/chair/office/dark{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/wood, /area/library) "cgn" = ( @@ -58774,9 +58497,7 @@ /turf/open/floor/plasteel/grimy, /area/library) "cgq" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -59343,10 +59064,7 @@ dir = 4; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/maintenance/fpmaint2/port_maintenance) @@ -59732,9 +59450,7 @@ /obj/structure/chair{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ icon_state = "manifold"; dir = 4 @@ -59794,9 +59510,7 @@ /obj/structure/cable/white{ icon_state = "2-4" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -59878,9 +59592,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -60042,9 +59754,7 @@ icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/security/range) "ciO" = ( @@ -60186,7 +59896,7 @@ d1 = 1; d2 = 4; icon_state = "1-4" - }, + }, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -60355,7 +60065,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = 0 - }, + }, /turf/open/floor/plasteel/grimy, /area/library) "cjt" = ( @@ -60371,9 +60081,7 @@ pixel_x = 26; pixel_y = 26 }, -/obj/effect/landmark/start{ - name = "Head of Personnel" - }, +/obj/effect/landmark/start/head_of_personnel, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -60478,10 +60186,7 @@ dir = 8; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -61113,9 +60818,7 @@ /obj/structure/chair/office/dark{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Librarian" - }, +/obj/effect/landmark/start/librarian, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ icon_state = "intact"; dir = 10 @@ -61553,7 +61256,7 @@ d1 = 1; d2 = 4; icon_state = "1-4" - }, + }, /turf/open/floor/plating, /area/engine/engineering) "clR" = ( @@ -62052,7 +61755,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating, @@ -62139,7 +61842,7 @@ d1 = 1; d2 = 4; icon_state = "1-4" - }, + }, /obj/structure/cable{ d1 = 2; d2 = 4; @@ -62211,9 +61914,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "cno" = ( -/obj/effect/landmark/start{ - name = "Station Engineer" - }, +/obj/effect/landmark/start/station_engineer, /turf/open/floor/plasteel/yellow, /area/engine/engineering) "cnp" = ( @@ -62311,10 +62012,7 @@ /area/maintenance/fpmaint2/port_maintenance) "cny" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -62421,7 +62119,7 @@ icon_state = "nboard00"; pixel_x = 32; pixel_y = 0 - }, + }, /turf/open/floor/plasteel/grimy, /area/library) "cnJ" = ( @@ -62537,7 +62235,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /turf/open/floor/plasteel/neutral/corner{ dir = 1 }, @@ -63474,9 +63172,7 @@ icon_state = "4-8" }, /obj/structure/chair/comfy/black, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -63642,7 +63338,7 @@ name = "WARNING: PRESSURIZED DOORS"; pixel_x = 0; pixel_y = 0 - }, + }, /turf/closed/wall, /area/crew_quarters/courtroom) "cpO" = ( @@ -63825,7 +63521,7 @@ d1 = 1; d2 = 4; icon_state = "1-4" - }, + }, /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -64045,7 +63741,7 @@ icon_state = "direction_bridge"; name = "command department"; pixel_y = 0 - }, + }, /turf/closed/wall/r_wall, /area/ai_monitored/storage/eva{ name = "E.V.A. Storage" @@ -64140,9 +63836,7 @@ icon_state = "1-2" }, /obj/machinery/holopad, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/bridge/meeting_room{ @@ -64231,7 +63925,7 @@ icon_state = "direction_bridge"; name = "command department"; pixel_y = 0 - }, + }, /turf/closed/wall/r_wall, /area/gateway) "cqZ" = ( @@ -64405,9 +64099,7 @@ /area/crew_quarters/locker) "crn" = ( /obj/structure/chair/stool, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -64811,7 +64503,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/cable/white{ icon_state = "0-4" }, @@ -64852,9 +64544,7 @@ /obj/structure/chair/comfy/black{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/blue/corner, /area/bridge/meeting_room{ name = "\improper Command Hallway" @@ -64906,7 +64596,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/cable/white{ icon_state = "0-8" }, @@ -65023,9 +64713,7 @@ /turf/open/floor/plasteel/neutral, /area/hallway/primary/central) "csx" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/neutral, /area/hallway/primary/central) "csy" = ( @@ -65504,9 +65192,7 @@ }, /area/library) "ctx" = ( -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1; @@ -65516,9 +65202,7 @@ /area/library) "cty" = ( /obj/structure/chair/comfy/black, -/obj/effect/landmark/start{ - name = "Librarian" - }, +/obj/effect/landmark/start/librarian, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ icon_state = "intact"; dir = 5 @@ -65990,9 +65674,7 @@ /turf/open/floor/plasteel/neutral, /area/crew_quarters/locker) "cup" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ icon_state = "manifold"; dir = 1 @@ -66207,7 +65889,7 @@ d1 = 1; d2 = 4; icon_state = "1-4" - }, + }, /obj/structure/cable{ d1 = 2; d2 = 4; @@ -66237,7 +65919,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating, @@ -66264,7 +65946,7 @@ dir = 1; icon_state = "yellow"; initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, + }, /area/engine/engineering{ name = "Engineering Storage" }) @@ -66280,7 +65962,7 @@ dir = 1; icon_state = "yellow"; initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, + }, /area/engine/engineering{ name = "Engineering Storage" }) @@ -66378,9 +66060,7 @@ /turf/open/floor/plasteel/grimy, /area/library) "cva" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -66459,7 +66139,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = 0 - }, + }, /turf/open/floor/plasteel/neutral/corner{ dir = 4 }, @@ -66872,7 +66552,7 @@ dir = 4; icon_state = "camera"; network = list("Singularity") - }, + }, /turf/open/space, /area/space) "cvZ" = ( @@ -66881,7 +66561,7 @@ d1 = 1; d2 = 4; icon_state = "1-4" - }, + }, /turf/open/space, /area/space) "cwa" = ( @@ -66890,7 +66570,7 @@ d1 = 1; d2 = 4; icon_state = "1-4" - }, + }, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -66923,9 +66603,7 @@ /area/engine/engineering) "cwd" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start{ - name = "Station Engineer" - }, +/obj/effect/landmark/start/station_engineer, /turf/open/floor/plasteel/neutral, /area/engine/engineering) "cwe" = ( @@ -66961,7 +66639,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -67669,9 +67347,7 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -67991,9 +67667,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plasteel/neutral/corner{ dir = 1 }, @@ -68489,9 +68163,7 @@ name = "\improper Restrooms" }) "cyG" = ( -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/neutral, /area/crew_quarters/locker/locker_toilet{ name = "\improper Restrooms" @@ -68677,9 +68349,7 @@ /obj/structure/chair{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral/corner{ dir = 4 @@ -68747,7 +68417,7 @@ dir = 8; icon_state = "camera"; network = list("Singularity") - }, + }, /turf/open/floor/plating/airless, /area/engine/engineering) "czm" = ( @@ -68780,9 +68450,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "czp" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ icon_state = "intact"; dir = 8 @@ -68809,7 +68477,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -68899,10 +68567,7 @@ "czy" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -68910,9 +68575,7 @@ /turf/open/floor/plasteel/yellow, /area/maintenance/fpmaint2/port_maintenance) "czz" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69070,9 +68733,7 @@ /area/maintenance/fpmaint2/port_maintenance) "czN" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plasteel/neutral, /area/maintenance/fpmaint2/port_maintenance) "czO" = ( @@ -70241,9 +69902,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/neutral, /area/hallway/primary/central) "cBS" = ( @@ -70610,7 +70269,7 @@ dir = 1; icon_state = "nboard00"; pixel_y = -32 - }, + }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/engine/engineering{ @@ -70753,7 +70412,7 @@ name = "WARNING: PRESSURIZED DOORS"; pixel_x = 0; pixel_y = 0 - }, + }, /turf/closed/wall/r_wall, /area/ai_monitored/storage/eva{ name = "E.V.A. Storage" @@ -70892,7 +70551,7 @@ name = "WARNING: BLAST DOORS"; pixel_x = 0; pixel_y = 0 - }, + }, /turf/closed/wall/r_wall, /area/gateway) "cDe" = ( @@ -70975,9 +70634,7 @@ pixel_x = -32 }, /obj/machinery/light/small, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/crew_quarters/locker/locker_toilet{ @@ -71164,9 +70821,7 @@ /turf/closed/wall, /area/maintenance/fpmaint2/port_maintenance) "cDG" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/structure/cable/white{ icon_state = "1-2" }, @@ -72164,9 +71819,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -72413,7 +72066,7 @@ icon_state = "pipe-j1s"; name = "Medbay Junction"; sortType = 9 - }, + }, /turf/open/floor/plasteel/neutral/corner, /area/hallway/primary/central) "cFJ" = ( @@ -72575,9 +72228,7 @@ /area/maintenance/starboard/aft_starboard_maintenance) "cFU" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -72659,9 +72310,7 @@ /turf/open/floor/plasteel/neutral, /area/crew_quarters/sleep) "cGf" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/neutral, /area/crew_quarters/sleep) "cGg" = ( @@ -72732,9 +72381,7 @@ /obj/structure/chair/office/light{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/neutral, /area/crew_quarters/fitness{ name = "\improper Recreation Area" @@ -73148,9 +72795,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -73393,9 +73038,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, /obj/structure/disposalpipe/junction{ dir = 1; @@ -74328,9 +73971,7 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ icon_state = "manifold"; dir = 8 @@ -74452,9 +74093,7 @@ }) "cJT" = ( /obj/structure/chair, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/whitepurple/corner{ icon_state = "whitepurplecorner"; dir = 1 @@ -74529,9 +74168,7 @@ }) "cKa" = ( /obj/structure/chair, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/whitepurple/corner{ dir = 4 }, @@ -74581,9 +74218,7 @@ }) "cKh" = ( /obj/structure/chair, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/whiteblue/corner{ dir = 1 }, @@ -74644,9 +74279,7 @@ }) "cKn" = ( /obj/structure/chair, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/whiteblue/corner{ dir = 4 }, @@ -76113,7 +75746,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating, @@ -76196,9 +75829,7 @@ name = "Research Division" }) "cNl" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -76438,7 +76069,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = 0 - }, + }, /obj/machinery/light_switch{ pixel_x = 38 }, @@ -76529,9 +76160,7 @@ name = "Medbay Storage" }) "cNM" = ( -/obj/effect/landmark/start{ - name = "Medical Doctor" - }, +/obj/effect/landmark/start/medical_doctor, /turf/open/floor/plasteel/cmo, /area/medical/medbay2{ name = "Medbay Storage" @@ -76808,7 +76437,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/poddoor/preopen{ @@ -76939,7 +76568,7 @@ icon_state = "doors"; name = "WARNING: BIOHAZARD CELL"; pixel_x = 0 - }, + }, /turf/closed/wall, /area/toxins/xenobiology) "cOG" = ( @@ -77117,7 +76746,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/cable/white{ icon_state = "0-8" }, @@ -77236,9 +76865,7 @@ }, /area/hallway/primary/aft) "cPh" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -77254,7 +76881,7 @@ icon_state = "pipe-j1s"; name = "Chemistry Junction"; sortType = 11 - }, + }, /turf/open/floor/plasteel/blue/corner, /area/hallway/primary/aft) "cPj" = ( @@ -77337,9 +76964,7 @@ name = "Medbay Central" }) "cPq" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -77560,10 +77185,7 @@ dir = 4; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating{ icon_state = "panelscorched" }, @@ -77726,9 +77348,7 @@ /obj/structure/chair{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/light{ dir = 4 @@ -77937,7 +77557,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/poddoor/preopen{ @@ -78612,9 +78232,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/neutral/side{ dir = 8 @@ -78743,9 +78361,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/effect/turf_decal/stripes/line{ dir = 2 }, @@ -78799,9 +78415,7 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /turf/open/floor/plasteel/neutral, /area/toxins/xenobiology) "cRX" = ( @@ -79312,9 +78926,7 @@ /area/maintenance/starboard/aft_starboard_maintenance) "cSV" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -79547,7 +79159,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/poddoor/preopen{ @@ -80602,9 +80214,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral, /area/toxins/xenobiology) @@ -80622,7 +80232,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/cable/white{ icon_state = "0-4" }, @@ -80893,9 +80503,7 @@ /obj/structure/chair/office/light{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Chemist" - }, +/obj/effect/landmark/start/chemist, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/medical/chemistry) @@ -81035,9 +80643,7 @@ name = "Medbay Central" }) "cWf" = ( -/obj/effect/landmark/start{ - name = "Medical Doctor" - }, +/obj/effect/landmark/start/medical_doctor, /turf/open/floor/plasteel/blue, /area/medical/medbay{ name = "Medbay Central" @@ -81072,9 +80678,7 @@ }) "cWj" = ( /obj/machinery/holopad, -/obj/effect/landmark/start{ - name = "Medical Doctor" - }, +/obj/effect/landmark/start/medical_doctor, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ icon_state = "intact"; dir = 6 @@ -81251,9 +80855,7 @@ }, /area/maintenance/fpmaint2/port_maintenance) "cWC" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ icon_state = "intact"; dir = 8 @@ -81769,9 +81371,7 @@ /turf/open/floor/plasteel/neutral, /area/toxins/lab) "cXt" = ( -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /turf/open/floor/plasteel/neutral, /area/toxins/lab) "cXu" = ( @@ -81903,9 +81503,7 @@ }) "cXJ" = ( /obj/machinery/holopad, -/obj/effect/landmark/start{ - name = "Medical Doctor" - }, +/obj/effect/landmark/start/medical_doctor, /turf/open/floor/plasteel/neutral, /area/medical/medbay{ name = "Medbay Central" @@ -81953,7 +81551,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/cable/white{ icon_state = "0-4" }, @@ -82089,7 +81687,7 @@ /obj/structure/mirror{ icon_state = "mirror_broke"; pixel_y = 28 - }, + }, /turf/open/floor/plasteel/whiteblue/corner{ dir = 1 }, @@ -82139,7 +81737,7 @@ /obj/structure/mirror{ icon_state = "mirror_broke"; pixel_y = 28 - }, + }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/whiteblue/corner{ dir = 4 @@ -82539,7 +82137,7 @@ /turf/open/floor/plasteel/whitepurple/side{ dir = 5; initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, + }, /area/toxins/lab) "cYV" = ( /obj/machinery/computer/rdconsole/core, @@ -83134,7 +82732,7 @@ departmentType = 0; name = "Research RC"; pixel_x = 32; - pixel_y = 0 + pixel_y = 0; receive_ore_updates = 1 }, /obj/machinery/camera{ @@ -83182,9 +82780,7 @@ /obj/machinery/holopad{ pixel_x = -16 }, -/obj/effect/landmark/start{ - name = "Chemist" - }, +/obj/effect/landmark/start/chemist, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/whiteyellow/side{ dir = 4 @@ -83205,7 +82801,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = 0 - }, + }, /obj/machinery/light{ dir = 4; icon_state = "tube1" @@ -83428,10 +83024,7 @@ dir = 8; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/medical/medbay3{ name = "Abandoned Medbay" @@ -83921,7 +83514,7 @@ /turf/open/floor/plasteel/whitepurple/side{ dir = 6; initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, + }, /area/toxins/lab) "dbD" = ( /obj/effect/decal/cleanable/dirt, @@ -84575,9 +84168,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 2; on = 1; @@ -84643,9 +84234,7 @@ /obj/structure/chair/office/light{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Chemist" - }, +/obj/effect/landmark/start/chemist, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/medical/chemistry) @@ -84737,9 +84326,7 @@ icon_state = "4-8" }, /obj/item/device/radio/beacon, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/whiteblue, /area/medical/medbay{ @@ -85061,10 +84648,7 @@ dir = 1; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/crew_quarters/abandoned_gambling_den) "ddV" = ( @@ -85241,7 +84825,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/machinery/power/apc{ cell_type = 5000; dir = 1; @@ -85948,10 +85532,7 @@ "dfB" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; on = 1 @@ -85965,9 +85546,7 @@ /obj/structure/chair/office/dark{ dir = 4 }, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/wood, /area/maintenance/starboard/aft_starboard_maintenance) "dfD" = ( @@ -86304,7 +85883,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/poddoor/preopen{ @@ -86348,7 +85927,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/cable/white{ icon_state = "0-8" }, @@ -86427,7 +86006,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = 0 - }, + }, /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 2 @@ -86743,7 +86322,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = 0 - }, + }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/toxins/explab) @@ -86946,7 +86525,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/poddoor/preopen{ @@ -87441,10 +87020,7 @@ "diD" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; on = 1 @@ -87552,10 +87128,7 @@ dir = 2; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plasteel/neutral, /area/medical/research{ name = "Abandoned Research Lab" @@ -87711,9 +87284,7 @@ /area/toxins/explab) "dje" = ( /obj/structure/chair/office/light, -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/structure/disposalpipe/segment{ dir = 4 @@ -87805,9 +87376,7 @@ }) "djl" = ( /obj/machinery/holopad, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -87901,7 +87470,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/poddoor/preopen{ @@ -87974,7 +87543,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/poddoor/preopen{ @@ -88043,9 +87612,7 @@ icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start{ - name = "Cyborg" - }, +/obj/effect/landmark/start/cyborg, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -88281,9 +87848,7 @@ /obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Medical Doctor" - }, +/obj/effect/landmark/start/medical_doctor, /turf/open/floor/plasteel, /area/medical/medbay{ name = "Medbay Central" @@ -88379,9 +87944,7 @@ }, /area/hallway/secondary/construction) "dko" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/starboard/aft_starboard_maintenance) @@ -88452,9 +88015,7 @@ /area/crew_quarters/abandoned_gambling_den) "dky" = ( /obj/effect/decal/cleanable/vomit/old, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -89076,9 +88637,7 @@ /turf/open/floor/plating, /area/hallway/primary/aft) "dlB" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -89261,9 +88820,7 @@ "dlY" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -89566,7 +89123,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = 0 - }, + }, /obj/machinery/camera{ c_tag = "Science - Research Director's Office"; dir = 8; @@ -89633,9 +89190,7 @@ /area/assembly/chargebay) "dmM" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start{ - name = "Roboticist" - }, +/obj/effect/landmark/start/roboticist, /turf/open/floor/plasteel/neutral, /area/assembly/chargebay) "dmN" = ( @@ -89741,7 +89296,7 @@ icon_state = "fire0"; pixel_x = 7; pixel_y = -26 - }, + }, /obj/machinery/light, /obj/machinery/light_switch{ pixel_x = 7; @@ -90399,9 +89954,7 @@ /turf/open/floor/plasteel/blue, /area/medical/surgery) "dot" = ( -/obj/effect/landmark/start{ - name = "Medical Doctor" - }, +/obj/effect/landmark/start/medical_doctor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ icon_state = "intact"; dir = 5 @@ -90715,9 +90268,7 @@ }, /area/toxins/explab) "doZ" = ( -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -90748,10 +90299,7 @@ dir = 8; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -90859,9 +90407,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/landmark/start{ - name = "Research Director" - }, +/obj/effect/landmark/start/research_director, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/whitepurple/corner, /area/crew_quarters/hor) @@ -90944,9 +90490,7 @@ icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start{ - name = "Cyborg" - }, +/obj/effect/landmark/start/cyborg, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -90985,7 +90529,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = -26 - }, + }, /obj/machinery/light_switch{ pixel_x = 26; pixel_y = -38 @@ -91281,9 +90825,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/landmark/start{ - name = "Medical Doctor" - }, +/obj/effect/landmark/start/medical_doctor, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ icon_state = "manifold"; dir = 1 @@ -91540,9 +91082,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral/side{ dir = 4 @@ -91958,9 +91498,7 @@ /obj/structure/chair/office/light{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Geneticist" - }, +/obj/effect/landmark/start/geneticist, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -92188,9 +91726,7 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -92343,10 +91879,7 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft_starboard_maintenance) "drX" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; on = 1 @@ -92491,9 +92024,7 @@ name = "\improper Toxins Lab" }) "dsp" = ( -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/neutral, /area/toxins/mixing{ @@ -92803,9 +92334,7 @@ icon_state = "1-8" }, /obj/machinery/holopad, -/obj/effect/landmark/start{ - name = "Geneticist" - }, +/obj/effect/landmark/start/geneticist, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ icon_state = "intact"; dir = 9 @@ -93163,10 +92692,7 @@ dir = 4; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plasteel/neutral, /area/medical/research{ name = "Abandoned Research Lab" @@ -93581,9 +93107,7 @@ /area/medical/genetics) "dum" = ( /obj/structure/chair/office/light, -/obj/effect/landmark/start{ - name = "Geneticist" - }, +/obj/effect/landmark/start/geneticist, /turf/open/floor/plasteel/whitepurple/side{ dir = 10 }, @@ -93972,9 +93496,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark/start{ - name = "Research Director" - }, +/obj/effect/landmark/start/research_director, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ icon_state = "intact"; dir = 9 @@ -94064,9 +93586,7 @@ icon_state = "officechair_white"; dir = 4 }, -/obj/effect/landmark/start{ - name = "Roboticist" - }, +/obj/effect/landmark/start/roboticist, /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -94117,7 +93637,7 @@ dir = 1; icon_state = "nboard00"; pixel_y = -32 - }, + }, /turf/open/floor/plasteel/whitepurple/corner{ icon_state = "whitepurplecorner"; dir = 8 @@ -94966,9 +94486,7 @@ /obj/structure/chair/office/light{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Chief Medical Officer" - }, +/obj/effect/landmark/start/chief_medical_officer, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/cmo, /area/medical/cmo) @@ -95014,9 +94532,7 @@ name = "Medbay Central" }) "dwX" = ( -/obj/effect/landmark/start{ - name = "Medical Doctor" - }, +/obj/effect/landmark/start/medical_doctor, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -95504,9 +95020,7 @@ /turf/open/floor/plasteel/neutral, /area/assembly/robotics) "dxN" = ( -/obj/effect/landmark/start{ - name = "Roboticist" - }, +/obj/effect/landmark/start/roboticist, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ icon_state = "intact"; dir = 8 @@ -95528,7 +95042,7 @@ icon_state = "nboard00"; pixel_x = 32; pixel_y = 0 - }, + }, /obj/item/weapon/twohanded/required/kirbyplants{ icon_state = "plant-21"; layer = 4.1; @@ -95600,16 +95114,12 @@ /area/medical/morgue) "dxV" = ( /obj/structure/bodycontainer/morgue, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plating, /area/medical/morgue) "dxW" = ( /obj/structure/bodycontainer/morgue, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -95617,9 +95127,7 @@ "dxX" = ( /obj/structure/bodycontainer/morgue, /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -95795,9 +95303,7 @@ name = "Medbay Central" }) "dyp" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral/side{ dir = 8 @@ -95922,9 +95428,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; @@ -96108,9 +95612,7 @@ /turf/open/floor/plasteel, /area/assembly/robotics) "dyV" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -96166,10 +95668,7 @@ dir = 2; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plasteel/neutral, /area/medical/morgue) "dze" = ( @@ -96644,6 +96143,12 @@ icon_state = "0-4" }, /obj/machinery/computer/rdservercontrol, +/obj/machinery/power/apc{ + dir = 8; + name = "Research Division Server Room APC"; + pixel_x = -26; + pixel_y = 0 + }, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -96658,6 +96163,9 @@ /obj/structure/cable/white{ icon_state = "4-8" }, +/obj/structure/cable/white{ + icon_state = "2-4" + }, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -96886,9 +96394,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/landmark/start{ - name = "Medical Doctor" - }, +/obj/effect/landmark/start/medical_doctor, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -96900,9 +96406,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -96928,7 +96432,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = -26 - }, + }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -96968,9 +96472,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ icon_state = "manifold"; dir = 1 @@ -97053,8 +96555,8 @@ }) "dAG" = ( /obj/structure/rack, -/obj/effect/landmark/costume, -/obj/effect/landmark/costume, +/obj/effect/spawner/lootdrop/costume, +/obj/effect/spawner/lootdrop/costume, /obj/item/clothing/neck/tie/black, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral/side{ @@ -97282,10 +96784,7 @@ dir = 2; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plasteel/neutral/side{ dir = 1; heat_capacity = 1e+006 @@ -97430,28 +96929,11 @@ }, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, -/obj/machinery/door/poddoor/preopen{ - id = "rdxeno"; - name = "Xenobiology Containment Door" - }, /turf/open/floor/plating, /area/toxins/server{ name = "\improper Research Division Server Room" }) "dBt" = ( -/obj/structure/cable/white{ - icon_state = "2-4" - }, -/obj/structure/cable/white{ - icon_state = "2-8" - }, -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/machinery/door/poddoor/preopen{ - id = "rdxeno"; - name = "Xenobiology Containment Door" - }, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/general/hidden{ icon_state = "intact"; @@ -97461,6 +96943,12 @@ name = "Server Access"; req_access_txt = "30" }, +/obj/structure/cable/white{ + icon_state = "1-4" + }, +/obj/structure/cable/white{ + icon_state = "1-8" + }, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -97473,10 +96961,6 @@ }, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, -/obj/machinery/door/poddoor/preopen{ - id = "rdxeno"; - name = "Xenobiology Containment Door" - }, /obj/machinery/atmospherics/pipe/simple/general/hidden{ icon_state = "intact"; dir = 9 @@ -97567,9 +97051,7 @@ }, /area/assembly/robotics) "dBC" = ( -/obj/effect/landmark/start{ - name = "Roboticist" - }, +/obj/effect/landmark/start/roboticist, /turf/open/floor/plasteel/whitepurple/corner{ dir = 4 }, @@ -97625,9 +97107,7 @@ /area/medical/morgue) "dBI" = ( /obj/structure/bodycontainer/morgue, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -97743,9 +97223,7 @@ /turf/open/floor/plasteel/neutral, /area/medical/cmo) "dBV" = ( -/obj/effect/landmark/start{ - name = "Chief Medical Officer" - }, +/obj/effect/landmark/start/chief_medical_officer, /turf/open/floor/plasteel/blue, /area/medical/cmo) "dBW" = ( @@ -97770,8 +97248,8 @@ "dBY" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/rack, -/obj/effect/landmark/costume, -/obj/effect/landmark/costume, +/obj/effect/spawner/lootdrop/costume, +/obj/effect/spawner/lootdrop/costume, /obj/effect/spawner/lootdrop/maintenance, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral/side{ @@ -97851,10 +97329,7 @@ /obj/structure/cable/white{ icon_state = "1-8" }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -97933,9 +97408,7 @@ name = "\improper Toxins Lab" }) "dCo" = ( -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -98006,9 +97479,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/item/device/radio/beacon, /obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, /obj/effect/turf_decal/bot, @@ -98413,9 +97884,7 @@ "dDa" = ( /obj/structure/bodycontainer/morgue, /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plating, /area/medical/morgue) "dDb" = ( @@ -98525,7 +97994,7 @@ }) "dDp" = ( /obj/structure/closet/crate, -/obj/effect/landmark/costume, +/obj/effect/spawner/lootdrop/costume, /obj/effect/spawner/lootdrop/maintenance, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, @@ -98648,10 +98117,7 @@ }) "dDz" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; on = 1 @@ -98800,7 +98266,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = 0 - }, + }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -99067,7 +98533,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = 0 - }, + }, /turf/open/floor/plasteel/neutral/corner, /area/hallway/primary/aft) "dEm" = ( @@ -99108,10 +98574,7 @@ name = "Medbay Central" }) "dEp" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -99555,9 +99018,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel/neutral/side{ dir = 1; @@ -99995,10 +99456,7 @@ dir = 2; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plasteel/neutral, /area/medical/research{ name = "Research Division" @@ -100409,9 +99867,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -100651,10 +100107,7 @@ }) "dHm" = ( /obj/structure/lattice/catwalk, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/space, /area/solar/starboard) "dHn" = ( @@ -101148,9 +100601,7 @@ pixel_x = 28 }, /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -101194,9 +100645,7 @@ name = "Research Division" }) "dIr" = ( -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -101315,7 +100764,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = 0 - }, + }, /turf/open/floor/plasteel/blue/side{ dir = 5 }, @@ -101549,9 +100998,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/neutral/side{ dir = 4 @@ -101706,7 +101153,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating, /area/medical/virology) @@ -101877,9 +101324,7 @@ "dJL" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/oil, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plasteel/neutral/side{ dir = 1 }, @@ -102058,9 +101503,7 @@ /obj/structure/chair{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/hallway/primary/aft) @@ -102122,7 +101565,7 @@ /obj/structure/cable/white{ d2 = 2; icon_state = "0-2" - }, + }, /obj/structure/window/reinforced/fulltile, /obj/structure/sign/vacuum, /turf/open/floor/plating, @@ -102633,9 +102076,7 @@ /obj/structure/chair/office/light{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Virologist" - }, +/obj/effect/landmark/start/virologist, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -103281,9 +102722,7 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/obj/effect/landmark/start{ - name = "Virologist" - }, +/obj/effect/landmark/start/virologist, /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1; @@ -103318,10 +102757,7 @@ dir = 4; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/library/abandoned_library) "dMx" = ( @@ -103346,9 +102782,7 @@ /area/library/abandoned_library) "dMA" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/library/abandoned_library) "dMB" = ( @@ -103425,7 +102859,7 @@ /area/maintenance/fpmaint2/aft_port_maintenance) "dMJ" = ( /obj/structure/closet, -/obj/effect/landmark/costume, +/obj/effect/spawner/lootdrop/costume, /obj/effect/spawner/lootdrop/maintenance, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -104143,7 +103577,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = 0 - }, + }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/vault{ dir = 5 @@ -104721,7 +104155,7 @@ /turf/open/floor/plasteel/whiteblue/side{ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; dir = 4 - }, + }, /area/shuttle/escape) "dPE" = ( /obj/structure/table/glass, @@ -104819,9 +104253,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/green, /area/medical/virology) "dPN" = ( @@ -104903,9 +104335,7 @@ "dPV" = ( /obj/effect/decal/remains/human, /obj/effect/decal/cleanable/blood/old, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/black, /area/library/abandoned_library) "dPW" = ( @@ -104942,9 +104372,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark/start{ - name = "Chaplain" - }, +/obj/effect/landmark/start/chaplain, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/vault{ dir = 5 @@ -104973,9 +104401,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ icon_state = "manifold"; dir = 4 @@ -105212,9 +104638,7 @@ }, /area/medical/virology) "dQG" = ( -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/medical/virology) @@ -105266,10 +104690,7 @@ dir = 2; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -105773,9 +105194,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; @@ -105840,7 +105259,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = 0 - }, + }, /obj/machinery/camera{ c_tag = "Chapel - Starboard"; dir = 8; @@ -105882,9 +105301,7 @@ }) "dRX" = ( /obj/structure/chair, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/machinery/camera{ c_tag = "Departures - Center"; dir = 2; @@ -105950,9 +105367,7 @@ /obj/structure/chair/office/light{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Virologist" - }, +/obj/effect/landmark/start/virologist, /turf/open/floor/plasteel/whitegreen/corner{ dir = 8 }, @@ -106407,7 +105822,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = 0 - }, + }, /obj/structure/closet/secure_closet/medical1, /obj/machinery/light_switch{ pixel_x = 26; @@ -106501,9 +105916,7 @@ icon_state = "1-8" }, /obj/machinery/holopad, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -106614,9 +106027,7 @@ name = "\improper Departure Lounge" }) "dTu" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/neutral, /area/hallway/secondary/exit{ name = "\improper Departure Lounge" @@ -106817,9 +106228,7 @@ /area/maintenance/fpmaint2/aft_port_maintenance) "dTN" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -106938,9 +106347,7 @@ /obj/structure/chair{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/hallway/secondary/exit{ @@ -107251,7 +106658,7 @@ desc = "A sign that shows there are doors here. There are doors everywhere!"; icon_state = "doors"; name = "WARNING: EXTERNAL AIRLOCK" - }, + }, /turf/open/floor/plating, /area/hallway/secondary/exit{ name = "\improper Departure Lounge" @@ -107371,7 +106778,7 @@ icon_state = "doors"; name = "WARNING: EXTERNAL AIRLOCK"; pixel_x = 0 - }, + }, /turf/closed/wall/r_wall, /area/maintenance/portsolar) "dUV" = ( @@ -107644,7 +107051,7 @@ d2 = 8; icon_state = "4-8"; pixel_x = 0 - }, + }, /turf/open/space, /area/solar/port) "dVx" = ( @@ -107653,7 +107060,7 @@ d2 = 8; icon_state = "4-8"; pixel_x = 0 - }, + }, /obj/machinery/door/airlock/external{ name = "External Solar Access"; req_access_txt = "10" @@ -107670,7 +107077,7 @@ d2 = 8; icon_state = "4-8"; pixel_x = 0 - }, + }, /obj/structure/fans/tiny, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, @@ -107686,7 +107093,7 @@ d2 = 8; icon_state = "4-8"; pixel_x = 0 - }, + }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -107702,9 +107109,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/portsolar) "dVB" = ( @@ -107718,10 +107123,7 @@ dir = 4; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -107863,9 +107265,7 @@ /turf/open/floor/plasteel/grimy, /area/chapel/main) "dVQ" = ( -/obj/effect/landmark/start{ - name = "Chaplain" - }, +/obj/effect/landmark/start/chaplain, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/grimy, /area/chapel/main) @@ -108180,7 +107580,7 @@ icon_state = "nboard00"; name = "memorial board"; pixel_y = -32 - }, + }, /obj/machinery/holopad, /obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -109540,7 +108940,7 @@ icon_state = "fire0"; pixel_x = 24; pixel_y = 0 - }, + }, /obj/machinery/status_display{ pixel_x = 0; pixel_y = 32 @@ -109609,7 +109009,7 @@ icon_state = "doors"; name = "WARNING: EXTERNAL AIRLOCK"; pixel_x = 32 - }, + }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/hallway/secondary/exit{ @@ -109676,7 +109076,7 @@ /obj/structure/sign/poster{ icon_state = "poster22_legit"; pixel_y = -32 - }, + }, /turf/open/floor/plasteel/red/side{ dir = 10 }, @@ -109832,9 +109232,7 @@ /turf/open/floor/plasteel/grimy, /area/chapel/office) "dZG" = ( -/obj/effect/landmark/start{ - name = "Chaplain" - }, +/obj/effect/landmark/start/chaplain, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -109910,9 +109308,7 @@ /obj/structure/chair/office/dark{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Chaplain" - }, +/obj/effect/landmark/start/chaplain, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ icon_state = "intact"; dir = 9 @@ -110326,10 +109722,7 @@ /area/shuttle/escape) "eaK" = ( /obj/structure/lattice/catwalk, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/space, /area/solar/port) "eaL" = ( @@ -110564,9 +109957,7 @@ }) "ebG" = ( /turf/open/floor/engine, -/area/engine/gravity_generator{ - name = "Atmospherics Engine" - }) +/area/engine/supermatter) "ebJ" = ( /obj/machinery/door/window/brigdoor/northleft{ name = "Captain's Desk"; @@ -111320,7 +110711,7 @@ /obj/structure/table/wood, /obj/effect/decal/cleanable/dirt, /obj/item/clothing/shoes/jackboots, -/obj/effect/landmark/costume, +/obj/effect/spawner/lootdrop/costume, /obj/structure/sign/poster/contraband/random{ pixel_y = -32 }, @@ -111999,9 +111390,7 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/structure/sign/poster/official/cleanliness{ pixel_y = 32 }, @@ -112843,6 +112232,73 @@ /obj/machinery/light/small, /turf/open/floor/plasteel, /area/shuttle/escape) +"ehy" = ( +/obj/machinery/power/rad_collector{ + anchored = 1 + }, +/obj/structure/cable{ + icon_state = "0-4"; + d2 = 4 + }, +/obj/machinery/camera{ + c_tag = "Supermatter Chamber"; + name = "atmospherics camera"; + network = list("Engine") + }, +/turf/open/floor/circuit/green, +/area/engine/supermatter) +"ehz" = ( +/obj/structure/chair/office/dark{ + dir = 8 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral, +/area/atmos) +"ehA" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"ehB" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"ehC" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"ehD" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/highpressure/fulltile, +/turf/open/floor/plating, +/area/engine/supermatter) +"ehE" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"ehF" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"ehG" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"ehH" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"ehI" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"ehJ" = ( +/obj/structure/sign/radiation, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"ehK" = ( +/obj/structure/sign/radiation, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"ehL" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"ehM" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) (1,1,1) = {" aaa @@ -137850,11 +137306,11 @@ aoI apK ard asi -aiW +ehA auC auC auC -aiW +ehA azc aAc aAZ @@ -138107,13 +137563,13 @@ aoJ apL are asj -aiW +ehA auD avP avP axP -azd -aiW +ehJ +ehA aAY ark aDH @@ -138364,7 +137820,7 @@ aoK apM arf ask -aiW +ehA auE auE auE @@ -138621,7 +138077,7 @@ aoK apN arg asl -aoK +ehD ebG avQ ebG @@ -138878,7 +138334,7 @@ aoK apO arh asm -aiW +ehA auF auF auF @@ -139135,13 +138591,13 @@ aoL apP ari asn -aiW +ehA auG avR avR axT -azd -aiW +ehJ +ehA aBd ark aDL @@ -139392,11 +138848,11 @@ aoI apK ebP aso -aiW +ehA +ehy auH auH -auH -aiW +ehA azg aAe aBe @@ -139686,7 +139142,7 @@ bqf brq bsD aZq -bvu +ehz bvu byX aIZ @@ -142232,7 +141688,7 @@ awX axa ame aib -aJi +axZ aAj azm aAj @@ -143756,7 +143212,7 @@ ajY akW alZ anj -aoh +akV eeI aqa arq @@ -146161,7 +145617,7 @@ cLH cLI cLH cLI -cZW +cIm dbq dcN dez @@ -158497,7 +157953,7 @@ cUr cLM cLL cLM -dau +cIt dcd ddk dfg @@ -163916,7 +163372,7 @@ dAL dCd dDz dAI -dFv +dCa dHf dHU aaa diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index c2f9861fe1..83684a8150 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -1,6 +1,6 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aaa" = ( -/turf/open/space, +/turf/open/space/basic, /area/space) "aab" = ( /obj/docking_port/stationary{ @@ -16,9 +16,7 @@ /turf/open/space, /area/space) "aac" = ( -/obj/effect/landmark{ - name = "carpspawn" - }, +/obj/effect/landmark/carpspawn, /turf/open/space, /area/space) "aad" = ( @@ -183,9 +181,7 @@ /turf/open/floor/plasteel/airless/solarpanel, /area/solar/auxport) "aav" = ( -/obj/effect/landmark{ - name = "Marauder Entry" - }, +/obj/effect/landmark/marauder_entry, /turf/open/space, /area/space) "aaw" = ( @@ -206,10 +202,7 @@ /turf/open/floor/plating, /area/security/prison) "aaz" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/structure/lattice/catwalk, /turf/open/space, /area/solar/auxport) @@ -913,9 +906,7 @@ /obj/item/clothing/glasses/sunglasses/blindfold, /obj/item/clothing/mask/muzzle, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /obj/item/device/electropack, /turf/open/floor/plasteel/black, /area/prison/solitary{ @@ -1657,9 +1648,7 @@ /obj/item/clothing/suit/straight_jacket, /obj/item/clothing/glasses/sunglasses/blindfold, /obj/item/clothing/mask/muzzle, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/white, /area/security/prison) "adh" = ( @@ -1680,9 +1669,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/white, /area/security/prison) "adj" = ( @@ -2449,9 +2436,7 @@ "aeD" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, -/obj/effect/landmark{ - name = "Syndicate Breach Area" - }, +/obj/effect/landmark/syndicate_breach_area, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -2470,10 +2455,7 @@ name = "\improper Recreation Area" }) "aeF" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/structure/lattice/catwalk, /turf/open/space, /area/solar/auxstarboard) @@ -3323,9 +3305,7 @@ dir = 2; initialize_directions = 11 }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/red/corner{ dir = 1 }, @@ -3982,15 +3962,13 @@ /obj/structure/chair{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Head of Security" - }, +/obj/effect/landmark/start/head_of_security, /turf/open/floor/carpet, /area/security/hos) "aha" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /mob/living/simple_animal/hostile/retaliate/bat{ - desc = "A fierce companion for any person of power, this spider has been carefully trained by NanoTrasen specialists. Its beady, staring eyes send shivers down your spine"; + desc = "A fierce companion for any person of power, this spider has been carefully trained by NanoTrasen specialists. Its beady, staring eyes send shivers down your spine."; emote_hear = list("chitters"); faction = list("spiders"); harm_intent_damage = 3; @@ -4070,9 +4048,7 @@ }) "ahj" = ( /obj/structure/chair, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel, /area/crew_quarters/fitness{ name = "\improper Recreation Area" @@ -4147,10 +4123,7 @@ dir = 2; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/maintenance/auxsolarport) "aht" = ( @@ -4817,9 +4790,7 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/camera{ c_tag = "Evidence Storage"; dir = 2; @@ -5096,9 +5067,7 @@ /obj/structure/chair{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel, /area/crew_quarters/fitness{ name = "\improper Recreation Area" @@ -5378,16 +5347,12 @@ on = 1; pressure_checks = 1 }, -/obj/effect/landmark{ - name = "secequipment" - }, +/obj/effect/landmark/secequipment, /turf/open/floor/plasteel/vault, /area/security/main) "ajF" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/landmark{ - name = "secequipment" - }, +/obj/effect/landmark/secequipment, /turf/open/floor/plasteel/vault, /area/security/main) "ajG" = ( @@ -5401,9 +5366,7 @@ /area/security/main) "ajH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/landmark{ - name = "secequipment" - }, +/obj/effect/landmark/secequipment, /turf/open/floor/plasteel/vault, /area/security/main) "ajI" = ( @@ -5413,9 +5376,7 @@ scrub_N2O = 0; scrub_Toxins = 0 }, -/obj/effect/landmark{ - name = "secequipment" - }, +/obj/effect/landmark/secequipment, /turf/open/floor/plasteel/vault, /area/security/main) "ajJ" = ( @@ -5789,10 +5750,7 @@ dir = 2; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/maintenance/fpmaint2{ name = "Port Maintenance" @@ -6226,9 +6184,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel/red/corner{ dir = 8 }, @@ -6280,10 +6236,7 @@ dir = 4; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/maintenance/fore) "ald" = ( @@ -6612,9 +6565,7 @@ }) "alI" = ( /obj/item/weapon/grown/log, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/fpmaint2{ name = "Port Maintenance" @@ -6960,9 +6911,7 @@ /area/security/main) "amj" = ( /obj/structure/chair/comfy/black, -/obj/effect/landmark/start{ - name = "Head of Security" - }, +/obj/effect/landmark/start/head_of_security, /turf/open/floor/plasteel, /area/security/main) "amk" = ( @@ -7124,9 +7073,7 @@ "amt" = ( /obj/structure/rack, /obj/item/weapon/storage/box/lights/mixed, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/fore) "amu" = ( @@ -7337,10 +7284,7 @@ /turf/open/floor/plating, /area/maintenance/disposal) "amS" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/item/weapon/storage/box/lights/mixed, /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating, @@ -7443,9 +7387,7 @@ dir = 1 }, /obj/structure/bodycontainer/morgue, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/black, /area/security/brig) "ane" = ( @@ -7921,10 +7863,7 @@ dir = 4; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/maintenance/fpmaint2{ name = "Port Maintenance" @@ -8231,9 +8170,7 @@ /turf/open/floor/plasteel, /area/security/main) "aoD" = ( -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel/red, /area/security/main) "aoE" = ( @@ -8758,10 +8695,7 @@ dir = 8; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/maintenance/fpmaint2{ name = "Port Maintenance" @@ -9314,10 +9248,7 @@ dir = 2; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/maintenance/auxsolarstarboard) "aqA" = ( @@ -9662,9 +9593,7 @@ /obj/structure/chair/office/dark{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Warden" - }, +/obj/effect/landmark/start/warden, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -9694,9 +9623,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel/red/side{ dir = 8 }, @@ -9727,9 +9654,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel/red/side, /area/security/main) "aro" = ( @@ -9745,9 +9670,7 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel/red/side, /area/security/main) "arp" = ( @@ -9757,9 +9680,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel/red/side, /area/security/main) "arq" = ( @@ -9777,9 +9698,7 @@ dir = 2; initialize_directions = 11 }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel/red/side, /area/security/main) "ars" = ( @@ -9905,7 +9824,7 @@ /area/maintenance/starboard) "arI" = ( /obj/structure/rack, -/obj/effect/landmark/costume, +/obj/effect/spawner/lootdrop/costume, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/starboard) @@ -9917,9 +9836,7 @@ /turf/open/floor/plating, /area/maintenance/starboard) "arK" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating{ icon_state = "panelscorched" }, @@ -9929,10 +9846,7 @@ dir = 2; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/maintenance/starboard) "arM" = ( @@ -10065,10 +9979,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/structure/cable/yellow{ d1 = 2; d2 = 4; @@ -10187,10 +10098,7 @@ on = 1 }, /obj/machinery/light, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -10376,9 +10284,7 @@ /turf/open/floor/plasteel/showroomfloor, /area/security/warden) "asq" = ( -/obj/effect/landmark/start{ - name = "Warden" - }, +/obj/effect/landmark/start/warden, /obj/structure/chair/office/dark, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable/yellow{ @@ -11484,10 +11390,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/wood, /area/crew_quarters/sleep) "aug" = ( @@ -11520,9 +11423,7 @@ dir = 4; initialize_directions = 11 }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel, /area/crew_quarters/sleep) "auj" = ( @@ -11551,10 +11452,7 @@ /turf/open/floor/carpet, /area/crew_quarters/sleep) "aum" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; on = 1 @@ -11567,9 +11465,7 @@ "auo" = ( /obj/structure/mopbucket, /obj/item/weapon/mop, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating{ icon_state = "platingdmg2" }, @@ -11584,10 +11480,7 @@ dir = 4; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/maintenance/starboard) "aur" = ( @@ -12821,9 +12714,7 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel, /area/security/brig) "awn" = ( @@ -13539,10 +13430,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/carpet, /area/crew_quarters/sleep) "axF" = ( @@ -13594,10 +13482,7 @@ /turf/open/floor/wood, /area/crew_quarters/sleep) "axK" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; on = 1 @@ -14191,9 +14076,7 @@ icon_state = "shower"; dir = 8 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/freezer, /area/crew_quarters/locker/locker_toilet{ name = "\improper Restrooms" @@ -14891,10 +14774,7 @@ name = "\improper Restrooms" }) "aAb" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/item/weapon/bikehorn/rubberducky, /turf/open/floor/plasteel/freezer, /area/crew_quarters/locker/locker_toilet{ @@ -15139,9 +15019,7 @@ /obj/structure/disposalpipe/sortjunction{ sortType = 4 }, -/obj/effect/landmark/start{ - name = "Station Engineer" - }, +/obj/effect/landmark/start/station_engineer, /turf/open/floor/plasteel, /area/engine/engineering) "aAv" = ( @@ -15260,9 +15138,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/landmark/start{ - name = "Shaft Miner" - }, +/obj/effect/landmark/start/shaft_miner, /turf/open/floor/plasteel, /area/quartermaster/miningdock{ name = "\improper Mining Office" @@ -15597,9 +15473,7 @@ /area/security/brig) "aBk" = ( /obj/structure/closet/secure_closet/detective, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/camera{ c_tag = "Detective's Office"; dir = 4; @@ -15629,9 +15503,7 @@ /turf/open/floor/carpet, /area/security/detectives_office) "aBo" = ( -/obj/effect/landmark/start{ - name = "Detective" - }, +/obj/effect/landmark/start/detective, /obj/structure/chair/office/dark{ dir = 8 }, @@ -15684,9 +15556,7 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -16692,9 +16562,7 @@ }) "aDi" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/landmark/start{ - name = "Shaft Miner" - }, +/obj/effect/landmark/start/shaft_miner, /turf/open/floor/plasteel, /area/quartermaster/miningdock{ name = "\improper Mining Office" @@ -16738,9 +16606,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Cargo Technician" - }, +/obj/effect/landmark/start/cargo_technician, /turf/open/floor/plasteel/floorgrime, /area/quartermaster/sorting{ name = "\improper Warehouse" @@ -17122,9 +16988,7 @@ req_access_txt = "0"; specialfunctions = 4 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/freezer, /area/crew_quarters/locker/locker_toilet{ name = "\improper Restrooms" @@ -17275,10 +17139,7 @@ /turf/open/floor/wood, /area/crew_quarters/sleep) "aEe" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -17316,9 +17177,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "aEj" = ( -/obj/effect/landmark/start{ - name = "Station Engineer" - }, +/obj/effect/landmark/start/station_engineer, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -17483,9 +17342,7 @@ /obj/structure/chair/office/dark{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Shaft Miner" - }, +/obj/effect/landmark/start/shaft_miner, /turf/open/floor/plasteel, /area/quartermaster/miningdock{ name = "\improper Mining Office" @@ -17591,9 +17448,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plasteel/floorgrime, /area/quartermaster/sorting{ name = "\improper Warehouse" @@ -18755,9 +18610,7 @@ /area/security/brig) "aGu" = ( /obj/structure/bodycontainer/morgue, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/black, /area/security/detectives_office) "aGv" = ( @@ -18823,9 +18676,7 @@ pixel_x = 0; pixel_y = -32 }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/button/door{ id = "Toilet2"; name = "Lock Control"; @@ -18971,10 +18822,7 @@ name = "Port Maintenance" }) "aGO" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/machinery/airalarm{ pixel_y = 23 }, @@ -19109,9 +18957,7 @@ /area/engine/engineering) "aGW" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/landmark/start{ - name = "Station Engineer" - }, +/obj/effect/landmark/start/station_engineer, /turf/open/floor/plasteel, /area/engine/engineering) "aGX" = ( @@ -20380,9 +20226,7 @@ pixel_x = 0; pixel_y = -32 }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/button/door{ id = "Toilet1"; name = "Lock Control"; @@ -20424,9 +20268,7 @@ req_access_txt = "0"; specialfunctions = 4 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/freezer, /area/crew_quarters/locker/locker_toilet{ name = "\improper Restrooms" @@ -20535,7 +20377,7 @@ dir = 6 }, /turf/closed/wall/r_wall, -/area/engine/engineering) +/area/engine/supermatter) "aJB" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, @@ -20817,9 +20659,7 @@ /turf/open/floor/plasteel/black, /area/crew_quarters/courtroom) "aKf" = ( -/obj/effect/landmark/start{ - name = "Lawyer" - }, +/obj/effect/landmark/start/lawyer, /obj/structure/chair/office/dark{ dir = 4 }, @@ -21032,9 +20872,7 @@ /turf/open/floor/plating, /area/engine/engineering) "aKy" = ( -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plating, /area/engine/engineering) "aKz" = ( @@ -21087,21 +20925,21 @@ dir = 4 }, /turf/closed/wall/r_wall, -/area/engine/engineering) +/area/engine/supermatter) "aKH" = ( /obj/machinery/atmospherics/components/binary/pump/on{ dir = 4; name = "Gas to Chamber" }, /turf/open/floor/engine, -/area/engine/engineering) +/area/engine/supermatter) "aKI" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 9 }, /obj/machinery/meter, /turf/closed/wall/r_wall, -/area/engine/engineering) +/area/engine/supermatter) "aKL" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ icon_state = "intact"; @@ -21110,7 +20948,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; + icon_state = "2-8" }, /obj/effect/turf_decal/stripes/line, /turf/open/floor/engine, @@ -21263,9 +21101,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/fpmaint2{ name = "Port Maintenance" @@ -21512,9 +21348,7 @@ }, /area/crew_quarters/courtroom) "aLB" = ( -/obj/effect/landmark/start{ - name = "Lawyer" - }, +/obj/effect/landmark/start/lawyer, /turf/open/floor/plasteel, /area/crew_quarters/courtroom) "aLC" = ( @@ -21731,9 +21565,7 @@ name = "\improper Garden" }) "aLZ" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating{ icon_state = "platingdmg1" }, @@ -21743,9 +21575,7 @@ /turf/open/floor/plating, /area/engine/engineering) "aMb" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/engine/engineering) "aMc" = ( @@ -21797,7 +21627,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; + icon_state = "2-8" }, /obj/structure/cable{ icon_state = "1-8" @@ -21823,10 +21653,10 @@ req_access_txt = "10" }, /turf/open/floor/engine, -/area/engine/engineering) +/area/engine/supermatter) "aMk" = ( /turf/open/floor/engine, -/area/engine/engineering) +/area/engine/supermatter) "aMm" = ( /obj/machinery/atmospherics/pipe/simple/general/visible, /obj/effect/turf_decal/delivery, @@ -21876,9 +21706,7 @@ /area/quartermaster/storage) "aMx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/landmark/start{ - name = "Cargo Technician" - }, +/obj/effect/landmark/start/cargo_technician, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/quartermaster/storage) @@ -22078,9 +21906,7 @@ /turf/open/floor/wood, /area/lawoffice) "aMS" = ( -/obj/effect/landmark/start{ - name = "Lawyer" - }, +/obj/effect/landmark/start/lawyer, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -22357,14 +22183,14 @@ name = "Gas to Filter" }, /turf/open/floor/engine, -/area/engine/engineering) +/area/engine/supermatter) "aNv" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 2; on = 1 }, /turf/open/floor/engine, -/area/engine/engineering) +/area/engine/supermatter) "aNw" = ( /obj/structure/window/reinforced{ dir = 4 @@ -22463,9 +22289,7 @@ /turf/open/floor/plasteel, /area/quartermaster/storage) "aNF" = ( -/obj/effect/landmark/start{ - name = "Cargo Technician" - }, +/obj/effect/landmark/start/cargo_technician, /turf/open/floor/plasteel, /area/quartermaster/storage) "aNG" = ( @@ -22887,9 +22711,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/floorgrime, /area/crew_quarters/locker) "aOA" = ( @@ -23362,9 +23184,7 @@ /turf/open/floor/plasteel, /area/quartermaster/qm) "aPj" = ( -/obj/effect/landmark/start{ - name = "Quartermaster" - }, +/obj/effect/landmark/start/quartermaster, /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -23791,9 +23611,6 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/computer/monitor{ - name = "Engineering Power Monitoring Console" - }, /obj/machinery/status_display{ density = 0; layer = 4; @@ -23805,6 +23622,7 @@ dir = 2; network = list("SS13") }, +/obj/machinery/modular_computer/console/preset/engineering, /turf/open/floor/plasteel/vault, /area/engine/engineering) "aPX" = ( @@ -23845,6 +23663,8 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/item/weapon/storage/belt/utility, +/obj/item/weapon/storage/belt/utility, /turf/open/floor/plasteel, /area/engine/engineering) "aQd" = ( @@ -23911,9 +23731,7 @@ /turf/open/floor/plating, /area/quartermaster/storage) "aQj" = ( -/obj/effect/landmark/start{ - name = "Cargo Technician" - }, +/obj/effect/landmark/start/cargo_technician, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel{ name = "floor" @@ -24414,8 +24232,8 @@ /area/crew_quarters/locker) "aRa" = ( /obj/structure/rack, -/obj/effect/landmark/costume, -/obj/effect/landmark/costume, +/obj/effect/spawner/lootdrop/costume, +/obj/effect/spawner/lootdrop/costume, /obj/item/clothing/mask/balaclava, /obj/machinery/airalarm{ dir = 8; @@ -24511,9 +24329,7 @@ /turf/open/floor/plating, /area/maintenance/starboard) "aRj" = ( -/obj/effect/landmark/start{ - name = "Station Engineer" - }, +/obj/effect/landmark/start/station_engineer, /obj/machinery/light{ dir = 8 }, @@ -24629,9 +24445,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Station Engineer" - }, +/obj/effect/landmark/start/station_engineer, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24718,9 +24532,7 @@ }, /area/mining_construction) "aRG" = ( -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plating, /area/maintenance/fpmaint2{ name = "Port Maintenance" @@ -26293,9 +26105,7 @@ pixel_x = -24; pixel_y = 24 }, -/obj/effect/landmark/start{ - name = "Cyborg" - }, +/obj/effect/landmark/start/cyborg, /obj/structure/cable/yellow{ d2 = 4; icon_state = "0-4" @@ -26339,9 +26149,7 @@ dir = 2; on = 1 }, -/obj/effect/landmark/start{ - name = "Cyborg" - }, +/obj/effect/landmark/start/cyborg, /obj/machinery/light/small{ dir = 4 }, @@ -26996,9 +26804,7 @@ }, /area/quartermaster/storage) "aVI" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/quartermaster/storage) @@ -27006,9 +26812,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, -/obj/effect/landmark/start{ - name = "Cargo Technician" - }, +/obj/effect/landmark/start/cargo_technician, /turf/open/floor/plasteel, /area/quartermaster/storage) "aVK" = ( @@ -27838,9 +27642,7 @@ d2 = 4; icon_state = "1-4" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating{ icon_state = "panelscorched" }, @@ -28135,9 +27937,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel{ icon_state = "L7" }, @@ -28265,9 +28065,7 @@ d2 = 4; icon_state = "1-4" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/starboard) "aYb" = ( @@ -29142,9 +28940,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -29290,9 +29086,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "aZJ" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9; @@ -29377,9 +29171,7 @@ /turf/open/floor/wood, /area/library) "aZQ" = ( -/obj/effect/landmark{ - name = "tripai" - }, +/obj/effect/landmark/tripai, /obj/item/device/radio/intercom{ anyai = 1; freerange = 1; @@ -29485,9 +29277,7 @@ }, /area/ai_monitored/turret_protected/ai) "aZY" = ( -/obj/effect/landmark{ - name = "tripai" - }, +/obj/effect/landmark/tripai, /obj/item/device/radio/intercom{ anyai = 1; freerange = 1; @@ -30279,10 +30069,7 @@ /turf/open/floor/plating, /area/maintenance/starboard) "bbi" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/item/weapon/cigbutt, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 @@ -30439,9 +30226,7 @@ }, /area/engine/chiefs_office) "bbu" = ( -/obj/effect/landmark/start{ - name = "Chief Engineer" - }, +/obj/effect/landmark/start/chief_engineer, /obj/structure/chair/office/light{ dir = 1; pixel_y = 3 @@ -30468,14 +30253,6 @@ }, /area/engine/chiefs_office) "bbx" = ( -/obj/machinery/computer/security/telescreen{ - desc = "Used for monitoring the singularity engine safely."; - dir = 8; - name = "Singularity Monitor"; - network = list("Singulo"); - pixel_x = 29; - pixel_y = 0 - }, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -30486,6 +30263,14 @@ icon_state = "tube1" }, /obj/structure/disposalpipe/segment, +/obj/machinery/computer/security/telescreen{ + desc = "Used for monitoring the engine."; + dir = 8; + name = "Engine Monitor"; + network = list("Engine"); + pixel_x = 32; + pixel_y = 0 + }, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -30726,7 +30511,7 @@ /obj/structure/cable/yellow{ d1 = 2; d2 = 8; - icon_state = "2-8"; + icon_state = "2-8" }, /turf/open/floor/plasteel/brown{ dir = 1 @@ -30761,9 +30546,7 @@ name = "\improper Cargo Office" }) "bbU" = ( -/obj/effect/landmark/start{ - name = "Cargo Technician" - }, +/obj/effect/landmark/start/cargo_technician, /obj/structure/chair/office/dark{ dir = 4 }, @@ -30804,9 +30587,7 @@ "bbZ" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel, /area/hallway/primary/port) "bca" = ( @@ -31037,10 +30818,7 @@ dir = 4; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -31204,10 +30982,10 @@ "bcN" = ( /obj/machinery/computer/secure_data, /obj/machinery/computer/security/telescreen{ - desc = "Used for monitoring the singularity engine safely."; + desc = "Used for monitoring the engine."; dir = 8; - name = "Singularity Monitor"; - network = list("Singulo"); + name = "Engine Monitor"; + network = list("Engine"); pixel_x = 32; pixel_y = 0 }, @@ -32451,9 +32229,7 @@ name = "Port Maintenance" }) "beT" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -32835,9 +32611,7 @@ name = "\improper Captain's Quarters" }) "bfz" = ( -/obj/effect/landmark/start{ - name = "Captain" - }, +/obj/effect/landmark/start/captain, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/chair/comfy/brown{ icon_state = "comfychair"; @@ -32867,9 +32641,7 @@ "bfD" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/captain, -/obj/effect/landmark/start{ - name = "Captain" - }, +/obj/effect/landmark/start/captain, /obj/machinery/camera{ c_tag = "Captain's Quarters"; dir = 8; @@ -33570,9 +33342,7 @@ }) "bgR" = ( /obj/structure/disposalpipe/segment, -/obj/effect/landmark/start{ - name = "Cargo Technician" - }, +/obj/effect/landmark/start/cargo_technician, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -33736,9 +33506,7 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/landmark/start{ - name = "Janitor" - }, +/obj/effect/landmark/start/janitor, /turf/open/floor/plasteel/floorgrime, /area/janitor) "bhd" = ( @@ -33764,9 +33532,7 @@ name = "Central Maintenance" }) "bhf" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/power/apc{ cell_type = 2500; dir = 4; @@ -34725,9 +34491,7 @@ /obj/structure/chair{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/brown{ dir = 4 }, @@ -35522,9 +35286,7 @@ "bki" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/chair/office/dark, -/obj/effect/landmark/start{ - name = "Cargo Technician" - }, +/obj/effect/landmark/start/cargo_technician, /turf/open/floor/plasteel/arrival{ dir = 2 }, @@ -35900,10 +35662,7 @@ }, /area/bridge) "bkJ" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/item/weapon/soap/deluxe, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; @@ -35927,9 +35686,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/white, /area/crew_quarters/captain{ name = "\improper Captain's Quarters" @@ -35942,9 +35699,7 @@ dir = 2; icon_state = "tube1" }, -/obj/effect/landmark/start{ - name = "Captain" - }, +/obj/effect/landmark/start/captain, /obj/machinery/light_switch{ pixel_y = -25 }, @@ -35981,9 +35736,7 @@ name = "\improper Captain's Quarters" }) "bkP" = ( -/obj/effect/landmark/start{ - name = "Captain" - }, +/obj/effect/landmark/start/captain, /obj/machinery/airalarm{ dir = 1; pixel_y = -22 @@ -37297,6 +37050,7 @@ /obj/item/device/lightreplacer{ pixel_y = 7 }, +/obj/item/weapon/storage/belt/utility, /turf/open/floor/plasteel, /area/engine/break_room) "bne" = ( @@ -37583,9 +37337,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Cyborg" - }, +/obj/effect/landmark/start/cyborg, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/black, /area/ai_monitored/turret_protected/aisat_interior) @@ -38020,9 +37772,7 @@ /turf/open/floor/wood, /area/crew_quarters/heads) "bon" = ( -/obj/effect/landmark/start{ - name = "Head of Personnel" - }, +/obj/effect/landmark/start/head_of_personnel, /obj/structure/chair/office/dark{ dir = 8 }, @@ -39099,9 +38849,7 @@ dir = 4; network = list("SS13") }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/grimy, /area/hallway/primary/port) "bqf" = ( @@ -39650,9 +39398,7 @@ name = "\improper Captain's Quarters" }) "bqY" = ( -/obj/effect/landmark/start{ - name = "Captain" - }, +/obj/effect/landmark/start/captain, /obj/structure/chair/comfy/brown, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, @@ -39750,9 +39496,7 @@ /turf/open/floor/wood, /area/crew_quarters/bar) "brh" = ( -/obj/effect/landmark/start{ - name = "Bartender" - }, +/obj/effect/landmark/start/bartender, /turf/open/floor/wood, /area/crew_quarters/bar) "bri" = ( @@ -40538,9 +40282,7 @@ d2 = 4; icon_state = "2-4" }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel, /area/hallway/secondary/entry{ name = "Arrivals" @@ -40587,9 +40329,7 @@ dir = 4; icon_state = "tube1" }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/grimy, /area/hallway/primary/port) "bst" = ( @@ -41069,9 +40809,7 @@ d2 = 4; icon_state = "2-4" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -41169,10 +40907,7 @@ dir = 2; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -41314,9 +41049,7 @@ /turf/open/floor/plasteel, /area/engine/break_room) "btE" = ( -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /obj/item/device/radio/intercom{ freerange = 0; frequency = 1459; @@ -42124,9 +41857,7 @@ pixel_x = 27; pixel_y = -7 }, -/obj/effect/landmark/start{ - name = "AI" - }, +/obj/effect/landmark/start/ai, /obj/machinery/button/door{ id = "AI Core shutters"; name = "AI Core shutters control"; @@ -42147,9 +41878,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/starboard) "bvh" = ( @@ -42431,9 +42160,7 @@ }) "bvD" = ( /obj/structure/chair, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -42611,7 +42338,10 @@ dir = 4 }, /turf/open/floor/plating, -/area/toxins/xenobiology) +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) "bvU" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4; @@ -42773,9 +42503,7 @@ /area/crew_quarters/heads) "bwo" = ( /obj/structure/chair/office/dark, -/obj/effect/landmark/start{ - name = "Head of Personnel" - }, +/obj/effect/landmark/start/head_of_personnel, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -43767,10 +43495,7 @@ name = "old sink"; pixel_y = 28 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/crew_quarters/toilet{ name = "\improper Auxiliary Restrooms" @@ -43822,9 +43547,7 @@ /obj/structure/chair/office/dark{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Librarian" - }, +/obj/effect/landmark/start/librarian, /turf/open/floor/wood, /area/library) "bxW" = ( @@ -44098,9 +43821,7 @@ }, /area/ai_monitored/turret_protected/ai) "byy" = ( -/obj/effect/landmark/start{ - name = "Bartender" - }, +/obj/effect/landmark/start/bartender, /turf/open/floor/plasteel/bar, /area/crew_quarters/bar) "byz" = ( @@ -44109,9 +43830,7 @@ /area/crew_quarters/bar) "byA" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/landmark/start{ - name = "Bartender" - }, +/obj/effect/landmark/start/bartender, /turf/open/floor/plasteel/bar, /area/crew_quarters/bar) "byB" = ( @@ -45289,9 +45008,7 @@ /obj/structure/chair/office/dark{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Atmospheric Technician" - }, +/obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/plasteel, /area/atmos) "bAF" = ( @@ -45684,9 +45401,7 @@ /area/library) "bBv" = ( /obj/structure/chair/comfy/black, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/wood, /area/library) "bBw" = ( @@ -46043,9 +45758,7 @@ /area/crew_quarters/bar) "bBV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/structure/chair/stool/bar, /turf/open/floor/plasteel/bar, /area/crew_quarters/bar) @@ -46074,9 +45787,7 @@ "bCa" = ( /obj/structure/chair/wood/wings, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/landmark/start{ - name = "Mime" - }, +/obj/effect/landmark/start/mime, /turf/open/floor/carpet, /area/crew_quarters/theatre) "bCb" = ( @@ -46152,9 +45863,7 @@ /obj/structure/chair{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Atmospheric Technician" - }, +/obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/plasteel/caution{ dir = 8 }, @@ -46585,9 +46294,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/neutral/corner{ dir = 1 }, @@ -46810,9 +46517,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/neutral/corner{ dir = 4 }, @@ -46967,9 +46672,7 @@ /turf/open/floor/plasteel/bar, /area/crew_quarters/bar) "bDE" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/bar, /area/crew_quarters/bar) "bDF" = ( @@ -46999,9 +46702,7 @@ /obj/structure/chair/stool{ pixel_y = 8 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/wood, /area/crew_quarters/bar) "bDJ" = ( @@ -47112,9 +46813,7 @@ /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 6 }, -/obj/effect/landmark/start{ - name = "Atmospheric Technician" - }, +/obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/plasteel, /area/atmos) "bEa" = ( @@ -47281,9 +46980,7 @@ /turf/open/floor/wood, /area/security/vacantoffice) "bEr" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/wood, /area/security/vacantoffice) "bEs" = ( @@ -48176,9 +47873,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/landmark/start{ - name = "Clown" - }, +/obj/effect/landmark/start/clown, /turf/open/floor/carpet, /area/crew_quarters/theatre) "bFx" = ( @@ -49376,9 +49071,7 @@ dir = 4 }, /obj/machinery/light/small, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/blood/gibs/old, /turf/open/floor/plasteel/floorgrime, @@ -49428,9 +49121,7 @@ pixel_x = 0; pixel_y = -32 }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/crew_quarters/toilet{ name = "\improper Auxiliary Restrooms" @@ -49823,7 +49514,7 @@ dir = 10; initialize_directions = 10 }, -/turf/open/floor/plating, +/turf/open/floor/plasteel/white, /area/toxins/xenobiology) "bIw" = ( /obj/machinery/light, @@ -49839,7 +49530,10 @@ /obj/item/clothing/shoes/winterboots, /obj/item/clothing/suit/hooded/wintercoat, /turf/open/floor/plating, -/area/toxins/xenobiology) +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) "bIy" = ( /obj/machinery/firealarm{ dir = 1; @@ -50333,9 +50027,7 @@ /turf/open/floor/wood, /area/library) "bJB" = ( -/obj/effect/landmark/start{ - name = "Librarian" - }, +/obj/effect/landmark/start/librarian, /obj/structure/chair/office/dark{ dir = 1 }, @@ -50935,9 +50627,7 @@ /turf/open/floor/plasteel, /area/atmos) "bKD" = ( -/obj/effect/landmark/start{ - name = "Atmospheric Technician" - }, +/obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/plasteel, /area/atmos) "bKE" = ( @@ -51081,9 +50771,7 @@ }) "bKT" = ( /obj/structure/chair, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/machinery/light{ dir = 1 }, @@ -51220,8 +50908,8 @@ dir = 8; layer = 2.9 }, -/obj/effect/landmark/costume, -/obj/effect/landmark/costume, +/obj/effect/spawner/lootdrop/costume, +/obj/effect/spawner/lootdrop/costume, /turf/open/floor/plating, /area/maintenance/fpmaint2{ name = "Port Maintenance" @@ -51232,8 +50920,8 @@ dir = 8; layer = 2.9 }, -/obj/effect/landmark/costume, -/obj/effect/landmark/costume, +/obj/effect/spawner/lootdrop/costume, +/obj/effect/spawner/lootdrop/costume, /turf/open/floor/plating, /area/maintenance/fpmaint2{ name = "Port Maintenance" @@ -51250,9 +50938,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ req_access_txt = 1 }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/carpet, /area/library) "bLk" = ( @@ -51547,9 +51233,7 @@ icon_state = "1-2" }, /obj/item/weapon/cigbutt, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/maintcentral{ name = "Central Maintenance" @@ -52751,9 +52435,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Mime" - }, +/obj/effect/landmark/start/mime, /turf/open/floor/wood, /area/crew_quarters/theatre) "bNK" = ( @@ -52870,9 +52552,7 @@ /turf/open/floor/plasteel, /area/atmos) "bNT" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel, /area/atmos) "bNU" = ( @@ -53438,9 +53118,7 @@ }, /area/crew_quarters/kitchen) "bOR" = ( -/obj/effect/landmark/start{ - name = "Cook" - }, +/obj/effect/landmark/start/cook, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/kitchen) "bOS" = ( @@ -53538,9 +53216,7 @@ dir = 4; on = 1 }, -/obj/effect/landmark/start{ - name = "Clown" - }, +/obj/effect/landmark/start/clown, /turf/open/floor/wood, /area/crew_quarters/theatre) "bPe" = ( @@ -53645,10 +53321,7 @@ dir = 8; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/maintenance/starboard) "bPm" = ( @@ -53769,10 +53442,7 @@ /turf/open/floor/engine/plasma, /area/atmos) "bPz" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/engine/plasma, /area/atmos) "bPA" = ( @@ -53986,9 +53656,7 @@ /turf/open/floor/engine/cult, /area/library) "bPX" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/light/small{ dir = 1 }, @@ -54492,17 +54160,12 @@ /turf/open/floor/plasteel/showroomfloor, /area/crew_quarters/kitchen) "bQJ" = ( -/obj/effect/landmark/start{ - name = "Chef" - }, +/obj/effect/landmark/start/cook, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plasteel/showroomfloor, /area/crew_quarters/kitchen) "bQK" = ( @@ -55341,9 +55004,7 @@ /area/maintenance/starboard) "bSe" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/starboard) "bSf" = ( @@ -55881,9 +55542,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -57486,10 +57145,7 @@ icon_state = "4-8"; pixel_y = 0 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -57520,10 +57176,7 @@ dir = 1; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/maintenance/fpmaint2{ name = "Port Maintenance" @@ -57574,9 +57227,7 @@ name = "Aft Maintenance" }) "bWa" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/aft{ name = "Aft Maintenance" @@ -57835,9 +57486,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel{ icon_state = "L8" }, @@ -58030,9 +57679,7 @@ /obj/structure/chair/office/dark{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Botanist" - }, +/obj/effect/landmark/start/botanist, /turf/open/floor/plasteel/green/side{ dir = 10 }, @@ -58302,9 +57949,7 @@ /turf/open/floor/plasteel, /area/atmos) "bXk" = ( -/obj/effect/landmark/start{ - name = "Atmospheric Technician" - }, +/obj/effect/landmark/start/atmospheric_technician, /obj/machinery/atmospherics/pipe/simple/general/visible{ color = "#330000"; dir = 4 @@ -58729,9 +58374,7 @@ /turf/open/floor/plasteel/green, /area/hydroponics) "bYg" = ( -/obj/effect/landmark/start{ - name = "Botanist" - }, +/obj/effect/landmark/start/botanist, /obj/machinery/holopad, /turf/open/floor/plasteel, /area/hydroponics) @@ -58755,9 +58398,7 @@ /turf/open/floor/plasteel, /area/hydroponics) "bYk" = ( -/obj/effect/landmark/start{ - name = "Botanist" - }, +/obj/effect/landmark/start/botanist, /turf/open/floor/plasteel/green/side{ dir = 4 }, @@ -58805,9 +58446,7 @@ icon_state = "alarm0"; pixel_x = 24 }, -/obj/effect/landmark/start{ - name = "Botanist" - }, +/obj/effect/landmark/start/botanist, /turf/open/floor/plasteel/hydrofloor, /area/hydroponics) "bYo" = ( @@ -59485,9 +59124,7 @@ }, /area/hydroponics) "bZu" = ( -/obj/effect/landmark/start{ - name = "Botanist" - }, +/obj/effect/landmark/start/botanist, /turf/open/floor/plasteel/green/side{ dir = 8 }, @@ -59942,9 +59579,7 @@ }) "can" = ( /obj/structure/chair, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/whiteblue/side{ dir = 1 }, @@ -60020,9 +59655,7 @@ }) "cav" = ( /obj/structure/chair, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/whitepurple/side{ dir = 1 }, @@ -60952,9 +60585,7 @@ name = "Medbay Storage" }) "cbL" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 2 }, @@ -60972,9 +60603,7 @@ }) "cbN" = ( /obj/machinery/holopad, -/obj/effect/landmark/start{ - name = "Medical Doctor" - }, +/obj/effect/landmark/start/medical_doctor, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -61819,10 +61448,7 @@ name = "Aft Maintenance" }) "cdo" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/structure/closet/firecloset, /turf/open/floor/plating, /area/maintenance/aft{ @@ -62603,9 +62229,7 @@ /obj/structure/chair/office/light{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Medical Doctor" - }, +/obj/effect/landmark/start/medical_doctor, /obj/machinery/button/door{ desc = "A remote control switch for the medbay foyer."; id = "MedbayFoyer"; @@ -63150,10 +62774,7 @@ /turf/open/floor/plasteel/floorgrime, /area/maintenance/incinerator) "cfp" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 }, @@ -64049,9 +63670,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/landmark/start{ - name = "Medical Doctor" - }, +/obj/effect/landmark/start/medical_doctor, /turf/open/floor/plasteel/whiteblue/side{ dir = 1 }, @@ -64230,9 +63849,7 @@ /obj/structure/chair/office/light{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Chemist" - }, +/obj/effect/landmark/start/chemist, /turf/open/floor/plasteel/whiteyellow{ dir = 4 }, @@ -64461,9 +64078,7 @@ /area/toxins/explab) "chB" = ( /obj/machinery/space_heater, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -65186,17 +64801,13 @@ name = "Research Division" }) "ciL" = ( -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plating, /area/maintenance/aft{ name = "Aft Maintenance" }) "ciM" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -65391,10 +65002,7 @@ /turf/open/floor/engine/o2, /area/atmos) "cji" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/engine/air, /area/atmos) "cjj" = ( @@ -65519,9 +65127,7 @@ dir = 4; on = 1 }, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/black, /area/medical/surgery) "cjx" = ( @@ -65880,9 +65486,7 @@ /turf/open/floor/plasteel/white, /area/toxins/lab) "ckb" = ( -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -66007,9 +65611,7 @@ /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/item/device/flashlight, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/aft{ name = "Aft Maintenance" @@ -66414,9 +66016,7 @@ /obj/structure/sign/nosmoking_2{ pixel_x = 28 }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plasteel/black, /area/medical/surgery) "cld" = ( @@ -66614,9 +66214,7 @@ /obj/structure/chair/office/light{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Chemist" - }, +/obj/effect/landmark/start/chemist, /turf/open/floor/plasteel/whiteyellow/side{ dir = 8 }, @@ -66627,9 +66225,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/landmark/start{ - name = "Chemist" - }, +/obj/effect/landmark/start/chemist, /turf/open/floor/plasteel/white, /area/medical/chemistry) "clv" = ( @@ -66995,10 +66591,7 @@ name = "Aft Maintenance" }) "clZ" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -68298,9 +67891,7 @@ /turf/open/floor/plasteel/white, /area/toxins/explab) "con" = ( -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /obj/structure/chair/office/light{ dir = 1; pixel_y = 3 @@ -68441,9 +68032,7 @@ /turf/open/floor/plasteel/white, /area/medical/surgery) "coA" = ( -/obj/effect/landmark/start{ - name = "Medical Doctor" - }, +/obj/effect/landmark/start/medical_doctor, /turf/open/floor/plasteel/white, /area/medical/surgery) "coB" = ( @@ -68549,9 +68138,7 @@ /obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 2 }, -/obj/effect/landmark/start{ - name = "Medical Doctor" - }, +/obj/effect/landmark/start/medical_doctor, /turf/open/floor/plasteel, /area/medical/cryo) "coL" = ( @@ -68599,9 +68186,7 @@ /obj/structure/chair/office/light{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Chief Medical Officer" - }, +/obj/effect/landmark/start/chief_medical_officer, /turf/open/floor/plasteel/barber{ dir = 8 }, @@ -68686,9 +68271,7 @@ /obj/structure/chair/office/light{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Chemist" - }, +/obj/effect/landmark/start/chemist, /turf/open/floor/plasteel/whiteyellow/side{ dir = 4 }, @@ -68764,9 +68347,7 @@ /turf/open/floor/plating, /area/toxins/lab) "cpd" = ( -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /obj/structure/cable/yellow{ d1 = 2; d2 = 4; @@ -68978,9 +68559,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/white, /area/medical/research{ name = "Research Division" @@ -69236,10 +68815,7 @@ name = "Aft Maintenance" }) "cpK" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/maintenance/aft{ name = "Aft Maintenance" @@ -69303,9 +68879,9 @@ dir = 4 }, /obj/machinery/camera{ - c_tag = "Engineering - Supermatter West"; + c_tag = "Engineering Supermatter Port"; dir = 8; - network = list("SS13") + network = list("SS13","Engine") }, /obj/machinery/airalarm{ dir = 8; @@ -69316,7 +68892,7 @@ req_one_access_txt = "24;10" }, /turf/open/floor/engine, -/area/engine/engineering) +/area/engine/supermatter) "cpS" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -69388,9 +68964,7 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Medical Doctor" - }, +/obj/effect/landmark/start/medical_doctor, /obj/machinery/holopad, /turf/open/floor/plasteel/white, /area/medical/surgery) @@ -70079,10 +69653,7 @@ dir = 8; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/maintenance/aft{ name = "Aft Maintenance" @@ -70991,9 +70562,7 @@ pixel_x = 0; pixel_y = -32 }, -/obj/effect/landmark/start{ - name = "Chief Medical Officer" - }, +/obj/effect/landmark/start/chief_medical_officer, /obj/structure/cable/yellow{ d1 = 1; d2 = 8; @@ -71030,9 +70599,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/aft{ name = "Aft Maintenance" @@ -71803,9 +71370,7 @@ /obj/structure/chair/office/light{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Research Director" - }, +/obj/effect/landmark/start/research_director, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/cafeteria{ dir = 5 @@ -72459,10 +72024,7 @@ }, /area/toxins/storage) "cuX" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -72475,9 +72037,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -72791,9 +72351,7 @@ /obj/structure/chair/office/light{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Geneticist" - }, +/obj/effect/landmark/start/geneticist, /turf/open/floor/plasteel/whiteblue/side{ dir = 9 }, @@ -72812,9 +72370,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/landmark/start{ - name = "Geneticist" - }, +/obj/effect/landmark/start/geneticist, /turf/open/floor/plasteel/whiteblue/side{ dir = 5 }, @@ -72843,9 +72399,7 @@ dir = 4 }, /obj/structure/disposalpipe/segment, -/obj/effect/landmark/start{ - name = "Geneticist" - }, +/obj/effect/landmark/start/geneticist, /turf/open/floor/plasteel/blue/side{ dir = 4 }, @@ -72911,9 +72465,7 @@ }) "cvK" = ( /obj/machinery/magnetic_module, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/structure/target_stake, /obj/effect/turf_decal/bot{ dir = 9 @@ -73077,9 +72629,7 @@ "cvW" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -73274,9 +72824,7 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/landmark/start{ - name = "Medical Doctor" - }, +/obj/effect/landmark/start/medical_doctor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -73375,9 +72923,7 @@ }, /area/medical/genetics_cloning) "cww" = ( -/obj/effect/landmark/start{ - name = "Geneticist" - }, +/obj/effect/landmark/start/geneticist, /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 @@ -73700,9 +73246,7 @@ "cwX" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment, -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -73754,9 +73298,7 @@ }) "cxd" = ( /obj/structure/reagent_dispensers/watertank, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/aft{ name = "Aft Maintenance" @@ -73847,9 +73389,7 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/white, /area/medical/medbay3{ name = "Medbay Aft" @@ -74384,9 +73924,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, -/obj/effect/landmark/start{ - name = "Geneticist" - }, +/obj/effect/landmark/start/geneticist, /turf/open/floor/plasteel/white, /area/medical/genetics) "cyg" = ( @@ -74498,9 +74036,7 @@ icon_state = "alarm0"; pixel_x = 24 }, -/obj/effect/landmark/start{ - name = "Roboticist" - }, +/obj/effect/landmark/start/roboticist, /obj/machinery/light{ icon_state = "tube1"; dir = 4 @@ -74858,9 +74394,7 @@ }, /area/medical/genetics_cloning) "cyW" = ( -/obj/effect/landmark/start{ - name = "Geneticist" - }, +/obj/effect/landmark/start/geneticist, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -75948,9 +75482,7 @@ dir = 4 }, /obj/machinery/holopad, -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -75989,9 +75521,7 @@ name = "\improper Toxins Lab" }) "cAI" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/effect/turf_decal/stripes/corner{ dir = 1 }, @@ -76430,9 +75960,7 @@ }) "cBu" = ( /obj/structure/chair/stool, -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -76663,10 +76191,7 @@ /turf/open/floor/plating/airless, /area/toxins/test_area) "cBQ" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/structure/cable, /obj/structure/lattice/catwalk, /turf/open/space, @@ -76815,15 +76340,11 @@ /area/medical/morgue) "cCf" = ( /obj/structure/bodycontainer/morgue, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/black, /area/medical/morgue) "cCg" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plasteel/black, /area/medical/morgue) "cCi" = ( @@ -76851,9 +76372,7 @@ /obj/item/weapon/paper/morguereminder{ pixel_x = -4 }, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/black, /area/medical/morgue) "cCl" = ( @@ -77306,9 +76825,7 @@ dir = 8 }, /obj/structure/bodycontainer/morgue, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/black, /area/medical/morgue) "cCV" = ( @@ -77316,10 +76833,7 @@ dir = 2; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plasteel/black, /area/medical/morgue) "cCW" = ( @@ -77332,9 +76846,7 @@ /turf/open/floor/plasteel/black, /area/medical/morgue) "cCX" = ( -/obj/effect/landmark/start{ - name = "Medical Doctor" - }, +/obj/effect/landmark/start/medical_doctor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -77653,9 +77165,7 @@ /turf/open/floor/plasteel/freezer, /area/medical/virology) "cDC" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plasteel/freezer, /area/medical/virology) "cDD" = ( @@ -77899,9 +77409,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Medical Doctor" - }, +/obj/effect/landmark/start/medical_doctor, /turf/open/floor/plasteel/white, /area/medical/medbay3{ name = "Medbay Aft" @@ -78097,9 +77605,7 @@ /turf/open/floor/plating, /area/assembly/robotics) "cEk" = ( -/obj/effect/landmark/start{ - name = "Roboticist" - }, +/obj/effect/landmark/start/roboticist, /obj/structure/chair/office/light{ dir = 8 }, @@ -78433,9 +77939,7 @@ /obj/structure/chair/office/light{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Virologist" - }, +/obj/effect/landmark/start/virologist, /turf/open/floor/plasteel/whitegreen/corner{ dir = 1 }, @@ -78560,9 +78064,7 @@ pixel_y = 0 }, /obj/structure/bodycontainer/morgue, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/black, /area/medical/morgue) "cEV" = ( @@ -78647,9 +78149,7 @@ /turf/open/floor/plasteel, /area/assembly/robotics) "cFf" = ( -/obj/effect/landmark/start{ - name = "Roboticist" - }, +/obj/effect/landmark/start/roboticist, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/assembly/robotics) @@ -78757,9 +78257,7 @@ frequency = 1449; id = "tox_airlock_pump" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/engine, /area/toxins/mixing{ name = "\improper Toxins Lab" @@ -79250,9 +78748,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/white, /area/medical/research{ name = "Research Division" @@ -79490,9 +78986,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/holopad, /turf/open/floor/plasteel/white, /area/medical/virology) @@ -79837,9 +79331,7 @@ /turf/open/floor/plasteel, /area/assembly/robotics) "cGW" = ( -/obj/effect/landmark/start{ - name = "Roboticist" - }, +/obj/effect/landmark/start/roboticist, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, @@ -80599,9 +80091,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/black, /area/toxins/server{ name = "\improper Research Division Server Room" @@ -80975,9 +80465,7 @@ }, /area/assembly/robotics) "cIJ" = ( -/obj/effect/landmark/start{ - name = "Roboticist" - }, +/obj/effect/landmark/start/roboticist, /obj/structure/sink{ dir = 8; icon_state = "sink"; @@ -81144,9 +80632,7 @@ name = "\improper Research Division Server Room" }) "cIZ" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/manifold{ dir = 4 }, @@ -81751,7 +81237,7 @@ }) "cJY" = ( /obj/structure/rack, -/obj/effect/landmark/costume, +/obj/effect/spawner/lootdrop/costume, /obj/effect/spawner/lootdrop/maintenance{ lootcount = 2; name = "2maintenance loot spawner" @@ -81826,10 +81312,7 @@ /turf/open/floor/plasteel/freezer, /area/medical/virology) "cKh" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -82337,23 +81820,17 @@ /turf/closed/wall, /area/chapel/office) "cLb" = ( -/obj/machinery/door/airlock/centcom{ - layer = 2.7; - name = "Crematorium Maintenance"; - opacity = 1; - req_access_txt = "27" - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/airlock/maintenance{ + name = "Crematorium Maintenance"; + req_access_txt = "12;27"; + req_one_access_txt = "0" + }, /turf/open/floor/plating, /area/maintenance/aft{ name = "Aft Maintenance" }) "cLc" = ( -/obj/machinery/door/airlock/centcom{ - name = "Chapel Office Maintenance"; - opacity = 1; - req_access_txt = "27" - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment, /obj/structure/cable/yellow{ @@ -82361,6 +81838,11 @@ d2 = 2; icon_state = "1-2" }, +/obj/machinery/door/airlock/maintenance{ + name = "Chapel Office Maintenance"; + req_access_txt = "12;22"; + req_one_access_txt = "0" + }, /turf/open/floor/plating, /area/maintenance/aft{ name = "Aft Maintenance" @@ -82931,13 +82413,8 @@ /turf/open/floor/plasteel/black, /area/chapel/office) "cLU" = ( -/obj/effect/landmark{ - name = "blobstart" - }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/blobstart, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/engine, /area/toxins/explab) "cLV" = ( @@ -83019,18 +82496,16 @@ }, /obj/item/organ/heart, /obj/item/device/soulstone/anybody/chaplain, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/cult{ dir = 2 }, /area/chapel/office) "cMb" = ( /obj/machinery/door/airlock/maintenance{ - name = "Chapel Maintenance Access "; - req_access_txt = "0"; - req_one_access_txt = "12;27" + name = "Chapel Maintenance"; + req_access_txt = "12"; + req_one_access_txt = "0" }, /obj/structure/cable/yellow{ d1 = 1; @@ -83131,9 +82606,7 @@ }) "cMl" = ( /obj/machinery/space_heater, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/aft{ name = "Aft Maintenance" @@ -83201,10 +82674,7 @@ /turf/open/floor/plating, /area/maintenance/starboardsolar) "cMr" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -83305,9 +82775,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Chaplain" - }, +/obj/effect/landmark/start/chaplain, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -83323,9 +82791,7 @@ /area/chapel/office) "cMF" = ( /obj/structure/chair, -/obj/effect/landmark/start{ - name = "Chaplain" - }, +/obj/effect/landmark/start/chaplain, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/grimy, /area/chapel/office) @@ -83467,9 +82933,7 @@ /obj/structure/chair{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -83780,7 +83244,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; + icon_state = "1-4" }, /turf/open/floor/plating, /area/maintenance/starboardsolar) @@ -83952,16 +83416,15 @@ /area/chapel/main) "cNH" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/centcom{ - name = "Chapel"; - opacity = 1 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/door/airlock/glass{ + name = "Chapel" + }, /turf/open/floor/plasteel/black, /area/chapel/main) "cNI" = ( @@ -84016,9 +83479,7 @@ name = "\improper Departure Lounge" }) "cNM" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel, /area/hallway/secondary/exit{ name = "\improper Departure Lounge" @@ -84184,22 +83645,18 @@ on = 1; pressure_checks = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plasteel/black, /area/chapel/office) "cOc" = ( -/obj/machinery/door/airlock/centcom{ - layer = 2.7; - name = "Crematorium"; - opacity = 1; - req_access_txt = "27" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/machinery/door/airlock/maintenance{ + name = "Crematorium"; + req_access_txt = "22;27"; + req_one_access_txt = "0" + }, /turf/open/floor/plasteel/black, /area/chapel/office) "cOd" = ( @@ -84303,13 +83760,12 @@ /area/chapel/main) "cOn" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/centcom{ - name = "Chapel"; - opacity = 1 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/door/airlock/glass{ + name = "Chapel" + }, /turf/open/floor/plasteel/black, /area/chapel/main) "cOo" = ( @@ -84509,10 +83965,7 @@ dir = 1; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/maintenance/aft{ name = "Aft Maintenance" @@ -84592,9 +84045,7 @@ /obj/structure/chair{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Chaplain" - }, +/obj/effect/landmark/start/chaplain, /turf/open/floor/plasteel/black, /area/chapel/office) "cOM" = ( @@ -84836,12 +84287,11 @@ /turf/closed/wall, /area/chapel/office) "cPl" = ( -/obj/machinery/door/airlock/centcom{ - name = "Chapel Office"; - opacity = 1; - req_access_txt = "27" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/airlock/glass{ + name = "Chapel Office"; + req_access_txt = "22" + }, /turf/open/floor/plasteel/black, /area/chapel/office) "cPm" = ( @@ -84911,9 +84361,7 @@ /obj/structure/chair{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -85304,9 +84752,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/door/airlock/centcom{ - name = "Funeral Parlour"; - opacity = 1 +/obj/machinery/door/airlock/glass{ + name = "Funeral Parlour" }, /turf/open/floor/plasteel/black, /area/chapel/main) @@ -85460,9 +84907,7 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 2 }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plasteel/whitepurple/side{ dir = 1 }, @@ -85692,9 +85137,7 @@ /turf/open/floor/plasteel/black, /area/chapel/main) "cQW" = ( -/obj/effect/landmark/start{ - name = "Chaplain" - }, +/obj/effect/landmark/start/chaplain, /turf/open/floor/plasteel/black, /area/chapel/main) "cQX" = ( @@ -86041,9 +85484,7 @@ /area/chapel/main) "cRI" = ( /obj/structure/chair, -/obj/effect/landmark/start{ - name = "Chaplain" - }, +/obj/effect/landmark/start/chaplain, /turf/open/floor/plasteel/vault, /area/chapel/main) "cRJ" = ( @@ -86347,9 +85788,7 @@ /turf/open/floor/engine, /area/toxins/xenobiology) "cSo" = ( -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/engine, /area/toxins/xenobiology) "cSp" = ( @@ -87039,7 +86478,10 @@ icon_state = "pipe-c" }, /turf/open/floor/plating, -/area/toxins/xenobiology) +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) "cTo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -87049,7 +86491,10 @@ "cTp" = ( /obj/structure/closet, /turf/open/floor/plating, -/area/toxins/xenobiology) +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) "cTq" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -87162,7 +86607,10 @@ "cTC" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating, -/area/toxins/xenobiology) +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) "cTD" = ( /obj/machinery/shieldwallgen{ req_access_txt = "55" @@ -87722,9 +87170,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/holopad, /turf/open/floor/plasteel/white, /area/toxins/xenobiology) @@ -87745,9 +87191,7 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /turf/open/floor/plasteel/white, /area/toxins/xenobiology) "cUO" = ( @@ -89150,9 +88594,9 @@ }, /obj/effect/turf_decal/stripes/line, /obj/machinery/camera{ - c_tag = "Engineering - Supermatter South"; + c_tag = "Engineering Supermatter Aft"; dir = 1; - network = list("SS13") + network = list("SS13","Engine") }, /turf/open/floor/engine, /area/engine/engineering) @@ -90417,9 +89861,7 @@ /obj/structure/chair{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel/red/side{ dir = 8 }, @@ -90579,9 +90021,7 @@ /obj/structure/chair{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel/red/side{ dir = 4 }, @@ -90822,7 +90262,10 @@ dir = 1 }, /turf/open/floor/plating, -/area/toxins/xenobiology) +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) "daQ" = ( /obj/structure/disposalpipe/segment{ dir = 2; @@ -90831,7 +90274,7 @@ /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, -/turf/open/floor/plating, +/turf/open/floor/plasteel/white, /area/toxins/xenobiology) "daR" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ @@ -90890,7 +90333,7 @@ }, /obj/structure/cable, /turf/open/floor/engine, -/area/engine/engineering) +/area/engine/supermatter) "daZ" = ( /obj/structure/grille, /obj/machinery/atmospherics/pipe/manifold/general/visible{ @@ -90898,7 +90341,7 @@ }, /obj/structure/window/reinforced/highpressure/fulltile, /turf/open/floor/plating, -/area/engine/engineering) +/area/engine/supermatter) "dbb" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; @@ -90907,7 +90350,7 @@ pressure_checks = 1 }, /turf/open/floor/engine, -/area/engine/engineering) +/area/engine/supermatter) "dbd" = ( /obj/structure/sink/kitchen{ pixel_y = 28 @@ -91202,7 +90645,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; + icon_state = "2-8" }, /turf/open/space, /area/solar/starboard) @@ -91227,7 +90670,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; + icon_state = "2-8" }, /obj/structure/cable{ icon_state = "1-2" @@ -91304,7 +90747,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; + icon_state = "1-4" }, /obj/structure/cable{ d1 = 1; @@ -91323,7 +90766,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; + icon_state = "1-4" }, /obj/structure/cable{ d1 = 1; @@ -91526,7 +90969,7 @@ /obj/structure/cable/yellow{ d1 = 1; d2 = 4; - icon_state = "1-4"; + icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 @@ -91768,9 +91211,7 @@ /area/toxins/xenobiology) "dcC" = ( /obj/structure/chair/office/light, -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /turf/open/floor/plasteel/white, /area/toxins/xenobiology) "dcD" = ( @@ -92123,7 +91564,10 @@ "ddi" = ( /obj/structure/rack, /turf/open/floor/plating, -/area/toxins/xenobiology) +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) "ddj" = ( /turf/open/floor/plating{ icon_state = "platingdmg2" @@ -92235,7 +91679,10 @@ icon_state = "2-8" }, /turf/open/floor/plating, -/area/toxins/xenobiology) +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) "ddr" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, @@ -92258,7 +91705,10 @@ icon_state = "1-2" }, /turf/open/floor/plating, -/area/toxins/xenobiology) +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) "ddu" = ( /obj/structure/cable/yellow{ d2 = 8; @@ -92291,7 +91741,10 @@ "ddw" = ( /obj/structure/cable/yellow, /turf/open/floor/plating, -/area/toxins/xenobiology) +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) "ddx" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -92302,7 +91755,7 @@ dir = 1; initialize_directions = 11 }, -/turf/open/floor/plating, +/turf/open/floor/plasteel/white, /area/toxins/xenobiology) "ddy" = ( /turf/open/floor/plating{ @@ -92323,7 +91776,7 @@ opacity = 0; req_access_txt = "55" }, -/turf/open/floor/plating, +/turf/open/floor/plasteel/white, /area/toxins/xenobiology) "ddB" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ @@ -92358,9 +91811,7 @@ }, /area/crew_quarters/kitchen) "ddE" = ( -/obj/effect/landmark/start{ - name = "Cook" - }, +/obj/effect/landmark/start/cook, /obj/machinery/holopad, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/kitchen) @@ -92440,9 +91891,9 @@ dir = 6 }, /obj/machinery/camera{ - c_tag = "Engineering - Supermatter North"; + c_tag = "Engineering Supermatter Fore"; dir = 4; - network = list("SS13") + network = list("SS13","Engine") }, /obj/machinery/firealarm{ dir = 8; @@ -92662,7 +92113,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; + icon_state = "2-8" }, /obj/effect/turf_decal/stripes/line, /turf/open/floor/engine, @@ -92681,7 +92132,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; + icon_state = "2-8" }, /obj/effect/turf_decal/stripes/line, /turf/open/floor/engine, @@ -92767,7 +92218,7 @@ "deD" = ( /obj/machinery/status_display, /turf/closed/wall/r_wall, -/area/engine/engineering) +/area/engine/supermatter) "deI" = ( /obj/machinery/atmospherics/components/trinary/filter{ dir = 1; @@ -92832,7 +92283,7 @@ }, /obj/structure/window/reinforced/highpressure/fulltile, /turf/open/floor/plating, -/area/engine/engineering) +/area/engine/supermatter) "deT" = ( /obj/machinery/atmospherics/components/trinary/filter{ dir = 1; @@ -92861,16 +92312,16 @@ "deV" = ( /obj/structure/sign/fire, /turf/closed/wall/r_wall, -/area/engine/engineering) +/area/engine/supermatter) "deW" = ( /obj/machinery/atmospherics/pipe/simple/general/visible, /obj/effect/turf_decal/stripes/line{ dir = 10 }, /obj/machinery/camera{ - c_tag = "Engineering - Supermatter Central"; + c_tag = "Engineering Supermatter Starboard"; dir = 4; - network = list("SS13") + network = list("SS13","Engine") }, /turf/open/floor/engine, /area/engine/engineering) @@ -92885,7 +92336,7 @@ /obj/structure/reflector/single{ anchored = 1; dir = 1; - icon_state = "reflector"; + icon_state = "reflector" }, /turf/open/floor/plating, /area/engine/engineering) @@ -92896,7 +92347,7 @@ "dfa" = ( /obj/machinery/power/supermatter_shard/crystal, /turf/open/floor/engine, -/area/engine/engineering) +/area/engine/supermatter) "dfb" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 10; @@ -92905,11 +92356,11 @@ }, /obj/machinery/meter, /turf/closed/wall/r_wall, -/area/engine/engineering) +/area/engine/supermatter) "dfc" = ( /obj/structure/sign/electricshock, /turf/closed/wall/r_wall, -/area/engine/engineering) +/area/engine/supermatter) "dfd" = ( /obj/machinery/atmospherics/components/trinary/filter{ dir = 1; @@ -92935,7 +92386,7 @@ /obj/structure/reflector/double{ anchored = 1; dir = 1; - icon_state = "reflector_double"; + icon_state = "reflector_double" }, /turf/open/floor/plasteel/black, /area/engine/engineering) @@ -92943,7 +92394,7 @@ /obj/structure/reflector/single{ anchored = 1; dir = 8; - icon_state = "reflector"; + icon_state = "reflector" }, /turf/open/floor/plating, /area/engine/engineering) @@ -92968,13 +92419,13 @@ dir = 5 }, /turf/closed/wall/r_wall, -/area/engine/engineering) +/area/engine/supermatter) "dfk" = ( /obj/structure/grille, /obj/machinery/atmospherics/pipe/manifold/general/visible, /obj/structure/window/reinforced/highpressure/fulltile, /turf/open/floor/plating, -/area/engine/engineering) +/area/engine/supermatter) "dfm" = ( /obj/structure/grille, /obj/machinery/atmospherics/pipe/simple/general/visible{ @@ -92982,7 +92433,7 @@ }, /obj/structure/window/reinforced/highpressure/fulltile, /turf/open/floor/plating, -/area/engine/engineering) +/area/engine/supermatter) "dfp" = ( /obj/effect/turf_decal/bot{ dir = 1 @@ -93003,7 +92454,7 @@ d2 = 2 }, /turf/open/floor/engine, -/area/engine/engineering) +/area/engine/supermatter) "dft" = ( /obj/machinery/atmospherics/components/trinary/filter{ dir = 1; @@ -94627,9 +94078,7 @@ /obj/structure/closet/crate, /obj/item/weapon/poster/random_official, /obj/effect/spawner/lootdrop/maintenance, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -94748,7 +94197,7 @@ name = "Radiation Chamber Shutters" }, /turf/open/floor/plating, -/area/engine/engineering) +/area/engine/supermatter) "dju" = ( /obj/structure/cable{ d1 = 1; @@ -94762,12 +94211,13 @@ /turf/open/floor/plating, /area/engine/engineering) "djv" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - id = "engsm"; - name = "Radiation Chamber Shutters" +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, /turf/open/floor/plating, -/area/engine/engineering) +/area/engine/supermatter) "djw" = ( /obj/structure/cable{ d1 = 1; @@ -94792,7 +94242,7 @@ name = "Radiation Chamber Shutters" }, /turf/open/floor/plating, -/area/engine/engineering) +/area/engine/supermatter) "djy" = ( /obj/structure/cable{ d1 = 1; @@ -94834,9 +94284,7 @@ d1 = 1; d2 = 4 }, -/obj/effect/landmark{ - name = "Observer-Start" - }, +/obj/effect/landmark/observer_start, /turf/open/floor/plasteel{ icon_state = "L8" }, @@ -95591,6 +95039,357 @@ }, /turf/open/floor/mineral/titanium, /area/shuttle/escape) +"dlI" = ( +/obj/machinery/power/rad_collector{ + anchored = 1 + }, +/obj/structure/cable{ + icon_state = "0-2"; + d2 = 2 + }, +/obj/machinery/camera{ + c_tag = "Supermatter Chamber"; + dir = 4; + network = list("Engine") + }, +/turf/open/floor/engine, +/area/engine/supermatter) +"dlJ" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"dlK" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"dlL" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"dlM" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"dlN" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"dlO" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/highpressure/fulltile, +/turf/open/floor/plating, +/area/engine/supermatter) +"dlP" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"dlQ" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"dlR" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"dlS" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"dlT" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"dlU" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dlV" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dlW" = ( +/turf/open/floor/plating, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dlX" = ( +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dlY" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dlZ" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dma" = ( +/turf/open/floor/plating{ + icon_state = "platingdmg2" + }, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmb" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmc" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmd" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dme" = ( +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmf" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmg" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmh" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmi" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmj" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmk" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dml" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmm" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmn" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmo" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmp" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmq" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmr" = ( +/turf/open/floor/plating, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dms" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmt" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmu" = ( +/turf/open/floor/plating, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmv" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmw" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmx" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plating, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmy" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/obj/machinery/door/airlock/research{ + glass = 1; + name = "Slime Euthanization Chamber"; + opacity = 0; + req_access_txt = "55" + }, +/turf/open/floor/plasteel/white, +/area/toxins/xenobiology) +"dmz" = ( +/obj/machinery/door/airlock/research{ + glass = 1; + name = "Slime Euthanization Chamber"; + opacity = 0; + req_access_txt = "55" + }, +/turf/open/floor/plasteel/white, +/area/toxins/xenobiology) +"dmA" = ( +/turf/open/floor/plating, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmB" = ( +/turf/open/floor/plating, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmC" = ( +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmD" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmE" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmF" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmG" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmH" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmI" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmJ" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmK" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmL" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmM" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) +"dmN" = ( +/turf/closed/wall/r_wall, +/area/maintenance/aft{ + icon_state = "xenomaint"; + name = "Xeno Maintenance" + }) (1,1,1) = {" aaa @@ -119818,7 +119617,7 @@ aax aax abr abJ -acd +abE abE abE ade @@ -127668,10 +127467,10 @@ cRi cRi cRi cRi -cRi -cRi -cRi -cRi +dlU +dlZ +dmd +dmg aaf aaa aaa @@ -127925,18 +127724,18 @@ cSh dbs cSn cRi -dde -ddj +dlV +dma cTp -cRi -cRi -cRi -cRi -cRi -cRi -cRi -cRi -cRi +dmh +dmk +dmm +dmo +dmq +dmt +dmw +dmE +dmM aaa aaa aai @@ -128182,7 +127981,7 @@ cSg cSo cSn cRi -cTA +dlW cTn cTC cTC @@ -128191,9 +127990,9 @@ cTC cTC cTC cTC -daO +dmx bIx -cRi +dmN aaf aaf aag @@ -128706,7 +128505,7 @@ daF daJ cRi bvT -cRi +dmF cRi cRi cRi @@ -128962,8 +128761,8 @@ cSn cSn cSn cRi -bvT -cRi +dmy +dmG cZv cZv cRi @@ -129990,8 +129789,8 @@ cSn cSn daN cRi -cTA -cRi +dmz +dmH cZv dbw cRi @@ -130247,8 +130046,8 @@ daE daI daM cRi -cTA -cRi +dmA +dmI cRi cRi cRi @@ -130504,8 +130303,8 @@ cRi cRi cRi cRi -cTA -cRi +dmB +dmJ aaf aaa aaa @@ -130752,17 +130551,17 @@ cSn cSo cSg cRi -ddh +dlX ddq ddt ddt ddt ddt ddw -cTA -cTA -ddy -cRi +dmr +dmu +dmC +dmK aaf aaf aaa @@ -131010,16 +130809,16 @@ dbt cSF cRi ddi -ddr -cTB -cRi -cRi -cRi -cRi -cRi -cRi -cRi -cRi +dmb +dme +dmi +dml +dmn +dmp +dms +dmv +dmD +dmL aaf aaa aaa @@ -131266,10 +131065,10 @@ cRi cRi cRi cRi -cRi -cRi -cRi -cRi +dlY +dmc +dmf +dmj aaa aaf aaf @@ -137840,11 +137639,11 @@ aEr aFC aGZ aGZ -axY +dlJ aKG aMj aKG -axY +dlJ aQe aRv dfD @@ -138097,11 +137896,11 @@ dej aFC deC deC -axY +dlJ aKH aMk aNu -axY +dlJ dfp dfp dfE @@ -138353,13 +138152,13 @@ aCY dek der deD -axY +dlJ aJv aKI aMj dfb dfj -axY +dlJ deD dfF aTN @@ -138616,7 +138415,7 @@ dbb aMk aNv dfk -dfq +dlI djt dfG dfQ @@ -139123,7 +138922,7 @@ aBQ dee aEr aKL -djv +djt daY deS dbb @@ -139381,13 +139180,13 @@ aCY dem aFD deD -axY -axY +dlJ +dlJ deV -aCZ +dlO dfc -axY -axY +dlJ +dlJ deD dfI dfS diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index ecc1416291..2dbf89536a 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -1,11 +1,9 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aaa" = ( -/turf/open/space, +/turf/open/space/basic, /area/space) "aab" = ( -/obj/effect/landmark{ - name = "carpspawn" - }, +/obj/effect/landmark/carpspawn, /turf/open/space, /area/space) "aac" = ( @@ -776,9 +774,10 @@ tag = "icon-0-2"; icon_state = "0-2" }, -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, -/turf/open/floor/plating, +/obj/machinery/modular_computer/console/preset/command, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, /area/bridge) "abo" = ( /turf/open/floor/plasteel/vault{ @@ -942,9 +941,7 @@ icon_state = "1-4" }, /obj/machinery/holopad, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/vault, /area/bridge) "abF" = ( @@ -1203,9 +1200,7 @@ dir = 4 }, /obj/item/weapon/bedsheet/captain, -/obj/effect/landmark/start{ - name = "Captain" - }, +/obj/effect/landmark/start/captain, /turf/open/floor/plasteel/grimy, /area/crew_quarters/captain{ name = "\improper Captain's Quarters" @@ -1386,9 +1381,7 @@ dir = 8 }, /obj/item/weapon/bedsheet/hop, -/obj/effect/landmark/start{ - name = "Head of Personnel" - }, +/obj/effect/landmark/start/head_of_personnel, /turf/open/floor/wood, /area/crew_quarters/heads) "acq" = ( @@ -1437,9 +1430,7 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/landmark/start{ - name = "Head of Personnel" - }, +/obj/effect/landmark/start/head_of_personnel, /turf/open/floor/plasteel/white, /area/crew_quarters/heads) "acu" = ( @@ -1487,10 +1478,7 @@ dir = 8; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/hallway/primary/central{ @@ -1595,9 +1583,7 @@ dir = 2; on = 1 }, -/obj/effect/landmark/start{ - name = "Detective" - }, +/obj/effect/landmark/start/detective, /obj/item/weapon/bedsheet/brown, /turf/open/floor/wood, /area/security/detectives_office) @@ -1633,15 +1619,11 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/landmark/start{ - name = "Detective" - }, +/obj/effect/landmark/start/detective, /turf/open/floor/plasteel/white, /area/security/detectives_office) "acN" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, @@ -2083,9 +2065,7 @@ /obj/effect/decal/cleanable/dirt, /obj/item/clothing/suit/space/orange, /obj/item/clothing/head/helmet/space/orange, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/neutral, /area/ruin/unpowered{ name = "Asteroid" @@ -2157,10 +2137,7 @@ dir = 2; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/hallway/primary/central{ name = "Primary Hallway" @@ -2180,9 +2157,7 @@ req_access_txt = "0"; use_power = 0 }, -/obj/effect/landmark/start{ - name = "Captain" - }, +/obj/effect/landmark/start/captain, /turf/open/floor/plasteel/white, /area/crew_quarters/captain{ name = "\improper Captain's Quarters" @@ -2813,9 +2788,7 @@ pixel_y = -40; req_access_txt = "16" }, -/obj/effect/landmark/start{ - name = "AI" - }, +/obj/effect/landmark/start/ai, /obj/structure/cable/white{ tag = "icon-1-4"; icon_state = "1-4" @@ -3480,9 +3453,7 @@ /area/crew_quarters/heads) "afB" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/hallway/primary/central{ name = "Primary Hallway" @@ -3507,9 +3478,7 @@ /turf/open/floor/plasteel/neutral, /area/quartermaster/storage) "afF" = ( -/obj/effect/landmark/start{ - name = "Cargo Technician" - }, +/obj/effect/landmark/start/cargo_technician, /turf/open/floor/plasteel/neutral, /area/quartermaster/storage) "afG" = ( @@ -3958,9 +3927,7 @@ pixel_x = 42; pixel_y = -42 }, -/obj/effect/landmark/start{ - name = "Head of Personnel" - }, +/obj/effect/landmark/start/head_of_personnel, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -4159,9 +4126,7 @@ /obj/structure/chair/office/dark{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Detective" - }, +/obj/effect/landmark/start/detective, /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -4243,9 +4208,7 @@ icon_state = "intact"; dir = 4 }, -/obj/effect/landmark/start{ - name = "Captain" - }, +/obj/effect/landmark/start/captain, /turf/open/floor/carpet, /area/crew_quarters/captain{ name = "\improper Captain's Quarters" @@ -4406,9 +4369,7 @@ tag = "icon-2-4"; icon_state = "2-4" }, -/obj/effect/landmark/start{ - name = "Cyborg" - }, +/obj/effect/landmark/start/cyborg, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -6148,9 +6109,7 @@ icon_state = "manifold"; dir = 4 }, -/obj/effect/landmark/start{ - name = "Cargo Technician" - }, +/obj/effect/landmark/start/cargo_technician, /turf/open/floor/plasteel/neutral, /area/quartermaster/storage) "ajM" = ( @@ -6387,9 +6346,7 @@ name = "Primary Hallway" }) "akd" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/structure/cable/white{ tag = "icon-1-2"; icon_state = "1-2" @@ -6733,9 +6690,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/structure/cable/white{ tag = "icon-1-4"; icon_state = "1-4" @@ -7511,9 +7466,7 @@ tag = "icon-2-4"; icon_state = "2-4" }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/neutral, /area/quartermaster/storage) "alF" = ( @@ -7538,9 +7491,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/old, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plating, /area/ruin/unpowered{ name = "Asteroid" @@ -7627,9 +7578,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/neutral/side{ dir = 4 }, @@ -8087,9 +8036,7 @@ /area/quartermaster/storage) "amw" = ( /obj/structure/chair/office/dark, -/obj/effect/landmark/start{ - name = "Cargo Technician" - }, +/obj/effect/landmark/start/cargo_technician, /turf/open/floor/plasteel/brown, /area/quartermaster/storage) "amx" = ( @@ -8748,9 +8695,7 @@ pixel_x = 38; pixel_y = 38 }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/red/side{ dir = 4 @@ -9213,9 +9158,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Shaft Miner" - }, +/obj/effect/landmark/start/shaft_miner, /turf/open/floor/plasteel/loadingarea{ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; dir = 8 @@ -9239,9 +9182,7 @@ tag = "icon-1-2"; icon_state = "1-2" }, -/obj/effect/landmark/start{ - name = "Shaft Miner" - }, +/obj/effect/landmark/start/shaft_miner, /turf/open/floor/plasteel/brown{ tag = "icon-brown (NORTHEAST)"; icon_state = "brown"; @@ -9438,9 +9379,7 @@ pixel_x = -32 }, /obj/machinery/light/small, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plating, /area/hallway/primary/central{ name = "Primary Hallway" @@ -9456,9 +9395,7 @@ pixel_x = -32 }, /obj/machinery/light/small, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/hallway/primary/central{ @@ -9475,9 +9412,7 @@ pixel_x = -32 }, /obj/machinery/light/small, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/hallway/primary/central{ @@ -9785,9 +9720,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/structure/cable/white{ tag = "icon-1-2"; icon_state = "1-2" @@ -10121,9 +10054,7 @@ /turf/open/floor/plasteel, /area/security/brig) "apz" = ( -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ tag = "icon-manifold (WEST)"; icon_state = "manifold"; @@ -10650,9 +10581,7 @@ /obj/structure/chair{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/hallway/primary/central{ @@ -11556,9 +11485,7 @@ tag = "icon-1-4"; icon_state = "1-4" }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -11636,9 +11563,7 @@ tag = "icon-1-4"; icon_state = "1-4" }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel/red/corner{ dir = 1 @@ -11731,9 +11656,7 @@ tag = "icon-2-8"; icon_state = "2-8" }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; @@ -11779,9 +11702,7 @@ }, /area/storage/primary) "arR" = ( -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/yellow/side{ dir = 1 }, @@ -12783,10 +12704,7 @@ dir = 8; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, @@ -13150,9 +13068,7 @@ name = "Central Port Maintenance" }) "atW" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/structure/cable/white{ tag = "icon-1-2"; icon_state = "1-2" @@ -13334,9 +13250,7 @@ /turf/closed/wall, /area/crew_quarters/bar) "aun" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ tag = "icon-1-2"; @@ -13586,9 +13500,7 @@ icon_state = "4-8" }, /obj/effect/decal/cleanable/blood/splatter, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plating, /area/hallway/primary/central{ name = "Primary Hallway" @@ -13610,9 +13522,7 @@ name = "Primary Hallway" }) "auL" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/structure/cable/white{ tag = "icon-4-8"; icon_state = "4-8" @@ -13759,9 +13669,7 @@ /turf/open/floor/plasteel/yellow/side, /area/storage/primary) "auV" = ( -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1; @@ -13939,9 +13847,7 @@ /turf/open/floor/plasteel/black, /area/crew_quarters/bar) "avp" = ( -/obj/effect/landmark/start{ - name = "Bartender" - }, +/obj/effect/landmark/start/bartender, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -14076,9 +13982,7 @@ /area/atmos) "avB" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible, -/obj/effect/landmark/start{ - name = "Atmospheric Technician" - }, +/obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/plasteel/neutral, /area/atmos) "avC" = ( @@ -14470,9 +14374,7 @@ /area/crew_quarters/theatre) "awh" = ( /obj/structure/chair/comfy/brown, -/obj/effect/landmark/start{ - name = "Clown" - }, +/obj/effect/landmark/start/clown, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ tag = "icon-1-2"; @@ -14501,9 +14403,7 @@ }) "awk" = ( /obj/structure/chair/stool, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable/white{ tag = "icon-1-2"; @@ -14562,9 +14462,7 @@ }, /area/crew_quarters/bar) "awq" = ( -/obj/effect/landmark/start{ - name = "Bartender" - }, +/obj/effect/landmark/start/bartender, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/structure/cable/white{ tag = "icon-2-4"; @@ -15409,9 +15307,7 @@ /obj/structure/chair/comfy/brown{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Mime" - }, +/obj/effect/landmark/start/mime, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ tag = "icon-1-2"; @@ -15773,9 +15669,7 @@ }, /area/crew_quarters/sleep) "ayw" = ( -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/neutral/corner{ dir = 1 }, @@ -16509,9 +16403,7 @@ name = "Central Starboard Maintenance" }) "azP" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -16783,9 +16675,7 @@ /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Atmospheric Technician" - }, +/obj/effect/landmark/start/atmospheric_technician, /obj/structure/cable/white{ tag = "icon-1-4"; icon_state = "1-4" @@ -16909,9 +16799,7 @@ /obj/structure/chair/office/dark{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Atmospheric Technician" - }, +/obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/plasteel/neutral, /area/atmos) "aAB" = ( @@ -17076,9 +16964,7 @@ }, /obj/structure/table/wood, /obj/item/weapon/kitchen/fork, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/structure/cable/white{ tag = "icon-4-8"; icon_state = "4-8" @@ -17547,9 +17433,7 @@ /area/atmos) "aBH" = ( /obj/structure/chair/office/dark, -/obj/effect/landmark/start{ - name = "Atmospheric Technician" - }, +/obj/effect/landmark/start/atmospheric_technician, /obj/structure/cable/white{ tag = "icon-1-2"; icon_state = "1-2" @@ -17610,9 +17494,7 @@ name = "Primary Hallway" }) "aBL" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -18312,9 +18194,7 @@ }, /area/crew_quarters/theatre) "aCQ" = ( -/obj/effect/landmark/start{ - name = "Clown" - }, +/obj/effect/landmark/start/clown, /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -18709,9 +18589,7 @@ }, /area/crew_quarters/sleep) "aDE" = ( -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -18769,9 +18647,7 @@ }, /area/crew_quarters/theatre) "aDK" = ( -/obj/effect/landmark/start{ - name = "Mime" - }, +/obj/effect/landmark/start/mime, /turf/open/floor/plasteel/grimy, /area/crew_quarters/theatre) "aDL" = ( @@ -18896,9 +18772,7 @@ /turf/open/floor/plasteel/red, /area/crew_quarters/kitchen) "aDU" = ( -/obj/effect/landmark/start{ - name = "Chef" - }, +/obj/effect/landmark/start/cook, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ tag = "icon-manifold (NORTH)"; icon_state = "manifold"; @@ -19257,9 +19131,7 @@ on = 1; scrub_Toxins = 0 }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/engine/engineering) @@ -19564,9 +19436,7 @@ /turf/open/floor/plasteel, /area/crew_quarters/kitchen) "aEZ" = ( -/obj/effect/landmark/start{ - name = "Chef" - }, +/obj/effect/landmark/start/cook, /turf/open/floor/plasteel/red, /area/crew_quarters/kitchen) "aFa" = ( @@ -19671,9 +19541,7 @@ tag = "icon-2-8"; icon_state = "2-8" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/starboard{ name = "Central Starboard Maintenance" @@ -20173,9 +20041,7 @@ /turf/open/floor/plasteel/red, /area/crew_quarters/kitchen) "aFV" = ( -/obj/effect/landmark/start{ - name = "Chef" - }, +/obj/effect/landmark/start/cook, /turf/open/floor/plasteel/white, /area/crew_quarters/kitchen) "aFW" = ( @@ -20199,9 +20065,7 @@ }) "aFY" = ( /obj/machinery/holopad, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ tag = "icon-1-2"; @@ -20736,9 +20600,7 @@ }) "aGP" = ( /obj/structure/chair/stool, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ tag = "icon-manifold (EAST)"; icon_state = "manifold"; @@ -21002,6 +20864,12 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/camera{ + c_tag = "Engineering Fore"; + dir = 2; + network = list("SS13","Engine"); + pixel_x = 23 + }, /turf/open/floor/plasteel, /area/engine/engineering) "aHo" = ( @@ -21404,9 +21272,7 @@ name = "Central Port Maintenance" }) "aHK" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -21794,9 +21660,7 @@ pixel_x = 0; tag = "" }, -/obj/effect/landmark/start{ - name = "Station Engineer" - }, +/obj/effect/landmark/start/station_engineer, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/engine/engineering) @@ -21875,20 +21739,18 @@ /obj/structure/chair/office/dark{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Station Engineer" - }, +/obj/effect/landmark/start/station_engineer, /obj/structure/cable/white{ tag = "icon-1-2"; icon_state = "1-2" }, /obj/effect/turf_decal/bot, +/obj/structure/cable/white{ + icon_state = "2-4" + }, /turf/open/floor/plasteel, /area/engine/engineering) "aIx" = ( -/obj/machinery/computer/monitor{ - name = "Engineering Power Monitoring Console" - }, /obj/machinery/light_switch{ pixel_x = 38; pixel_y = 24 @@ -21901,6 +21763,7 @@ req_access_txt = "10" }, /obj/effect/turf_decal/bot, +/obj/machinery/modular_computer/console/preset/engineering, /turf/open/floor/plasteel, /area/engine/engineering) "aIy" = ( @@ -22450,11 +22313,11 @@ "aJt" = ( /obj/structure/sign/radiation, /turf/closed/wall/r_wall, -/area/engine/engineering) +/area/engine/supermatter) "aJu" = ( /obj/machinery/atmospherics/pipe/simple/general/visible, /turf/closed/wall/r_wall, -/area/engine/engineering) +/area/engine/supermatter) "aJv" = ( /obj/machinery/door/airlock/glass_atmos{ name = "Supermatter Chamber"; @@ -22462,7 +22325,7 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, -/area/engine/engineering) +/area/engine/supermatter) "aJw" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1; @@ -22598,9 +22461,7 @@ /obj/structure/chair/office/dark{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Station Engineer" - }, +/obj/effect/landmark/start/station_engineer, /turf/open/floor/plasteel/yellow, /area/engine/engineering) "aJH" = ( @@ -22734,9 +22595,7 @@ }, /area/hydroponics) "aJQ" = ( -/obj/effect/landmark/start{ - name = "Botanist" - }, +/obj/effect/landmark/start/botanist, /turf/open/floor/plasteel/greenblue/side{ tag = "icon-greenblue (NORTH)"; icon_state = "greenblue"; @@ -22779,9 +22638,7 @@ /obj/structure/chair/office/dark{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Botanist" - }, +/obj/effect/landmark/start/botanist, /turf/open/floor/plasteel/greenblue, /area/hydroponics) "aJV" = ( @@ -23170,12 +23027,12 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, -/area/engine/engineering) +/area/engine/supermatter) "aKB" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, -/area/engine/engineering) +/area/engine/supermatter) "aKC" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 2; @@ -23184,11 +23041,11 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, -/area/engine/engineering) +/area/engine/supermatter) "aKD" = ( /obj/structure/sign/fire, /turf/closed/wall/r_wall, -/area/engine/engineering) +/area/engine/supermatter) "aKE" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 @@ -23373,9 +23230,7 @@ /turf/open/floor/plasteel, /area/janitor) "aKQ" = ( -/obj/effect/landmark/start{ - name = "Janitor" - }, +/obj/effect/landmark/start/janitor, /obj/structure/cable/white{ tag = "icon-1-2"; icon_state = "1-2" @@ -23875,45 +23730,45 @@ "aLO" = ( /obj/machinery/ai_status_display, /turf/closed/wall/r_wall, -/area/engine/engineering) +/area/engine/supermatter) "aLP" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ icon_state = "intact"; dir = 6 }, /turf/closed/wall/r_wall, -/area/engine/engineering) +/area/engine/supermatter) "aLQ" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 9 }, /turf/closed/wall/r_wall, -/area/engine/engineering) +/area/engine/supermatter) "aLR" = ( /obj/machinery/door/airlock/glass_atmos{ name = "Supermatter Chamber"; req_access_txt = "24" }, /turf/open/floor/engine, -/area/engine/engineering) +/area/engine/supermatter) "aLS" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 5 }, /turf/closed/wall/r_wall, -/area/engine/engineering) +/area/engine/supermatter) "aLT" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 10 }, /turf/closed/wall/r_wall, -/area/engine/engineering) +/area/engine/supermatter) "aLU" = ( /obj/machinery/status_display, /turf/closed/wall/r_wall, -/area/engine/engineering) +/area/engine/supermatter) "aLV" = ( /obj/machinery/atmospherics/pipe/simple/general/visible, /obj/structure/cable{ @@ -24017,9 +23872,7 @@ }, /area/janitor) "aMg" = ( -/obj/effect/landmark/start{ - name = "Janitor" - }, +/obj/effect/landmark/start/janitor, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ tag = "icon-manifold (WEST)"; icon_state = "manifold"; @@ -24098,9 +23951,7 @@ /turf/open/floor/plasteel/greenblue/side, /area/hydroponics) "aMn" = ( -/obj/effect/landmark/start{ - name = "Botanist" - }, +/obj/effect/landmark/start/botanist, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; layer = 2.4; @@ -24267,9 +24118,7 @@ dir = 1; on = 1 }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/neutral, /area/hallway/secondary/exit{ name = "\improper Departure Lounge" @@ -24398,9 +24247,9 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/camera{ - c_tag = "Engineering West"; + c_tag = "Engineering Port"; dir = 4; - network = list("SS13") + network = list("SS13","Engine") }, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -24442,7 +24291,7 @@ dir = 4 }, /turf/open/floor/plating, -/area/engine/engineering) +/area/engine/supermatter) "aMR" = ( /obj/machinery/power/rad_collector{ anchored = 1 @@ -24452,7 +24301,7 @@ icon_state = "0-8" }, /turf/open/floor/circuit/green, -/area/engine/engineering) +/area/engine/supermatter) "aMS" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, @@ -24460,7 +24309,7 @@ dir = 8 }, /turf/open/floor/plating, -/area/engine/engineering) +/area/engine/supermatter) "aMT" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; @@ -24468,17 +24317,17 @@ scrub_Toxins = 0 }, /turf/open/floor/engine, -/area/engine/engineering) +/area/engine/supermatter) "aMU" = ( /turf/open/floor/engine, -/area/engine/engineering) +/area/engine/supermatter) "aMV" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 }, /turf/open/floor/engine, -/area/engine/engineering) +/area/engine/supermatter) "aMW" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, @@ -24487,7 +24336,7 @@ dir = 4 }, /turf/open/floor/plating, -/area/engine/engineering) +/area/engine/supermatter) "aMX" = ( /obj/machinery/power/rad_collector{ anchored = 1 @@ -24497,7 +24346,7 @@ d2 = 4 }, /turf/open/floor/circuit/green, -/area/engine/engineering) +/area/engine/supermatter) "aMY" = ( /obj/structure/cable{ d1 = 4; @@ -24514,7 +24363,7 @@ dir = 8 }, /turf/open/floor/plating, -/area/engine/engineering) +/area/engine/supermatter) "aMZ" = ( /obj/machinery/atmospherics/pipe/simple/general/visible, /obj/structure/cable{ @@ -24588,6 +24437,13 @@ pixel_y = -2 }, /obj/effect/turf_decal/delivery, +/obj/machinery/computer/security/telescreen{ + desc = "Used for watching the Engine."; + dir = 1; + name = "Engine Monitor"; + network = list("Engine"); + pixel_y = -32 + }, /turf/open/floor/plasteel, /area/engine/engineering) "aNe" = ( @@ -24852,9 +24708,7 @@ name = "Central Starboard Maintenance" }) "aNB" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -25176,7 +25030,7 @@ name = "supermatter crystal" }, /turf/open/floor/engine, -/area/engine/engineering) +/area/engine/supermatter) "aOb" = ( /obj/structure/cable{ d1 = 4; @@ -25194,7 +25048,7 @@ dir = 8 }, /turf/open/floor/plating, -/area/engine/engineering) +/area/engine/supermatter) "aOc" = ( /obj/machinery/atmospherics/pipe/simple/general/visible, /obj/structure/cable{ @@ -25487,7 +25341,7 @@ dir = 4 }, /turf/open/floor/plating, -/area/engine/engineering) +/area/engine/supermatter) "aOC" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, @@ -25495,7 +25349,7 @@ dir = 5 }, /turf/open/floor/plating, -/area/engine/engineering) +/area/engine/supermatter) "aOD" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, @@ -25503,7 +25357,7 @@ dir = 9 }, /turf/open/floor/plating, -/area/engine/engineering) +/area/engine/supermatter) "aOE" = ( /obj/structure/cable{ d1 = 4; @@ -25519,7 +25373,7 @@ dir = 8 }, /turf/open/floor/plating, -/area/engine/engineering) +/area/engine/supermatter) "aOF" = ( /obj/machinery/atmospherics/pipe/simple/general/visible, /obj/structure/cable{ @@ -25751,9 +25605,7 @@ }) "aOU" = ( /obj/machinery/door/firedoor, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/structure/cable/white{ tag = "icon-4-8"; @@ -26375,7 +26227,7 @@ "aPK" = ( /obj/structure/sign/electricshock, /turf/closed/wall/r_wall, -/area/engine/engineering) +/area/engine/supermatter) "aPL" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, @@ -26744,15 +26596,11 @@ }, /area/hallway/primary/central) "aQp" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/effect/landmark{ - name = "Observer-Start" - }, +/obj/effect/landmark/observer_start, /turf/open/floor/plasteel{ icon_state = "L8" }, @@ -26887,18 +26735,13 @@ /obj/structure/chair/office/dark{ dir = 4 }, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /obj/effect/decal/cleanable/blood/old, /turf/open/floor/wood, /area/maintenance/starboard) "aQD" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/components/unary/vent_pump{ on = 1 }, @@ -27010,8 +26853,9 @@ }, /obj/effect/decal/cleanable/dirt, /obj/machinery/camera{ - c_tag = "Engineering Center"; + c_tag = "Engineering Aft"; dir = 2; + network = list("SS13","Engine"); pixel_x = 23 }, /turf/open/floor/plasteel/vault{ @@ -27526,9 +27370,7 @@ /turf/open/floor/plasteel/neutral, /area/engine/engineering) "aRO" = ( -/obj/effect/landmark/start{ - name = "Station Engineer" - }, +/obj/effect/landmark/start/station_engineer, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/general/visible{ @@ -27677,9 +27519,7 @@ /area/library) "aSe" = ( /obj/structure/bodycontainer/morgue, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /obj/effect/decal/cleanable/cobweb, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/vault{ @@ -27767,9 +27607,7 @@ /obj/structure/chair/office/light{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Chemist" - }, +/obj/effect/landmark/start/chemist, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/medical/chemistry) @@ -27865,9 +27703,7 @@ /obj/structure/chair/office/light{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /turf/open/floor/plasteel/whitepurple/corner{ dir = 1 }, @@ -28228,9 +28064,7 @@ /obj/structure/chair/office/dark{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/black, /area/library) "aTd" = ( @@ -28281,10 +28115,7 @@ /obj/structure/chair/office/dark{ dir = 4 }, -/obj/effect/landmark/start{ - dir = 4; - name = "Librarian" - }, +/obj/effect/landmark/start/librarian, /turf/open/floor/plasteel/black, /area/library) "aTj" = ( @@ -28399,9 +28230,7 @@ /obj/structure/chair/office/light{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Chemist" - }, +/obj/effect/landmark/start/chemist, /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -28461,9 +28290,7 @@ /area/hallway/primary/central) "aTB" = ( /obj/structure/chair/comfy/brown, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/grimy, /area/hallway/primary/central) "aTC" = ( @@ -28504,9 +28331,7 @@ /obj/structure/chair/office/light{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /turf/open/floor/plasteel/whitepurple/corner{ dir = 1 }, @@ -28649,9 +28474,7 @@ tag = "icon-4-8"; icon_state = "4-8" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/maintenance/starboard) @@ -28746,9 +28569,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plasteel/neutral/corner, /area/maintenance/fpmaint2{ name = "Port Maintenance" @@ -28833,9 +28654,7 @@ /area/library) "aUk" = ( /obj/structure/bodycontainer/morgue, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /obj/effect/decal/cleanable/dirt, /obj/item/device/radio/intercom{ name = "Station Intercom"; @@ -29112,10 +28931,7 @@ layer = 2.4; on = 1 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/wood{ icon_state = "wood-broken5" }, @@ -29256,9 +29072,7 @@ /area/library) "aVc" = ( /obj/structure/bodycontainer/morgue, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /obj/machinery/light{ dir = 8 }, @@ -29319,9 +29133,7 @@ /area/medical/medbay3) "aVh" = ( /obj/machinery/holopad, -/obj/effect/landmark/start{ - name = "Medical Doctor" - }, +/obj/effect/landmark/start/medical_doctor, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ tag = "icon-manifold (EAST)"; icon_state = "manifold"; @@ -29350,9 +29162,7 @@ /turf/open/floor/plasteel, /area/medical/chemistry) "aVk" = ( -/obj/effect/landmark/start{ - name = "Chemist" - }, +/obj/effect/landmark/start/chemist, /turf/open/floor/plasteel/whiteyellow/corner{ tag = "icon-whiteyellowcorner (WEST)"; icon_state = "whiteyellowcorner"; @@ -29448,9 +29258,7 @@ /turf/open/floor/plasteel, /area/toxins/lab) "aVu" = ( -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /obj/machinery/atmospherics/components/unary/vent_pump{ on = 1 }, @@ -30058,10 +29866,7 @@ }, /area/library) "aWB" = ( -/obj/effect/landmark/start{ - dir = 4; - name = "Librarian" - }, +/obj/effect/landmark/start/librarian, /obj/structure/chair/office/dark{ dir = 4 }, @@ -30106,9 +29911,7 @@ /area/library) "aWH" = ( /obj/structure/bodycontainer/morgue, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /obj/effect/decal/cleanable/dirt, /obj/machinery/power/apc{ dir = 2; @@ -30208,9 +30011,7 @@ buildstackamount = 0; dir = 1 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/machinery/airalarm{ dir = 1; icon_state = "alarm0"; @@ -30636,9 +30437,7 @@ tag = "icon-1-4"; icon_state = "1-4" }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/whitepurple/corner{ dir = 1 }, @@ -31206,10 +31005,7 @@ /turf/open/floor/plasteel/grimy, /area/library) "aYx" = ( -/obj/effect/landmark/start{ - dir = 4; - name = "Librarian" - }, +/obj/effect/landmark/start/librarian, /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1; @@ -31355,9 +31151,7 @@ /turf/open/floor/plasteel, /area/medical/medbay3) "aYH" = ( -/obj/effect/landmark/start{ - name = "Medical Doctor" - }, +/obj/effect/landmark/start/medical_doctor, /turf/open/floor/plasteel/cmo, /area/medical/medbay3) "aYI" = ( @@ -31891,9 +31685,7 @@ tag = "icon-2-4"; icon_state = "2-4" }, -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/blue, /area/medical/medbay3) "aZK" = ( @@ -31909,9 +31701,7 @@ /turf/open/floor/plasteel, /area/medical/medbay3) "aZL" = ( -/obj/effect/landmark/start{ - name = "Medical Doctor" - }, +/obj/effect/landmark/start/medical_doctor, /obj/structure/cable/white{ tag = "icon-4-8"; icon_state = "4-8" @@ -32024,9 +31814,7 @@ "aZU" = ( /obj/machinery/recharge_station, /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start{ - name = "Cyborg" - }, +/obj/effect/landmark/start/cyborg, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm{ @@ -32052,9 +31840,7 @@ "aZV" = ( /obj/machinery/recharge_station, /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start{ - name = "Cyborg" - }, +/obj/effect/landmark/start/cyborg, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, @@ -32238,10 +32024,7 @@ name = "Port Maintenance" }) "bal" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; layer = 2.4; @@ -32714,9 +32497,7 @@ /area/assembly/robotics) "baZ" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start{ - name = "Roboticist" - }, +/obj/effect/landmark/start/roboticist, /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -32804,9 +32585,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/fpmaint2{ name = "Port Maintenance" @@ -32870,9 +32649,7 @@ }) "bbm" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/bar, /area/maintenance/fpmaint2{ name = "Port Maintenance" @@ -33173,9 +32950,7 @@ /turf/open/floor/plasteel, /area/assembly/robotics) "bbL" = ( -/obj/effect/landmark/start{ - name = "Roboticist" - }, +/obj/effect/landmark/start/roboticist, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -33213,9 +32988,7 @@ tag = "icon-1-2"; icon_state = "1-2" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/maintenance/starboard) @@ -33733,9 +33506,7 @@ icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/maintenance/fpmaint2{ @@ -33781,9 +33552,7 @@ }, /area/medical/medbay3) "bcV" = ( -/obj/effect/landmark/start{ - name = "Medical Doctor" - }, +/obj/effect/landmark/start/medical_doctor, /turf/open/floor/plasteel/neutral, /area/medical/medbay3) "bcW" = ( @@ -33842,9 +33611,7 @@ /obj/structure/chair/office/light{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Medical Doctor" - }, +/obj/effect/landmark/start/medical_doctor, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -34110,9 +33877,7 @@ }, /area/assembly/robotics) "bdx" = ( -/obj/effect/landmark/start{ - name = "Roboticist" - }, +/obj/effect/landmark/start/roboticist, /turf/open/floor/plasteel/whitepurple/corner{ dir = 4 }, @@ -34158,10 +33923,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/old, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -34190,9 +33952,7 @@ }) "bdE" = ( /obj/structure/chair/stool/bar, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/wood{ icon_state = "wood-broken" }, @@ -34210,9 +33970,7 @@ }) "bdG" = ( /obj/structure/chair/stool/bar, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/wood{ tag = "icon-wood-broken2"; icon_state = "wood-broken2" @@ -34270,9 +34028,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -34291,10 +34047,7 @@ name = "Port Maintenance" }) "bdM" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; on = 1 @@ -35284,9 +35037,7 @@ tag = "icon-4-8"; icon_state = "4-8" }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/starboard) "bfl" = ( @@ -35541,9 +35292,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plasteel/neutral, /area/maintenance/fpmaint2{ name = "Port Maintenance" @@ -35831,9 +35580,7 @@ pixel_x = 0; pixel_y = 25 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable/white{ tag = "icon-0-2"; @@ -35941,9 +35688,7 @@ }, /area/hallway/primary/central) "bgh" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -36513,9 +36258,7 @@ /turf/open/floor/circuit/green, /area/toxins/xenobiology) "bhh" = ( -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/circuit/green, /area/toxins/xenobiology) "bhi" = ( @@ -36549,10 +36292,7 @@ /area/maintenance/starboard) "bhm" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -37352,9 +37092,7 @@ /obj/machinery/newscaster{ pixel_x = -32 }, -/obj/effect/landmark/start{ - name = "Chaplain" - }, +/obj/effect/landmark/start/chaplain, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; layer = 2.4; @@ -37807,9 +37545,7 @@ }, /area/toxins/xenobiology) "bjt" = ( -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /turf/open/floor/plasteel/whitepurple/side{ dir = 5; initial_gas_mix = "o2=22;n2=82;TEMP=293.15"; @@ -37871,9 +37607,7 @@ /obj/structure/chair/office/dark{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Chaplain" - }, +/obj/effect/landmark/start/chaplain, /turf/open/floor/plasteel/grimy, /area/chapel/main) "bjA" = ( @@ -37917,9 +37651,7 @@ /area/toxins/xenobiology) "bjE" = ( /obj/structure/chair/office/light, -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /obj/structure/cable/white{ tag = "icon-1-2"; icon_state = "1-2" @@ -38507,9 +38239,7 @@ /obj/structure/chair{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/hallway/secondary/entry{ @@ -38594,9 +38324,7 @@ }, /area/shuttle/arrival) "bkL" = ( -/obj/effect/landmark{ - name = "Observer-Start" - }, +/obj/effect/landmark/observer_start, /turf/open/floor/plasteel/neutral, /area/shuttle/arrival) "bkM" = ( @@ -38866,9 +38594,9 @@ }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/camera{ - c_tag = "Engineering East"; + c_tag = "Engineering Starboard"; dir = 8; - network = list("SS13"); + network = list("SS13","Engine"); pixel_x = 0; pixel_y = 0 }, @@ -40822,9 +40550,7 @@ /obj/structure/chair{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -41953,6 +41679,58 @@ temperature = 80 }, /area/tcommsat/server) +"buV" = ( +/obj/machinery/power/rad_collector{ + anchored = 1 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/camera{ + c_tag = "Engineering Supermatter Chamber"; + dir = 2; + network = list("SS13","Engine"); + pixel_x = 23 + }, +/turf/open/floor/circuit/green, +/area/engine/supermatter) +"buW" = ( +/obj/structure/cable/white{ + tag = "icon-0-2"; + icon_state = "0-2" + }, +/obj/machinery/modular_computer/console/preset/research, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/bridge) +"buX" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"buY" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"buZ" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"bva" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"bvb" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"bvc" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating, +/area/engine/supermatter) +"bvd" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"bve" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) (1,1,1) = {" aaa @@ -70603,7 +70381,7 @@ aLH aMK aNU aOw -buD +buC aPG aRB aPG @@ -71117,15 +70895,15 @@ aLJ aMM aNW aOx -buE +buC aPG aRB aPG buG buI -buM +buK aRB -buT +buR aMJ aad aad @@ -71374,7 +71152,7 @@ aLK aMJ aNX aOy -buF +buC aPG aRE aSN @@ -72655,11 +72433,11 @@ aHl aIi aJs aKz -aEt +buY +buV aMR aMR -aMR -aEt +bva aQL aRI aSS @@ -72911,12 +72689,12 @@ aGj aHm aIj aJt -aEt +buX aLP aMS aMS aOC -aEt +bvb aQM aRJ aST @@ -73430,7 +73208,7 @@ aLR aMU aOa aMU -aPL +bvc aQO aRL aSV @@ -73944,7 +73722,7 @@ aLT aMW aMW aOD -aEt +bvd aQQ aRN aSX @@ -74197,11 +73975,11 @@ aHr aIo aJw aKE -aEt +buZ aMX aMX aMX -aEt +bve aQR aRO aSY @@ -84180,7 +83958,7 @@ aav aaH aaQ abb -abn +buW abF ack adc diff --git a/_maps/map_files/OmegaStation/job_changes.dm b/_maps/map_files/OmegaStation/job_changes.dm index 1aa52e6eac..dc6a461432 100644 --- a/_maps/map_files/OmegaStation/job_changes.dm +++ b/_maps/map_files/OmegaStation/job_changes.dm @@ -38,8 +38,8 @@ MAP_JOB_CHECK total_positions = 3 spawn_positions = 3 - access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_maint_tunnels, access_morgue, access_weapons, access_forensics_lockers) - minimal_access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_maint_tunnels, access_morgue, access_weapons, access_forensics_lockers) + access = list(GLOB.access_security, GLOB.access_sec_doors, GLOB.access_brig, GLOB.access_armory, GLOB.access_court, GLOB.access_maint_tunnels, GLOB.access_morgue, GLOB.access_weapons, GLOB.access_forensics_lockers) + minimal_access = list(GLOB.access_security, GLOB.access_sec_doors, GLOB.access_brig, GLOB.access_armory, GLOB.access_court, GLOB.access_maint_tunnels, GLOB.access_morgue, GLOB.access_weapons, GLOB.access_forensics_lockers) /datum/outfit/job/officer/New() ..() @@ -49,8 +49,8 @@ /datum/job/detective/New() ..() MAP_JOB_CHECK - access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_maint_tunnels, access_morgue, access_weapons, access_forensics_lockers) - minimal_access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_maint_tunnels, access_morgue, access_weapons, access_forensics_lockers) + access = list(GLOB.access_security, GLOB.access_sec_doors, GLOB.access_brig, GLOB.access_armory, GLOB.access_court, GLOB.access_maint_tunnels, GLOB.access_morgue, GLOB.access_weapons, GLOB.access_forensics_lockers) + minimal_access = list(GLOB.access_security, GLOB.access_sec_doors, GLOB.access_brig, GLOB.access_armory, GLOB.access_court, GLOB.access_maint_tunnels, GLOB.access_morgue, GLOB.access_weapons, GLOB.access_forensics_lockers) /datum/outfit/job/detective/New() ..() @@ -65,8 +65,8 @@ selection_color = "#ffffff" total_positions = 3 spawn_positions = 3 - access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics) - minimal_access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics) + access = list(GLOB.access_medical, GLOB.access_morgue, GLOB.access_surgery, GLOB.access_chemistry, GLOB.access_virology, GLOB.access_genetics) + minimal_access = list(GLOB.access_medical, GLOB.access_morgue, GLOB.access_surgery, GLOB.access_chemistry, GLOB.access_virology, GLOB.access_genetics) //Engineering @@ -75,8 +75,8 @@ MAP_JOB_CHECK total_positions = 2 spawn_positions = 2 - access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics, access_tcomsat) - minimal_access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics, access_tcomsat) + access = list(GLOB.access_eva, GLOB.access_engine, GLOB.access_engine_equip, GLOB.access_tech_storage, GLOB.access_maint_tunnels, GLOB.access_external_airlocks, GLOB.access_construction, GLOB.access_atmospherics, GLOB.access_tcomsat) + minimal_access = list(GLOB.access_eva, GLOB.access_engine, GLOB.access_engine_equip, GLOB.access_tech_storage, GLOB.access_maint_tunnels, GLOB.access_external_airlocks, GLOB.access_construction, GLOB.access_atmospherics, GLOB.access_tcomsat) /datum/outfit/job/engineer/New() ..() @@ -96,8 +96,8 @@ MAP_JOB_CHECK total_positions = 3 spawn_positions = 3 - access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_mineral_storeroom, access_tech_storage) - minimal_access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_mineral_storeroom, access_tech_storage) + access = list(GLOB.access_robotics, GLOB.access_tox, GLOB.access_tox_storage, GLOB.access_research, GLOB.access_xenobiology, GLOB.access_mineral_storeroom, GLOB.access_tech_storage) + minimal_access = list(GLOB.access_robotics, GLOB.access_tox, GLOB.access_tox_storage, GLOB.access_research, GLOB.access_xenobiology, GLOB.access_mineral_storeroom, GLOB.access_tech_storage) //Cargo @@ -106,16 +106,16 @@ MAP_JOB_CHECK total_positions = 2 spawn_positions = 2 - access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_mineral_storeroom) - minimal_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_mineral_storeroom) + access = list(GLOB.access_maint_tunnels, GLOB.access_mailsorting, GLOB.access_cargo, GLOB.access_cargo_bot, GLOB.access_qm, GLOB.access_mining, GLOB.access_mining_station, GLOB.access_mineral_storeroom) + minimal_access = list(GLOB.access_maint_tunnels, GLOB.access_mailsorting, GLOB.access_cargo, GLOB.access_cargo_bot, GLOB.access_qm, GLOB.access_mining, GLOB.access_mining_station, GLOB.access_mineral_storeroom) /datum/job/mining/New() ..() MAP_JOB_CHECK total_positions = 2 spawn_positions = 2 - access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_mineral_storeroom) - minimal_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_mineral_storeroom) + access = list(GLOB.access_maint_tunnels, GLOB.access_mailsorting, GLOB.access_cargo, GLOB.access_cargo_bot, GLOB.access_qm, GLOB.access_mining, GLOB.access_mining_station, GLOB.access_mineral_storeroom) + minimal_access = list(GLOB.access_maint_tunnels, GLOB.access_mailsorting, GLOB.access_cargo, GLOB.access_cargo_bot, GLOB.access_qm, GLOB.access_mining, GLOB.access_mining_station, GLOB.access_mineral_storeroom) /datum/outfit/job/mining/New() ..() @@ -126,27 +126,27 @@ /datum/job/bartender/New() ..() MAP_JOB_CHECK - access = list(access_hydroponics, access_bar, access_kitchen, access_morgue, access_weapons) - minimal_access = list(access_hydroponics, access_bar, access_kitchen, access_morgue, access_weapons) + access = list(GLOB.access_hydroponics, GLOB.access_bar, GLOB.access_kitchen, GLOB.access_morgue, GLOB.access_weapons) + minimal_access = list(GLOB.access_hydroponics, GLOB.access_bar, GLOB.access_kitchen, GLOB.access_morgue, GLOB.access_weapons) /datum/job/cook/New() ..() MAP_JOB_CHECK - access = list(access_hydroponics, access_bar, access_kitchen, access_morgue, access_weapons) - minimal_access = list(access_hydroponics, access_bar, access_kitchen, access_morgue, access_weapons) + access = list(GLOB.access_hydroponics, GLOB.access_bar, GLOB.access_kitchen, GLOB.access_morgue, GLOB.access_weapons) + minimal_access = list(GLOB.access_hydroponics, GLOB.access_bar, GLOB.access_kitchen, GLOB.access_morgue, GLOB.access_weapons) /datum/job/hydro/New() ..() MAP_JOB_CHECK - access = list(access_hydroponics, access_bar, access_kitchen, access_morgue, access_maint_tunnels) - minimal_access = list(access_hydroponics, access_bar, access_kitchen, access_morgue, access_maint_tunnels) + access = list(GLOB.access_hydroponics, GLOB.access_bar, GLOB.access_kitchen, GLOB.access_morgue, GLOB.access_maint_tunnels) + minimal_access = list(GLOB.access_hydroponics, GLOB.access_bar, GLOB.access_kitchen, GLOB.access_morgue, GLOB.access_maint_tunnels) // they get maint access because of all the hydro content in maint /datum/job/janitor/New() ..() MAP_JOB_CHECK - access = list(access_janitor, access_hydroponics, access_bar, access_kitchen, access_morgue, access_maint_tunnels) - minimal_access = list(access_janitor, access_hydroponics, access_bar, access_kitchen, access_morgue, access_maint_tunnels) + access = list(GLOB.access_janitor, GLOB.access_hydroponics, GLOB.access_bar, GLOB.access_kitchen, GLOB.access_morgue, GLOB.access_maint_tunnels) + minimal_access = list(GLOB.access_janitor, GLOB.access_hydroponics, GLOB.access_bar, GLOB.access_kitchen, GLOB.access_morgue, GLOB.access_maint_tunnels) //Civilian diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index e7a41aabfd..13de429501 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -1,11 +1,9 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aaa" = ( -/turf/open/space, +/turf/open/space/basic, /area/space) "aab" = ( -/obj/effect/landmark{ - name = "carpspawn" - }, +/obj/effect/landmark/carpspawn, /turf/open/space, /area/space) "aac" = ( @@ -128,9 +126,7 @@ icon_state = "2-4"; tag = "" }, -/obj/effect/landmark{ - name = "tripai" - }, +/obj/effect/landmark/tripai, /obj/item/device/radio/intercom{ anyai = 1; broadcasting = 0; @@ -182,9 +178,7 @@ name = "AI Chamber APC"; pixel_y = 24 }, -/obj/effect/landmark{ - name = "tripai" - }, +/obj/effect/landmark/tripai, /obj/item/device/radio/intercom{ anyai = 1; broadcasting = 0; @@ -326,9 +320,7 @@ /turf/open/floor/circuit, /area/wreck/ai) "aaI" = ( -/obj/effect/landmark/start{ - name = "AI" - }, +/obj/effect/landmark/start/ai, /obj/item/device/radio/intercom{ broadcasting = 0; freerange = 1; @@ -1333,10 +1325,7 @@ /turf/open/floor/plasteel/black, /area/security/prison) "adc" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plasteel/black, /area/security/prison) "add" = ( @@ -1659,9 +1648,7 @@ }, /area/ai_monitored/turret_protected/aisat_interior) "adF" = ( -/obj/effect/landmark/start{ - name = "Cyborg" - }, +/obj/effect/landmark/start/cyborg, /obj/item/device/radio/beacon, /turf/open/floor/plasteel/black, /area/ai_monitored/turret_protected/aisat_interior) @@ -2014,9 +2001,7 @@ /area/security/transfer) "aeC" = ( /obj/structure/bed, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/black, /area/security/transfer) "aeD" = ( @@ -3453,9 +3438,7 @@ /turf/open/floor/plasteel/black, /area/security/armory) "ahk" = ( -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/open/floor/plasteel/red, /area/security/main) @@ -3521,9 +3504,7 @@ }, /area/security/main) "ahq" = ( -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/reagent_dispensers/peppertank{ pixel_x = 32; @@ -3777,16 +3758,12 @@ }, /area/security/main) "ahQ" = ( -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel, /area/security/main) "ahR" = ( /obj/structure/chair/stool, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel, /area/security/main) "ahS" = ( @@ -3972,9 +3949,7 @@ }) "aik" = ( /obj/structure/bodycontainer/crematorium, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /obj/item/device/radio/intercom{ dir = 0; name = "Station Intercom (General)"; @@ -4133,9 +4108,7 @@ c_tag = "Brig Evidence Room"; dir = 8 }, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/red/side{ tag = "icon-red (EAST)"; dir = 4 @@ -4374,10 +4347,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/maintenance/fsmaint) "aiV" = ( @@ -4711,9 +4681,7 @@ }, /area/maintenance/fsmaint) "ajF" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/structure/chair/stool/bar, /turf/open/floor/wood, /area/maintenance/fsmaint) @@ -4827,9 +4795,7 @@ dir = 1; layer = 2.9 }, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/black, /area/security/brig) "ajS" = ( @@ -5045,9 +5011,7 @@ /obj/structure/chair/office/dark{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ tag = "icon-intact (EAST)"; icon_state = "intact"; @@ -5072,9 +5036,7 @@ dir = 4; icon_state = "pipe-c" }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ tag = "icon-intact (EAST)"; icon_state = "intact"; @@ -5176,9 +5138,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Head of Security" - }, +/obj/effect/landmark/start/head_of_security, /turf/open/floor/carpet, /area/security/hos) "ako" = ( @@ -5767,9 +5727,7 @@ /obj/structure/chair/office/dark{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel, /area/security/main) "aly" = ( @@ -5777,9 +5735,7 @@ dir = 1 }, /obj/structure/disposalpipe/segment, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel, /area/security/main) "alz" = ( @@ -6338,9 +6294,7 @@ /area/security/warden) "amw" = ( /obj/structure/chair/office/dark, -/obj/effect/landmark/start{ - name = "Warden" - }, +/obj/effect/landmark/start/warden, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) "amx" = ( @@ -7606,9 +7560,7 @@ /turf/open/floor/plasteel/barber, /area/crew_quarters/sleep) "apb" = ( -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1 }, @@ -8824,9 +8776,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/circuit/green{ luminosity = 2 }, @@ -9215,9 +9165,7 @@ }, /obj/item/weapon/soap/deluxe, /obj/item/weapon/bikehorn/rubberducky, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /obj/structure/curtain, /turf/open/floor/plasteel/freezer, /area/crew_quarters/captain) @@ -9946,9 +9894,7 @@ /turf/open/floor/carpet, /area/crew_quarters/sleep) "atI" = ( -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -10022,10 +9968,7 @@ dir = 9; pixel_y = 0 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plasteel, /area/crew_quarters/fitness{ name = "Recreation Room" @@ -10725,9 +10668,7 @@ /area/crew_quarters/captain) "avw" = ( /obj/structure/chair/comfy/black, -/obj/effect/landmark/start{ - name = "Captain" - }, +/obj/effect/landmark/start/captain, /turf/open/floor/carpet, /area/crew_quarters/captain) "avx" = ( @@ -11674,9 +11615,7 @@ /turf/open/floor/carpet, /area/crew_quarters/sleep) "axp" = ( -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/structure/chair/comfy/brown{ dir = 1 }, @@ -12649,9 +12588,7 @@ /obj/structure/chair/office/dark{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Head of Personnel" - }, +/obj/effect/landmark/start/head_of_personnel, /turf/open/floor/wood, /area/crew_quarters/heads) "azk" = ( @@ -12759,9 +12696,7 @@ dir = 2; icon_state = "pipe-c" }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -12981,9 +12916,7 @@ /turf/open/floor/plasteel, /area/storage/primary) "azQ" = ( -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel, /area/storage/primary) "azR" = ( @@ -13369,10 +13302,7 @@ /obj/structure/urinal{ pixel_y = 32 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plasteel/freezer, /area/crew_quarters/locker/locker_toilet{ name = "\improper Restrooms" @@ -13400,9 +13330,7 @@ name = "\improper Restrooms" }) "aAB" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/item/toy/beach_ball/holoball, /turf/open/floor/plating, /area/crew_quarters/locker/locker_toilet{ @@ -13903,9 +13831,7 @@ /area/maintenance/apmaint) "aBz" = ( /obj/structure/bodycontainer/morgue, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/black, /area/security/detectives_office) "aBA" = ( @@ -13928,9 +13854,7 @@ buildstackamount = 0; dir = 1 }, -/obj/effect/landmark/start{ - name = "Detective" - }, +/obj/effect/landmark/start/detective, /turf/open/floor/carpet, /area/security/detectives_office) "aBE" = ( @@ -14496,9 +14420,7 @@ /turf/open/floor/plating, /area/maintenance/apmaint) "aCS" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/apmaint) "aCT" = ( @@ -16668,9 +16590,7 @@ dir = 8; name = "Defense" }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral/side{ dir = 1 @@ -16713,10 +16633,7 @@ /obj/machinery/airalarm{ pixel_y = 22 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet{ name = "\improper Auxiliary Restroom" @@ -17461,9 +17378,7 @@ /obj/structure/toilet{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet{ name = "\improper Auxiliary Restroom" @@ -18332,9 +18247,7 @@ dir = 2; icon_state = "pipe-c" }, -/obj/effect/landmark/start{ - name = "Cargo Technician" - }, +/obj/effect/landmark/start/cargo_technician, /turf/open/floor/plasteel, /area/quartermaster/office) "aKw" = ( @@ -18841,9 +18754,7 @@ /area/maintenance/disposal) "aLK" = ( /obj/structure/disposalpipe/segment, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -19006,9 +18917,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating{ burnt = 1; icon_state = "panelscorched" @@ -19777,10 +19686,7 @@ /turf/open/floor/plating, /area/maintenance/apmaint) "aNz" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/maintenance/disposal) "aNA" = ( @@ -20001,10 +19907,7 @@ /turf/open/floor/wood, /area/crew_quarters/bar) "aNY" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/item/weapon/storage/box/beanbag, /turf/open/floor/wood, /area/crew_quarters/bar) @@ -21258,9 +21161,7 @@ /turf/open/floor/plasteel, /area/quartermaster/storage) "aQw" = ( -/obj/effect/landmark/start{ - name = "Cargo Technician" - }, +/obj/effect/landmark/start/cargo_technician, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, @@ -21646,9 +21547,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/landmark/start{ - name = "Mime" - }, +/obj/effect/landmark/start/mime, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -21893,9 +21792,7 @@ "aRI" = ( /obj/structure/bed, /obj/item/weapon/bedsheet, -/obj/effect/landmark/start{ - name = "Janitor" - }, +/obj/effect/landmark/start/janitor, /turf/open/floor/plasteel/black, /area/janitor) "aRJ" = ( @@ -22113,9 +22010,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Clown" - }, +/obj/effect/landmark/start/clown, /turf/open/floor/plasteel/redblue, /area/crew_quarters/theatre) "aSh" = ( @@ -22545,9 +22440,7 @@ /obj/structure/chair/office/dark{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Cargo Technician" - }, +/obj/effect/landmark/start/cargo_technician, /turf/open/floor/plasteel/brown{ dir = 1 }, @@ -23346,9 +23239,7 @@ /turf/open/floor/plasteel, /area/hydroponics) "aUE" = ( -/obj/effect/landmark/start{ - name = "Botanist" - }, +/obj/effect/landmark/start/botanist, /turf/open/floor/plasteel, /area/hydroponics) "aUF" = ( @@ -23395,9 +23286,7 @@ }, /area/crew_quarters/bar) "aUN" = ( -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/structure/chair/wood/normal, /turf/open/floor/carpet{ icon_state = "carpetsymbol" @@ -23855,9 +23744,7 @@ /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/kitchen) "aVF" = ( -/obj/effect/landmark/start{ - name = "Cook" - }, +/obj/effect/landmark/start/cook, /obj/machinery/atmospherics/components/unary/vent_pump{ on = 1 }, @@ -23889,9 +23776,7 @@ /turf/open/floor/plasteel/hydrofloor, /area/crew_quarters/kitchen) "aVJ" = ( -/obj/effect/landmark/start{ - name = "Bartender" - }, +/obj/effect/landmark/start/bartender, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; on = 1 @@ -23908,9 +23793,7 @@ /area/crew_quarters/bar) "aVL" = ( /obj/structure/chair/stool/bar, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -23970,9 +23853,7 @@ }, /area/crew_quarters/bar) "aVT" = ( -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/structure/chair/stool, /turf/open/floor/carpet{ icon_state = "carpetsymbol" @@ -24920,9 +24801,7 @@ /obj/structure/chair/office/dark{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Shaft Miner" - }, +/obj/effect/landmark/start/shaft_miner, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -25216,9 +25095,7 @@ /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/kitchen) "aYx" = ( -/obj/effect/landmark/start{ - name = "Cook" - }, +/obj/effect/landmark/start/cook, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -25374,9 +25251,7 @@ /obj/structure/chair/office/dark{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Quartermaster" - }, +/obj/effect/landmark/start/quartermaster, /turf/open/floor/plasteel, /area/quartermaster/qm) "aYN" = ( @@ -25399,9 +25274,7 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/obj/effect/landmark/start{ - name = "Shaft Miner" - }, +/obj/effect/landmark/start/shaft_miner, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/quartermaster/miningdock) @@ -25797,9 +25670,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/landmark/start{ - name = "Shaft Miner" - }, +/obj/effect/landmark/start/shaft_miner, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 @@ -26256,9 +26127,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/arrival) "baF" = ( -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; external_pressure_bound = 101.325; @@ -26730,9 +26599,7 @@ /turf/open/floor/plating, /area/maintenance/apmaint) "bbt" = ( -/obj/effect/landmark{ - name = "Observer-Start" - }, +/obj/effect/landmark/observer_start, /turf/open/floor/mineral/titanium/blue, /area/shuttle/arrival) "bbu" = ( @@ -26959,9 +26826,7 @@ name = "Lounge" }) "bbT" = ( -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/structure/cable{ d1 = 1; d2 = 4; @@ -28063,9 +27928,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plating{ broken = 1; icon_state = "platingdmg1" @@ -28198,9 +28061,7 @@ /area/storage/emergency2) "beD" = ( /obj/structure/bodycontainer/morgue, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/black, /area/medical/morgue) "beE" = ( @@ -28422,9 +28283,7 @@ /obj/structure/chair/office/light{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Roboticist" - }, +/obj/effect/landmark/start/roboticist, /turf/open/floor/plasteel, /area/assembly/robotics) "bff" = ( @@ -28519,13 +28378,8 @@ /turf/open/floor/engine, /area/toxins/explab) "bfo" = ( -/obj/effect/landmark{ - name = "blobstart" - }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/blobstart, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/engine, /area/toxins/explab) "bfp" = ( @@ -28809,9 +28663,7 @@ /area/storage/emergency2) "bfS" = ( /obj/structure/bodycontainer/morgue, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /obj/machinery/light/small{ brightness = 3; dir = 8 @@ -29065,9 +28917,7 @@ /area/toxins/explab) "bgr" = ( /obj/structure/disposalpipe/segment, -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /obj/machinery/atmospherics/components/trinary/filter, /turf/open/floor/engine{ name = "Holodeck Projector Floor" @@ -29121,9 +28971,7 @@ /area/toxins/xenobiology) "bgA" = ( /obj/effect/decal/cleanable/ash, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plating, /area/maintenance/apmaint) "bgB" = ( @@ -29563,9 +29411,7 @@ }, /area/toxins/xenobiology) "bhu" = ( -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/engine, /area/toxins/xenobiology) "bhv" = ( @@ -29836,9 +29682,7 @@ /obj/structure/chair/office/light{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Medical Doctor" - }, +/obj/effect/landmark/start/medical_doctor, /turf/open/floor/plasteel/whiteblue/side{ tag = "icon-whiteblue (NORTHEAST)"; dir = 5 @@ -29927,9 +29771,7 @@ }, /area/assembly/robotics) "bii" = ( -/obj/effect/landmark/start{ - name = "Roboticist" - }, +/obj/effect/landmark/start/roboticist, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/assembly/robotics) @@ -30092,9 +29934,7 @@ /obj/structure/chair/comfy/beige{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /turf/open/floor/plasteel/white, /area/toxins/xenobiology) "biz" = ( @@ -30616,9 +30456,7 @@ /area/toxins/explab) "bjy" = ( /obj/structure/chair/stool, -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -31206,9 +31044,7 @@ /obj/structure/chair/office/light{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Chemist" - }, +/obj/effect/landmark/start/chemist, /turf/open/floor/plasteel/whiteyellow/side{ dir = 1 }, @@ -32354,10 +32190,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plasteel/floorgrime, /area/toxins/xenobiology) "bmH" = ( @@ -33075,9 +32908,7 @@ dir = 4; initialize_directions = 11 }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plasteel/floorgrime, /area/toxins/xenobiology) "bnX" = ( @@ -33325,9 +33156,7 @@ /area/toxins/explab) "boD" = ( /obj/structure/disposalpipe/segment, -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, @@ -34554,9 +34383,7 @@ /area/medical/genetics) "bqD" = ( /obj/structure/chair/stool, -/obj/effect/landmark/start{ - name = "Geneticist" - }, +/obj/effect/landmark/start/geneticist, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -35717,9 +35544,7 @@ /area/medical/genetics) "bsK" = ( /obj/structure/chair/stool, -/obj/effect/landmark/start{ - name = "Geneticist" - }, +/obj/effect/landmark/start/geneticist, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -35899,9 +35724,7 @@ name = "Chief Medical Office" }) "bta" = ( -/obj/effect/landmark/start{ - name = "Chief Medical Officer" - }, +/obj/effect/landmark/start/chief_medical_officer, /obj/structure/chair/office/light{ dir = 1 }, @@ -36205,9 +36028,7 @@ name = "\improper Toxins Lab" }) "btD" = ( -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /mob/living/simple_animal/slime, /turf/open/floor/engine, /area/toxins/xenobiology) @@ -36951,9 +36772,7 @@ /turf/open/floor/plasteel/white, /area/medical/medbay) "buW" = ( -/obj/effect/landmark/start{ - name = "Medical Doctor" - }, +/obj/effect/landmark/start/medical_doctor, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; layer = 2.4; @@ -37578,9 +37397,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump{ on = 1 }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/item/weapon/melee/baton/cattleprod{ bcell = new /obj/item/weapon/stock_parts/cell/high() }, @@ -37607,10 +37424,7 @@ scrub_N2O = 0; scrub_Toxins = 0 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plasteel/black, /area/medical/exam_room) "bwi" = ( @@ -37741,9 +37555,7 @@ /area/crew_quarters/hor) "bwt" = ( /obj/structure/chair/office/light, -/obj/effect/landmark/start{ - name = "Research Director" - }, +/obj/effect/landmark/start/research_director, /turf/open/floor/plasteel/white, /area/crew_quarters/hor) "bwu" = ( @@ -37853,9 +37665,7 @@ }) "bwG" = ( /obj/structure/chair/stool, -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -38139,10 +37949,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/maintenance/asmaint2) "bxb" = ( @@ -38193,10 +38000,7 @@ icon_state = "intact"; dir = 8 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plasteel/freezer, /area/medical/virology) "bxh" = ( @@ -38287,9 +38091,7 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/black, /area/medical/exam_room) "bxr" = ( @@ -38298,9 +38100,7 @@ /obj/effect/decal/cleanable/blood/drip, /obj/item/weapon/restraints/handcuffs, /obj/item/clothing/mask/muzzle, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/black, /area/medical/exam_room) "bxs" = ( @@ -38682,9 +38482,7 @@ "byd" = ( /obj/structure/closet/masks, /obj/item/trash/deadmouse, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plating, /area/maintenance/aft) "bye" = ( @@ -38714,9 +38512,7 @@ /area/medical/virology) "byi" = ( /obj/structure/window/reinforced, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plasteel/freezer, /area/medical/virology) "byj" = ( @@ -38779,9 +38575,7 @@ "byn" = ( /obj/item/weapon/bedsheet/medical, /obj/structure/bed, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /obj/structure/mirror{ pixel_x = -28 }, @@ -39506,9 +39300,7 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/item/chair/stool, /turf/open/floor/plating, /area/maintenance/maintcentral{ @@ -40353,9 +40145,7 @@ /area/medical/surgery) "bBp" = ( /obj/structure/table/optable, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/white, /area/medical/surgery) "bBq" = ( @@ -40625,9 +40415,7 @@ /turf/open/floor/engine, /area/maintenance/aft) "bBU" = ( -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/engine, /area/maintenance/aft) "bBV" = ( @@ -40654,9 +40442,7 @@ /obj/item/weapon/bedsheet/medical, /obj/structure/bed, /obj/effect/decal/cleanable/cobweb, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/freezer, /area/medical/virology) "bCa" = ( @@ -40666,9 +40452,7 @@ "bCb" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/medical, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/freezer, /area/medical/virology) "bCc" = ( @@ -40678,9 +40462,7 @@ /turf/open/floor/plasteel/white, /area/medical/virology) "bCd" = ( -/obj/effect/landmark/start{ - name = "Virologist" - }, +/obj/effect/landmark/start/virologist, /obj/structure/chair/office/light{ dir = 8 }, @@ -40783,9 +40565,7 @@ /turf/open/floor/plasteel/white, /area/medical/surgery) "bCo" = ( -/obj/effect/landmark/start{ - name = "Medical Doctor" - }, +/obj/effect/landmark/start/medical_doctor, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -41845,9 +41625,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/aft) "bEH" = ( @@ -42621,9 +42399,7 @@ /obj/structure/chair/office/dark{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Atmospheric Technician" - }, +/obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/plasteel, /area/atmos) "bGp" = ( @@ -42887,9 +42663,7 @@ /obj/structure/chair/office/dark{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Atmospheric Technician" - }, +/obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/plasteel, /area/atmos) "bGV" = ( @@ -43316,10 +43090,7 @@ /turf/open/floor/engine/plasma, /area/atmos) "bHL" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/engine/plasma, /area/atmos) "bHM" = ( @@ -43366,9 +43137,7 @@ /area/maintenance/aft) "bHR" = ( /obj/machinery/atmospherics/components/binary/valve, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/aft) "bHS" = ( @@ -44762,9 +44531,7 @@ /turf/open/floor/plasteel, /area/engine/chiefs_office) "bKL" = ( -/obj/effect/landmark/start{ - name = "Chief Engineer" - }, +/obj/effect/landmark/start/chief_engineer, /turf/open/floor/plasteel, /area/engine/chiefs_office) "bKM" = ( @@ -45173,7 +44940,7 @@ desc = "Used for watching the engine containment area."; dir = 4; name = "Engine Monitor"; - network = list("Singularity"); + network = list("Engine"); pixel_x = -32; pixel_y = 0 }, @@ -45219,9 +44986,7 @@ icon_state = "2-4"; tag = "" }, -/obj/effect/landmark/start{ - name = "Station Engineer" - }, +/obj/effect/landmark/start/station_engineer, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -45252,6 +45017,14 @@ /area/engine/engine_smes) "bLA" = ( /obj/structure/filingcabinet, +/obj/machinery/computer/security/telescreen{ + desc = "Used for watching the engine containment area."; + dir = 4; + name = "Engine Monitor"; + network = list("Engine"); + pixel_x = -32; + pixel_y = 0 + }, /turf/open/floor/plasteel/red/side{ dir = 10 }, @@ -45705,13 +45478,11 @@ }, /area/engine/engineering) "bME" = ( -/obj/machinery/computer/monitor{ - name = "Engineering Power Monitoring Console" - }, /obj/structure/cable{ icon_state = "0-2"; d2 = 2 }, +/obj/machinery/modular_computer/console/preset/engineering, /turf/open/floor/plasteel/yellow/side{ dir = 1 }, @@ -46432,9 +46203,7 @@ /area/engine/engineering) "bNW" = ( /obj/structure/chair/stool, -/obj/effect/landmark/start{ - name = "Station Engineer" - }, +/obj/effect/landmark/start/station_engineer, /turf/open/floor/plasteel, /area/engine/engineering) "bNX" = ( @@ -46784,9 +46553,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "bOE" = ( -/obj/effect/landmark/start{ - name = "Station Engineer" - }, +/obj/effect/landmark/start/station_engineer, /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -46823,10 +46590,7 @@ /turf/open/floor/engine/o2, /area/atmos) "bOL" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/engine/air, /area/atmos) "bOM" = ( @@ -46909,6 +46673,7 @@ /obj/machinery/camera{ c_tag = "Engineering Center"; dir = 2; + network = list("SS13","Engine"); pixel_x = 23 }, /obj/machinery/light{ @@ -47257,9 +47022,7 @@ /turf/open/floor/plating, /area/engine/engineering) "bPM" = ( -/obj/effect/landmark/start{ - name = "Station Engineer" - }, +/obj/effect/landmark/start/station_engineer, /turf/open/floor/plating, /area/engine/engineering) "bPN" = ( @@ -47433,10 +47196,7 @@ /turf/open/floor/plating, /area/engine/engineering) "bQf" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/maintenance/aft) "bQg" = ( @@ -47779,7 +47539,7 @@ /obj/machinery/camera/emp_proof{ c_tag = "Engine Containment Port Fore"; dir = 2; - network = list("Singularity") + network = list("Engine") }, /turf/open/floor/plating/airless, /area/engine/engineering) @@ -47804,7 +47564,7 @@ /obj/machinery/camera/emp_proof{ c_tag = "Engine Containment Starboard Fore"; dir = 2; - network = list("Singularity") + network = list("Engine") }, /turf/open/floor/plating/airless, /area/engine/engineering) @@ -48226,9 +47986,7 @@ }) "bRU" = ( /obj/item/device/radio/beacon, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plating/airless, /area/mine/explored{ name = "Bomb Testing Asteroid" @@ -48275,7 +48033,7 @@ /obj/machinery/camera/emp_proof{ c_tag = "Engine Containment Port Aft"; dir = 1; - network = list("Singularity") + network = list("Engine") }, /turf/open/floor/plating/airless, /area/engine/engineering) @@ -48332,7 +48090,7 @@ /obj/machinery/camera/emp_proof{ c_tag = "Engine Containment Starboard Aft"; dir = 1; - network = list("Singularity") + network = list("Engine") }, /turf/open/floor/plating/airless, /area/engine/engineering) @@ -49291,9 +49049,7 @@ }, /area/maintenance/fsmaint) "bUw" = ( -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -49303,9 +49059,7 @@ /turf/open/floor/plasteel, /area/security/main) "bUx" = ( -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -50125,9 +49879,7 @@ /turf/open/floor/plasteel/neutral/corner, /area/hallway/primary/central) "bWj" = ( -/obj/effect/landmark/start{ - name = "Botanist" - }, +/obj/effect/landmark/start/botanist, /obj/machinery/holopad, /turf/open/floor/plasteel, /area/hydroponics) @@ -50187,9 +49939,7 @@ }, /area/crew_quarters/bar) "bWr" = ( -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/structure/chair/wood/normal{ icon_state = "wooden_chair"; dir = 1 @@ -50485,9 +50235,7 @@ /obj/structure/chair{ dir = 8 }, -/obj/effect/landmark{ - name = "JoinLate" - }, +/obj/effect/landmark/latejoin, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9; pixel_y = 0 @@ -52467,9 +52215,7 @@ name = "Monastery" }) "cbU" = ( -/obj/effect/landmark/start{ - name = "Chaplain" - }, +/obj/effect/landmark/start/chaplain, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -55612,9 +55358,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/landmark{ - name = "Observer-Start" - }, +/obj/effect/landmark/observer_start, /turf/open/floor/plasteel, /area/hallway/primary/central) "cik" = ( diff --git a/_maps/map_files/PubbyStation/job_changes.dm b/_maps/map_files/PubbyStation/job_changes.dm index 8693063def..8b26cd5b68 100644 --- a/_maps/map_files/PubbyStation/job_changes.dm +++ b/_maps/map_files/PubbyStation/job_changes.dm @@ -3,20 +3,20 @@ /datum/job/hos/New() ..() MAP_JOB_CHECK - access += access_crematorium - minimal_access += access_crematorium + access += GLOB.access_crematorium + minimal_access += GLOB.access_crematorium /datum/job/warden/New() ..() MAP_JOB_CHECK - access += access_crematorium - minimal_access += access_crematorium + access += GLOB.access_crematorium + minimal_access += GLOB.access_crematorium /datum/job/officer/New() ..() MAP_JOB_CHECK - access += access_crematorium - minimal_access += access_crematorium + access += GLOB.access_crematorium + minimal_access += GLOB.access_crematorium MAP_REMOVE_JOB(librarian) MAP_REMOVE_JOB(lawyer) \ No newline at end of file diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index caf6058064..21c28c6bd6 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -1,4 +1,4 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aaa" = ( /turf/open/space/basic, /area/space) @@ -18,10 +18,13 @@ "aac" = ( /turf/closed/wall/mineral/plastitanium, /area/shuttle/syndicate) -"aae" = ( -/obj/effect/landmark{ - name = "carpspawn" +"aad" = ( +/turf/closed/wall/shuttle{ + icon_state = "wall3" }, +/area/shuttle/syndicate) +"aae" = ( +/obj/effect/landmark/carpspawn, /turf/open/space, /area/space) "aaf" = ( @@ -430,7 +433,7 @@ /turf/closed/wall, /area/security/main) "abq" = ( -/turf/closed/wall, +/turf/closed/wall/r_wall, /area/security/hos) "abr" = ( /obj/structure/grille, @@ -810,9 +813,7 @@ /area/security/transfer) "acc" = ( /obj/structure/bed, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/black, /area/security/transfer) "acd" = ( @@ -925,9 +926,7 @@ /turf/open/floor/plasteel/showroomfloor, /area/security/main) "acq" = ( -/obj/effect/landmark{ - name = "secequipment" - }, +/obj/effect/landmark/secequipment, /turf/open/floor/plasteel/showroomfloor, /area/security/main) "acr" = ( @@ -2100,6 +2099,9 @@ "aeE" = ( /turf/closed/wall/mineral/titanium, /area/shuttle/pod_3) +"aeF" = ( +/turf/closed/wall/mineral/titanium/overspace, +/area/shuttle/pod_3) "aeG" = ( /obj/structure/cable, /obj/machinery/power/solar{ @@ -2413,25 +2415,19 @@ /turf/open/floor/plasteel/showroomfloor, /area/security/main) "aff" = ( -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel/red/side{ dir = 9 }, /area/security/main) "afg" = ( -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel/red/side{ dir = 1 }, /area/security/main) "afh" = ( -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/red/side{ dir = 1 @@ -2442,9 +2438,7 @@ dir = 4; icon_state = "pipe-c" }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel/red/side{ dir = 1 }, @@ -2465,9 +2459,7 @@ dir = 8; icon_state = "pipe-c" }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel/red/side{ dir = 1 }, @@ -2763,9 +2755,7 @@ /turf/open/floor/plasteel/showroomfloor, /area/security/main) "afT" = ( -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel/red/side{ dir = 8 }, @@ -2790,16 +2780,12 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/landmark/start{ - name = "Head of Security" - }, +/obj/effect/landmark/start/head_of_security, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/security/main) "afY" = ( -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /obj/structure/chair{ dir = 8 }, @@ -2840,6 +2826,12 @@ /obj/machinery/atmospherics/pipe/manifold4w/general/visible, /turf/open/floor/plasteel, /area/atmos) +"age" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/atmos) "agf" = ( /obj/structure/table, /obj/item/stack/sheet/metal{ @@ -2995,6 +2987,12 @@ }, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) +"agv" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/atmos) "agw" = ( /obj/structure/table, /obj/machinery/syndicatebomb/training, @@ -3018,9 +3016,7 @@ }, /area/security/main) "agz" = ( -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel/red/corner{ dir = 1 }, @@ -3262,9 +3258,7 @@ /turf/open/floor/plasteel, /area/security/main) "ahb" = ( -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel, /area/security/main) "ahc" = ( @@ -3305,9 +3299,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /obj/structure/chair{ dir = 8 }, @@ -3699,9 +3691,7 @@ }, /obj/structure/chair, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/effect/landmark/start{ - name = "Security Officer" - }, +/obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel, /area/security/main) "ahL" = ( @@ -3771,9 +3761,7 @@ /area/security/warden) "ahR" = ( /obj/structure/chair/office/dark, -/obj/effect/landmark/start{ - name = "Warden" - }, +/obj/effect/landmark/start/warden, /obj/machinery/button/door{ id = "Prison Gate"; name = "Prison Wing Lockdown"; @@ -4133,6 +4121,11 @@ pixel_y = 0 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -23; + pixel_y = 0 + }, /turf/open/floor/plasteel/red/corner{ dir = 1 }, @@ -4561,7 +4554,7 @@ "ajy" = ( /obj/machinery/power/apc{ dir = 1; - name = "Labor Shuttle Dock APC"; + name = "Brig APC"; pixel_y = 24 }, /obj/structure/cable{ @@ -4785,6 +4778,15 @@ /obj/structure/window/shuttle, /turf/open/floor/plating, /area/shuttle/labor) +"ajY" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Unfiltered to Port"; + on = 0 + }, +/turf/open/floor/plasteel, +/area/atmos) "ajZ" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, @@ -6038,10 +6040,7 @@ /area/maintenance/fpmaint2) "amE" = ( /obj/structure/bed, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/item/weapon/bedsheet, /turf/open/floor/plating, /area/maintenance/fpmaint2) @@ -6092,7 +6091,7 @@ name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0 }, -/turf/closed/wall, +/turf/closed/wall/r_wall, /area/security/processing) "amL" = ( /obj/structure/grille, @@ -7118,10 +7117,7 @@ /area/maintenance/fpmaint2) "aoU" = ( /obj/structure/bed, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/maintenance/fpmaint2) "aoV" = ( @@ -7323,9 +7319,7 @@ name = "Air In"; on = 1 }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -7487,6 +7481,15 @@ }, /turf/open/floor/plating, /area/security/processing) +"apT" = ( +/obj/structure/chair/comfy/beige{ + desc = "It looks comfy and extra tactical.\nAlt-click to rotate it clockwise."; + dir = 1; + icon_state = "comfychair"; + name = "tactical armchair" + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) "apU" = ( /turf/open/floor/plating, /area/security/vacantoffice2) @@ -7733,9 +7736,7 @@ /area/crew_quarters/fitness) "aqt" = ( /obj/structure/grille, -/obj/effect/landmark{ - name = "Syndicate Breach Area" - }, +/obj/effect/landmark/syndicate_breach_area, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -7815,10 +7816,7 @@ /turf/open/floor/plating, /area/maintenance/fsmaint2) "aqE" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/maintenance/fsmaint2) "aqF" = ( @@ -7931,6 +7929,16 @@ }, /turf/open/floor/plating, /area/security/processing) +"aqU" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/plasteel, +/area/quartermaster/office) "aqV" = ( /obj/structure/table/wood, /obj/item/weapon/paper_bin{ @@ -8323,6 +8331,10 @@ dir = 4 }, /obj/structure/filingcabinet/employment, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, /turf/open/floor/wood, /area/lawoffice) "arW" = ( @@ -8353,9 +8365,7 @@ /obj/structure/chair/office/dark{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Lawyer" - }, +/obj/effect/landmark/start/lawyer, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; on = 1 @@ -8787,9 +8797,7 @@ /area/mining_construction) "atc" = ( /obj/structure/chair/office/dark, -/obj/effect/landmark/start{ - name = "Lawyer" - }, +/obj/effect/landmark/start/lawyer, /turf/open/floor/wood, /area/lawoffice) "atd" = ( @@ -8802,10 +8810,7 @@ }, /area/hallway/primary/fore) "ate" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -8974,6 +8979,10 @@ icon_state = "panelscorched" }, /area/maintenance/fsmaint2) +"atz" = ( +/mob/living/simple_animal/mouse, +/turf/open/floor/plating, +/area/maintenance/fsmaint2) "atA" = ( /obj/structure/table, /turf/open/floor/plating, @@ -9082,9 +9091,7 @@ /turf/open/floor/wood, /area/crew_quarters/sleep) "atR" = ( -/obj/effect/landmark{ - name = "carpspawn" - }, +/obj/effect/landmark/carpspawn, /obj/structure/lattice, /turf/open/space, /area/space/nearstation) @@ -9782,9 +9789,7 @@ /obj/structure/chair/stool{ pixel_y = 8 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -10103,9 +10108,7 @@ /turf/open/floor/plating, /area/maintenance/fpmaint) "awh" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -10297,9 +10300,7 @@ /turf/open/floor/plasteel, /area/crew_quarters/fitness) "awB" = ( -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/green/side{ dir = 4 }, @@ -10574,6 +10575,10 @@ dir = 4 }, /area/mining_construction) +"axd" = ( +/mob/living/simple_animal/mouse, +/turf/open/floor/plating, +/area/maintenance/fpmaint2) "axe" = ( /obj/machinery/sleeper{ dir = 4; @@ -10582,9 +10587,7 @@ /turf/open/floor/plating, /area/maintenance/fpmaint2) "axf" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/fpmaint2) "axg" = ( @@ -10894,9 +10897,7 @@ /obj/structure/chair/stool{ pixel_y = 8 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel, /area/crew_quarters/sleep) "axP" = ( @@ -12076,9 +12077,7 @@ /area/maintenance/fsmaint2) "aAv" = ( /obj/structure/closet, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/effect/spawner/lootdrop/maintenance, /obj/item/weapon/reagent_containers/food/drinks/bottle/vodka/badminka, /turf/open/floor/plating, @@ -12474,9 +12473,7 @@ /turf/open/floor/plating, /area/security/checkpoint2) "aBm" = ( -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -12630,9 +12627,7 @@ /obj/item/clothing/under/rank/mailman, /obj/item/clothing/head/mailman, /obj/structure/closet, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/fsmaint2) "aBF" = ( @@ -12684,9 +12679,7 @@ /turf/open/floor/plating, /area/maintenance/fpmaint2) "aBM" = ( -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel, /area/hallway/secondary/construction{ name = "\improper Garden" @@ -12850,10 +12843,7 @@ /turf/open/floor/carpet, /area/crew_quarters/sleep) "aCe" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/item/weapon/bikehorn/rubberducky, /obj/structure/cable{ d1 = 1; @@ -13416,6 +13406,11 @@ }, /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) +"aDu" = ( +/obj/structure/table, +/obj/machinery/microwave, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) "aDv" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; @@ -13552,6 +13547,14 @@ }, /turf/closed/wall/r_wall, /area/ai_monitored/storage/eva) +"aDJ" = ( +/obj/structure/table, +/obj/item/device/flashlight/lamp{ + pixel_x = 4; + pixel_y = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) "aDK" = ( /obj/machinery/door/airlock{ id_tag = "Dorm1"; @@ -13692,9 +13695,7 @@ /area/maintenance/fsmaint2) "aDY" = ( /obj/structure/chair/stool, -/obj/effect/landmark/start{ - name = "Mime" - }, +/obj/effect/landmark/start/mime, /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -14594,9 +14595,7 @@ /turf/open/floor/plasteel, /area/storage/primary) "aFS" = ( -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel, /area/storage/primary) "aFT" = ( @@ -14606,9 +14605,7 @@ /turf/open/floor/plasteel, /area/storage/primary) "aFU" = ( -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -14763,9 +14760,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet) "aGo" = ( @@ -14810,9 +14805,7 @@ /area/ai_monitored/storage/eva) "aGr" = ( /obj/structure/chair/stool, -/obj/effect/landmark/start{ - name = "Clown" - }, +/obj/effect/landmark/start/clown, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -15363,9 +15356,7 @@ /turf/open/floor/plating, /area/chapel/main) "aHr" = ( -/obj/effect/landmark{ - name = "Marauder Entry" - }, +/obj/effect/landmark/marauder_entry, /turf/open/space, /area/space) "aHs" = ( @@ -15374,6 +15365,10 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/arrival) +"aHt" = ( +/obj/effect/landmark/observer_start, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/arrival) "aHu" = ( /obj/machinery/status_display{ density = 0; @@ -15461,9 +15456,7 @@ /obj/structure/chair/stool{ pixel_y = 8 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel, /area/storage/primary) "aHE" = ( @@ -15616,9 +15609,7 @@ /obj/structure/mirror{ pixel_x = -28 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet) "aHV" = ( @@ -15885,9 +15876,7 @@ dir = 4; icon_state = "pipe-c" }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -15924,16 +15913,12 @@ /area/chapel/office) "aIB" = ( /obj/structure/bodycontainer/crematorium, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/black, /area/chapel/office) "aIC" = ( -/obj/effect/landmark/start{ - name = "Chaplain" - }, +/obj/effect/landmark/start/chaplain, /obj/structure/chair, /turf/open/floor/plasteel/grimy, /area/chapel/office) @@ -17142,6 +17127,28 @@ }, /turf/open/floor/plasteel/black, /area/chapel/main) +"aLs" = ( +/obj/machinery/door/airlock/titanium{ + name = "Arrivals Shuttle Airlock" + }, +/obj/docking_port/mobile{ + dwidth = 5; + height = 7; + id = "arrival"; + name = "arrival shuttle"; + port_angle = -90; + preferred_direction = 8; + width = 15 + }, +/obj/docking_port/stationary{ + dwidth = 5; + height = 7; + id = "arrival_home"; + name = "port bay 1"; + width = 15 + }, +/turf/open/floor/plating, +/area/shuttle/arrival) "aLt" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 @@ -17179,9 +17186,7 @@ /area/hallway/primary/central) "aLy" = ( /obj/structure/chair/comfy/beige, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/grimy, /area/hallway/secondary/entry) "aLz" = ( @@ -17442,10 +17447,7 @@ /area/hallway/primary/central) "aMi" = ( /obj/structure/disposalpipe/segment, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/wood, /area/crew_quarters/bar) @@ -17737,9 +17739,7 @@ /area/hallway/primary/port) "aMW" = ( /obj/structure/bodycontainer/morgue, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/black, /area/chapel/office) "aMX" = ( @@ -17901,9 +17901,7 @@ }, /area/hallway/primary/central) "aNx" = ( -/obj/effect/landmark{ - name = "Observer-Start" - }, +/obj/effect/landmark/observer_start, /turf/open/floor/plasteel{ icon_state = "L8" }, @@ -18519,9 +18517,7 @@ }, /area/crew_quarters/bar) "aOP" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/item/toy/beach_ball/holoball, /turf/open/floor/plating, /area/crew_quarters/bar) @@ -18585,9 +18581,7 @@ dir = 1; icon_state = "comfychair" }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/grimy, /area/hallway/secondary/entry) @@ -19024,9 +19018,7 @@ /area/crew_quarters/bar) "aQd" = ( /obj/structure/chair, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/bar, /area/crew_quarters/bar) "aQe" = ( @@ -19128,9 +19120,7 @@ /turf/open/floor/engine/cult, /area/library) "aQt" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/structure/chair/comfy/brown{ dir = 1 }, @@ -19490,9 +19480,7 @@ /obj/structure/chair{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/bar, /area/crew_quarters/bar) "aRx" = ( @@ -19782,9 +19770,7 @@ /turf/open/floor/plasteel, /area/crew_quarters/locker) "aSj" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aSk" = ( @@ -19961,9 +19947,7 @@ /turf/open/floor/plasteel/bar, /area/crew_quarters/kitchen) "aSJ" = ( -/obj/effect/landmark/start{ - name = "Cook" - }, +/obj/effect/landmark/start/cook, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -20086,9 +20070,7 @@ /turf/open/floor/plasteel/bar, /area/crew_quarters/bar) "aSZ" = ( -/obj/effect/landmark/start{ - name = "Bartender" - }, +/obj/effect/landmark/start/bartender, /turf/open/floor/plasteel/bar, /area/crew_quarters/bar) "aTa" = ( @@ -20158,9 +20140,7 @@ "aTi" = ( /obj/structure/chair/stool, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/chapel{ dir = 8 }, @@ -20214,6 +20194,9 @@ }, /turf/open/floor/plating, /area/hallway/secondary/exit) +"aTp" = ( +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) "aTq" = ( /turf/closed/wall, /area/security/vacantoffice{ @@ -20269,9 +20252,7 @@ /obj/structure/chair/stool{ pixel_y = 8 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aTy" = ( @@ -20576,9 +20557,7 @@ /obj/structure/chair/stool{ pixel_y = 8 }, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -20659,9 +20638,7 @@ /area/library) "aUC" = ( /obj/structure/chair/comfy/black, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/wood, /area/library) "aUD" = ( @@ -20677,9 +20654,7 @@ /turf/open/floor/wood, /area/library) "aUF" = ( -/obj/effect/landmark/start{ - name = "Librarian" - }, +/obj/effect/landmark/start/librarian, /obj/structure/chair/office/dark, /turf/open/floor/wood, /area/library) @@ -20693,9 +20668,7 @@ /area/chapel/main) "aUH" = ( /obj/structure/chair/stool, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/chapel{ dir = 4 }, @@ -21190,9 +21163,7 @@ /turf/open/floor/plasteel/black, /area/hydroponics) "aVK" = ( -/obj/effect/landmark/start{ - name = "Botanist" - }, +/obj/effect/landmark/start/botanist, /turf/open/floor/plasteel, /area/hydroponics) "aVL" = ( @@ -21985,9 +21956,7 @@ /turf/open/floor/plasteel/bar, /area/crew_quarters/bar) "aXm" = ( -/obj/effect/landmark/start{ - name = "Cook" - }, +/obj/effect/landmark/start/cook, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/kitchen) "aXn" = ( @@ -22130,6 +22099,15 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit) +"aXH" = ( +/obj/structure/table, +/obj/machinery/button/door{ + id = "syndieshutters"; + name = "remote shutter control"; + req_access_txt = "150" + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) "aXI" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 4; @@ -22337,10 +22315,7 @@ /turf/open/floor/plating, /area/maintenance/port) "aYg" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -22587,9 +22562,7 @@ /area/crew_quarters/locker) "aYI" = ( /obj/structure/chair/stool/bar, -/obj/effect/landmark/start{ - name = "Assistant" - }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/bar, /area/crew_quarters/bar) "aYJ" = ( @@ -22647,9 +22620,7 @@ /area/hydroponics) "aYR" = ( /obj/structure/chair/stool, -/obj/effect/landmark/start{ - name = "Botanist" - }, +/obj/effect/landmark/start/botanist, /turf/open/floor/plasteel, /area/hydroponics) "aYS" = ( @@ -23479,9 +23450,7 @@ /area/security/detectives_office) "baX" = ( /obj/structure/chair/comfy/brown, -/obj/effect/landmark/start{ - name = "Detective" - }, +/obj/effect/landmark/start/detective, /turf/open/floor/carpet, /area/security/detectives_office) "baY" = ( @@ -23549,9 +23518,7 @@ /turf/open/floor/plating, /area/maintenance/port) "bbg" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -24045,10 +24012,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bct" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plasteel/freezer, /area/crew_quarters/locker/locker_toilet) "bcu" = ( @@ -24240,6 +24204,11 @@ }, /turf/closed/wall, /area/quartermaster/storage) +"bcU" = ( +/obj/structure/table/wood/poker, +/obj/item/device/flashlight/lamp/green, +/turf/open/floor/wood, +/area/space/nearstation) "bcV" = ( /obj/machinery/airalarm{ dir = 8; @@ -24609,9 +24578,7 @@ /turf/open/floor/carpet, /area/bridge/meeting_room) "bdL" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/item/clothing/suit/ianshirt, /obj/structure/closet, /turf/open/floor/plating, @@ -24686,6 +24653,11 @@ /obj/structure/closet/crate/medical, /turf/open/floor/plasteel/floorgrime, /area/quartermaster/storage) +"bdV" = ( +/turf/open/floor/wood{ + icon_state = "wood-broken6" + }, +/area/space/nearstation) "bdW" = ( /obj/item/clothing/gloves/color/rainbow, /obj/item/clothing/head/soft/rainbow, @@ -25926,9 +25898,7 @@ /obj/structure/chair/comfy/brown{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Captain" - }, +/obj/effect/landmark/start/captain, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/wood, /area/crew_quarters/captain) @@ -26329,6 +26299,18 @@ }, /turf/open/floor/plating, /area/maintenance/disposal) +"bhK" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/assembly/chargebay) "bhL" = ( /obj/machinery/mineral/stacking_machine{ input_dir = 1; @@ -26362,6 +26344,14 @@ }, /turf/open/floor/plating, /area/maintenance/port) +"bhP" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/white, +/area/assembly/robotics) "bhQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -26589,9 +26579,7 @@ /obj/structure/chair/office/light{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Chemist" - }, +/obj/effect/landmark/start/chemist, /turf/open/floor/plasteel/whiteyellow/side{ dir = 4 }, @@ -26637,9 +26625,7 @@ /area/security/checkpoint/medical) "biz" = ( /obj/structure/bodycontainer/morgue, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/black, /area/medical/morgue) "biA" = ( @@ -26751,6 +26737,13 @@ "biL" = ( /turf/open/floor/plasteel/white, /area/assembly/robotics) +"biM" = ( +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/effect/landmark/start/roboticist, +/turf/open/floor/plasteel/white, +/area/assembly/robotics) "biN" = ( /turf/open/floor/plasteel/whitered/side{ dir = 1 @@ -26837,9 +26830,7 @@ /area/toxins/lab) "biV" = ( /obj/structure/chair/stool, -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /turf/open/floor/plasteel/whitepurple/side{ dir = 1 }, @@ -26876,6 +26867,10 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/asmaint2) +"biZ" = ( +/obj/machinery/computer/shuttle/syndicate, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) "bja" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, @@ -27305,6 +27300,15 @@ dir = 2 }, /area/medical/medbay) +"bjW" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/assembly/chargebay) "bjX" = ( /obj/structure/table, /obj/machinery/recharger{ @@ -27381,6 +27385,14 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/storage/emergency) +"bkg" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/circuit, +/area/assembly/chargebay) "bkh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/circuit, @@ -27425,6 +27437,23 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/white, /area/assembly/robotics) +"bkl" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass_research{ + name = "Robotics Lab"; + req_access_txt = "29" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/assembly/robotics) "bkm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 @@ -27811,9 +27840,7 @@ /turf/open/floor/plating, /area/bridge/meeting_room) "bkY" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/structure/cable{ d1 = 1; d2 = 8; @@ -28223,11 +28250,13 @@ /area/toxins/lab) "blM" = ( /obj/effect/turf_decal/bot, -/obj/effect/landmark/start{ - name = "Roboticist" - }, +/obj/effect/landmark/start/roboticist, /turf/open/floor/plasteel, /area/assembly/robotics) +"blN" = ( +/obj/machinery/holopad, +/turf/open/floor/plasteel/white, +/area/assembly/robotics) "blO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, @@ -28667,9 +28696,7 @@ pixel_x = -26; req_access_txt = "5" }, -/obj/effect/landmark/start{ - name = "Medical Doctor" - }, +/obj/effect/landmark/start/medical_doctor, /turf/open/floor/plasteel/white, /area/medical/medbay) "bmM" = ( @@ -28802,6 +28829,26 @@ }, /turf/closed/wall/r_wall, /area/assembly/chargebay) +"bnd" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel, +/area/assembly/chargebay) +"bne" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/assembly/chargebay) "bnf" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 @@ -28998,9 +29045,7 @@ /turf/open/floor/plasteel, /area/quartermaster/office) "bnz" = ( -/obj/effect/landmark/start{ - name = "Cargo Technician" - }, +/obj/effect/landmark/start/cargo_technician, /obj/structure/chair/office/dark{ dir = 4 }, @@ -29130,13 +29175,11 @@ }, /area/hallway/primary/central) "bnO" = ( -/obj/structure/table, /obj/machinery/newscaster/security_unit{ pixel_x = 0; pixel_y = 32 }, -/obj/item/weapon/hand_labeler, -/obj/item/stack/packageWrap, +/obj/structure/filingcabinet/chestdrawer, /turf/open/floor/plasteel, /area/crew_quarters/heads) "bnP" = ( @@ -29422,6 +29465,14 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay) +"bop" = ( +/obj/machinery/mech_bay_recharge_port, +/obj/structure/cable{ + icon_state = "0-2"; + d2 = 2 + }, +/turf/open/floor/plating, +/area/assembly/chargebay) "boq" = ( /obj/structure/bed/roller, /turf/open/floor/plasteel/whiteblue/side{ @@ -29446,6 +29497,14 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/white, /area/assembly/robotics) +"bot" = ( +/obj/structure/grille, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating, +/area/assembly/robotics) "bou" = ( /turf/open/floor/plasteel, /area/assembly/robotics) @@ -29871,9 +29930,7 @@ }, /obj/item/weapon/soap/deluxe, /obj/item/weapon/bikehorn/rubberducky, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /obj/structure/curtain, /turf/open/floor/plasteel/freezer, /area/crew_quarters/captain) @@ -30244,6 +30301,21 @@ }, /turf/open/floor/plasteel/black, /area/assembly/robotics) +"bqb" = ( +/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/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/assembly/chargebay) "bqc" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel/white, @@ -30696,9 +30768,7 @@ /obj/structure/chair/office/light{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Geneticist" - }, +/obj/effect/landmark/start/geneticist, /turf/open/floor/plasteel/white, /area/medical/genetics) "brd" = ( @@ -30773,6 +30843,16 @@ }, /turf/open/floor/plasteel/white, /area/medical/genetics) +"brl" = ( +/obj/machinery/light_switch{ + pixel_x = -23; + pixel_y = 0 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/assembly/robotics) "brm" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -30928,7 +31008,7 @@ "bry" = ( /obj/machinery/door/airlock/maintenance{ name = "Experimentation Lab Maintenance"; - req_access_txt = "7" + req_access_txt = "47" }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -30996,7 +31076,8 @@ /area/toxins/explab) "brE" = ( /obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" + req_access_txt = "0"; + req_one_access_txt = "8;12" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, @@ -31183,7 +31264,7 @@ icon_state = "4-8"; pixel_x = 0 }, -/obj/structure/filingcabinet/chestdrawer, +/obj/machinery/vending/cart, /turf/open/floor/plasteel, /area/crew_quarters/heads) "brX" = ( @@ -31485,6 +31566,10 @@ /area/medical/research{ name = "Research Division" }) +"bsB" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) "bsC" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel/white, @@ -31513,7 +31598,7 @@ /obj/machinery/door/firedoor/heavy, /obj/machinery/door/airlock/research{ name = "Experimentation Lab"; - req_access_txt = "7" + req_access_txt = "47" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -31666,9 +31751,7 @@ /obj/structure/chair/office/dark{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Head of Personnel" - }, +/obj/effect/landmark/start/head_of_personnel, /turf/open/floor/plasteel, /area/crew_quarters/heads) "bsZ" = ( @@ -32260,6 +32343,9 @@ }, /turf/open/floor/plasteel/white, /area/medical/genetics) +"buh" = ( +/turf/closed/wall/r_wall, +/area/assembly/chargebay) "bui" = ( /obj/machinery/airalarm{ dir = 1; @@ -32459,6 +32545,10 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/maintenance/asmaint2) +"buA" = ( +/obj/structure/frame/computer, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) "buB" = ( /obj/machinery/conveyor_switch/oneway{ convdir = -1; @@ -32890,9 +32980,7 @@ /area/medical/genetics) "bvq" = ( /obj/structure/chair, -/obj/effect/landmark/start{ - name = "Geneticist" - }, +/obj/effect/landmark/start/geneticist, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -33094,9 +33182,7 @@ /area/toxins/explab) "bvN" = ( /obj/structure/chair/office/light, -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /turf/open/floor/plasteel/white, /area/toxins/explab) "bvO" = ( @@ -33307,7 +33393,11 @@ /area/crew_quarters/heads) "bwk" = ( /obj/structure/table, -/obj/item/weapon/book/manual/wiki/security_space_law, +/obj/item/weapon/hand_labeler, +/obj/item/stack/packageWrap{ + pixel_x = -1; + pixel_y = -1 + }, /turf/open/floor/plasteel, /area/crew_quarters/heads) "bwl" = ( @@ -33577,6 +33667,14 @@ /area/medical/research{ name = "Research Division" }) +"bwP" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/donkpockets{ + pixel_x = 3; + pixel_y = 3 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) "bwQ" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, @@ -33656,9 +33754,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Shaft Miner" - }, +/obj/effect/landmark/start/shaft_miner, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -33802,6 +33898,41 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/asmaint) +"bxh" = ( +/obj/machinery/door/poddoor{ + id = "smindicate"; + name = "outer blast door" + }, +/obj/machinery/button/door{ + id = "smindicate"; + name = "external door control"; + pixel_x = -26; + pixel_y = 0; + req_access_txt = "150" + }, +/obj/docking_port/mobile{ + dheight = 9; + dir = 2; + dwidth = 5; + height = 24; + id = "syndicate"; + name = "syndicate infiltrator"; + port_angle = 0; + roundstart_move = "syndicate_away"; + width = 18 + }, +/obj/docking_port/stationary{ + dheight = 9; + dir = 2; + dwidth = 5; + height = 24; + id = "syndicate_nw"; + name = "northwest of station"; + turf_type = /turf/open/space; + width = 18 + }, +/turf/open/floor/plating, +/area/shuttle/syndicate) "bxi" = ( /obj/machinery/computer/aifixer, /obj/machinery/requests_console{ @@ -33889,7 +34020,8 @@ id = "telelab"; name = "Test Chamber Blast Doors"; pixel_x = 25; - pixel_y = 0 + pixel_y = 0; + req_access_txt = "47" }, /obj/effect/turf_decal/stripes/line{ dir = 2 @@ -34330,9 +34462,7 @@ /obj/structure/chair/office/light{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Research Director" - }, +/obj/effect/landmark/start/research_director, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/hor) "byr" = ( @@ -35018,9 +35148,7 @@ /area/medical/sleeper) "bzT" = ( /obj/structure/chair/office/dark, -/obj/effect/landmark/start{ - name = "Quartermaster" - }, +/obj/effect/landmark/start/quartermaster, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -35082,9 +35210,7 @@ /obj/structure/chair/office/dark{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Shaft Miner" - }, +/obj/effect/landmark/start/shaft_miner, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/quartermaster/miningdock) @@ -35310,9 +35436,7 @@ /turf/open/floor/plating, /area/maintenance/aft) "bAy" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plasteel/black{ name = "Server Walkway"; initial_gas_mix = "n2=500;TEMP=80" @@ -35488,13 +35612,8 @@ }, /area/hallway/primary/aft) "bAQ" = ( -/obj/effect/landmark{ - name = "blobstart" - }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/blobstart, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/engine, /area/toxins/explab) "bAR" = ( @@ -35577,9 +35696,7 @@ /turf/open/floor/plasteel, /area/quartermaster/miningdock) "bBb" = ( -/obj/effect/landmark/start{ - name = "Medical Doctor" - }, +/obj/effect/landmark/start/medical_doctor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -35958,6 +36075,14 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay) +"bBM" = ( +/obj/structure/table, +/obj/item/stack/sheet/glass{ + amount = 10 + }, +/obj/item/device/multitool, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) "bBN" = ( /turf/closed/wall, /area/medical/cmo) @@ -36525,9 +36650,7 @@ /area/medical/cmo) "bCZ" = ( /obj/structure/chair/office/light, -/obj/effect/landmark/start{ - name = "Chief Medical Officer" - }, +/obj/effect/landmark/start/chief_medical_officer, /turf/open/floor/plasteel/barber, /area/medical/cmo) "bDa" = ( @@ -36924,9 +37047,7 @@ /turf/open/floor/plasteel/barber, /area/medical/cmo) "bDT" = ( -/obj/effect/landmark/start{ - name = "Medical Doctor" - }, +/obj/effect/landmark/start/medical_doctor, /turf/open/floor/plasteel/white, /area/medical/sleeper) "bDU" = ( @@ -36962,6 +37083,16 @@ }, /turf/open/floor/plasteel/white, /area/medical/sleeper) +"bDX" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/mob/living/simple_animal/mouse, +/turf/open/floor/plasteel/floorgrime, +/area/toxins/storage) "bDY" = ( /obj/structure/cable{ d1 = 4; @@ -36969,10 +37100,7 @@ icon_state = "4-8"; pixel_y = 0 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plasteel/floorgrime, /area/toxins/storage) "bDZ" = ( @@ -37391,9 +37519,7 @@ /turf/open/floor/plating, /area/maintenance/aft) "bEQ" = ( -/obj/effect/landmark/start{ - name = "Shaft Miner" - }, +/obj/effect/landmark/start/shaft_miner, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/quartermaster/miningdock) @@ -37519,9 +37645,7 @@ icon_state = "4-8"; pixel_x = 0 }, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -37552,9 +37676,7 @@ /area/storage/tech) "bFf" = ( /obj/structure/chair/stool, -/obj/effect/landmark/start{ - name = "Janitor" - }, +/obj/effect/landmark/start/janitor, /turf/open/floor/plasteel, /area/janitor) "bFg" = ( @@ -37923,7 +38045,8 @@ /area/toxins/mixing) "bFY" = ( /obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" + req_access_txt = "0"; + req_one_access_txt = "8;12" }, /obj/structure/cable{ d1 = 1; @@ -37997,9 +38120,7 @@ /area/quartermaster/miningdock) "bGk" = ( /obj/structure/chair/stool, -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /turf/open/floor/plasteel/white, /area/toxins/mixing) "bGl" = ( @@ -38198,7 +38319,7 @@ /obj/machinery/door/firedoor/heavy, /obj/machinery/door/airlock/research{ name = "Toxins Launch Room Access"; - req_access_txt = "8" + req_access_txt = "7" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -38548,7 +38669,7 @@ /obj/machinery/door/firedoor/heavy, /obj/machinery/door/airlock/research{ name = "Toxins Lab"; - req_access_txt = "8" + req_access_txt = "7" }, /turf/open/floor/plasteel/white, /area/toxins/mixing) @@ -38681,10 +38802,16 @@ dir = 8 }, /area/quartermaster/miningdock) -"bHC" = ( -/obj/effect/landmark{ - name = "blobstart" +"bHB" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/mob/living/simple_animal/mouse, +/turf/open/floor/plating, +/area/maintenance/asmaint) +"bHC" = ( +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/aft) "bHD" = ( @@ -38755,10 +38882,7 @@ icon_state = "4-8"; pixel_x = 0 }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/storage/tech) "bHK" = ( @@ -39438,7 +39562,7 @@ "bIS" = ( /obj/machinery/door/airlock/research{ name = "Toxins Launch Room"; - req_access_txt = "8" + req_access_txt = "7" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -39795,9 +39919,7 @@ }, /area/hallway/primary/aft) "bJA" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -39937,6 +40059,10 @@ }, /turf/open/floor/plasteel, /area/toxins/misc_lab) +"bJP" = ( +/obj/machinery/vending/boozeomat, +/turf/open/floor/plasteel/bar, +/area/maintenance/aft) "bJQ" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, @@ -40240,9 +40366,7 @@ /area/maintenance/asmaint) "bKx" = ( /obj/structure/closet/crate, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -40309,9 +40433,7 @@ /obj/structure/chair/office/dark{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Cargo Technician" - }, +/obj/effect/landmark/start/cargo_technician, /turf/open/floor/plasteel, /area/quartermaster/office) "bKG" = ( @@ -42572,9 +42694,7 @@ /turf/open/floor/plasteel/white, /area/toxins/xenobiology) "bPy" = ( -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -42750,6 +42870,16 @@ /obj/item/weapon/shard, /turf/open/floor/plating, /area/maintenance/aft) +"bPV" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Maint Bar Access"; + req_access_txt = "12" + }, +/obj/structure/barricade/wooden{ + name = "wooden barricade (CLOSED)" + }, +/turf/open/floor/plating, +/area/maintenance/aft) "bPW" = ( /obj/effect/decal/cleanable/oil, /turf/open/floor/plating, @@ -43047,9 +43177,7 @@ /turf/open/floor/plasteel, /area/toxins/misc_lab) "bQJ" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plasteel/white, /area/medical/virology) "bQK" = ( @@ -43199,6 +43327,32 @@ /obj/structure/rack, /turf/open/floor/plating, /area/maintenance/asmaint2) +"bRc" = ( +/obj/structure/table/wood, +/obj/item/weapon/soap/nanotrasen, +/turf/open/floor/wood{ + icon_state = "wood-broken7" + }, +/area/maintenance/aft) +"bRd" = ( +/obj/structure/table, +/obj/machinery/chem_dispenser/drinks/beer, +/turf/open/floor/wood, +/area/maintenance/aft) +"bRe" = ( +/obj/structure/table/wood, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 4; + name = "4maintenance loot spawner" + }, +/turf/open/floor/wood, +/area/maintenance/aft) +"bRf" = ( +/obj/structure/table/wood, +/turf/open/floor/wood{ + icon_state = "wood-broken5" + }, +/area/maintenance/aft) "bRg" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance{ @@ -43306,9 +43460,7 @@ /obj/structure/chair{ dir = 8 }, -/obj/effect/landmark/start{ - name = "Atmospheric Technician" - }, +/obj/effect/landmark/start/atmospheric_technician, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/atmos) @@ -43345,9 +43497,7 @@ /obj/structure/chair/office/dark{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Atmospheric Technician" - }, +/obj/effect/landmark/start/atmospheric_technician, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; external_pressure_bound = 101.325; @@ -43698,9 +43848,7 @@ /area/toxins/misc_lab) "bSk" = ( /obj/machinery/magnetic_module, -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/structure/target_stake, /obj/effect/turf_decal/bot{ dir = 2 @@ -43741,6 +43889,10 @@ /obj/machinery/space_heater, /turf/open/floor/wood, /area/maintenance/aft) +"bSo" = ( +/obj/structure/chair/stool, +/turf/open/floor/wood, +/area/maintenance/aft) "bSp" = ( /obj/structure/grille/broken, /turf/open/floor/plating, @@ -43776,6 +43928,12 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/tcommsat/computer) +"bSu" = ( +/obj/item/stack/cable_coil{ + amount = 5 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "bSv" = ( /obj/machinery/camera{ c_tag = "Construction Area"; @@ -44087,9 +44245,7 @@ /turf/open/floor/plasteel/white, /area/medical/virology) "bSZ" = ( -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/engine, /area/toxins/xenobiology) "bTa" = ( @@ -44318,6 +44474,16 @@ }, /turf/open/floor/plating, /area/maintenance/aft) +"bTw" = ( +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" + }, +/obj/machinery/atmospherics/pipe/simple/general/hidden{ + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/aft) "bTx" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ icon_state = "connector_map"; @@ -45552,9 +45718,7 @@ "bWk" = ( /obj/structure/bed, /obj/item/weapon/bedsheet, -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/white, /area/medical/virology) "bWl" = ( @@ -45619,9 +45783,7 @@ /area/toxins/misc_lab) "bWp" = ( /obj/structure/chair/office/light, -/obj/effect/landmark/start{ - name = "Scientist" - }, +/obj/effect/landmark/start/scientist, /turf/open/floor/plasteel/floorgrime, /area/toxins/misc_lab) "bWq" = ( @@ -45937,9 +46099,7 @@ /obj/structure/chair/office/light{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Virologist" - }, +/obj/effect/landmark/start/virologist, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -45971,9 +46131,7 @@ /turf/open/floor/plasteel/white, /area/medical/virology) "bXe" = ( -/obj/effect/landmark{ - name = "revenantspawn" - }, +/obj/effect/landmark/revenantspawn, /mob/living/simple_animal/slime, /turf/open/floor/engine, /area/toxins/xenobiology) @@ -46215,9 +46373,7 @@ /turf/open/floor/plasteel/floorgrime, /area/maintenance/aft) "bXx" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plasteel/floorgrime, /area/maintenance/aft) "bXy" = ( @@ -46440,10 +46596,7 @@ /turf/open/floor/engine/plasma, /area/atmos) "bXY" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/engine/plasma, /area/atmos) "bXZ" = ( @@ -47425,6 +47578,14 @@ initial_gas_mix = "n2=100;TEMP=80" }, /area/tcommsat/server) +"cak" = ( +/obj/machinery/telecomms/hub/preset, +/turf/open/floor/plasteel/vault{ + dir = 8; + name = "Mainframe Floor"; + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/tcommsat/server) "cal" = ( /obj/machinery/door/airlock/glass_engineering{ cyclelinkeddir = 4; @@ -47492,6 +47653,12 @@ }, /turf/open/floor/plating, /area/maintenance/aft) +"car" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/closed/wall, +/area/maintenance/aft) "cas" = ( /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" @@ -49021,9 +49188,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "cdp" = ( -/obj/effect/landmark{ - name = "lightsout" - }, +/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; @@ -49275,6 +49440,13 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/asmaint2) +"cdP" = ( +/obj/machinery/door/window{ + name = "Ready Room"; + req_access_txt = "150" + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) "cdQ" = ( /obj/structure/closet/emcloset, /obj/effect/decal/cleanable/cobweb, @@ -49705,9 +49877,7 @@ /turf/open/floor/plasteel, /area/toxins/misc_lab) "ceR" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/asmaint2) "ceS" = ( @@ -49830,6 +50000,12 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/aft) +"cff" = ( +/obj/machinery/vending/tool, +/turf/open/floor/plasteel/yellow/corner{ + dir = 1 + }, +/area/engine/engineering) "cfg" = ( /obj/structure/cable{ d1 = 1; @@ -49983,12 +50159,37 @@ dir = 1 }, /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/open/floor/plasteel, +/area/engine/engineering) "cfB" = ( /obj/structure/closet/secure_closet/engineering_personal, /turf/open/floor/plasteel/yellow/side{ dir = 4 }, /area/engine/engineering) +"cfC" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) "cfD" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/maintenance{ @@ -50225,10 +50426,7 @@ /turf/open/floor/plating, /area/maintenance/incinerator) "cgc" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating{ icon_state = "platingdmg3" }, @@ -50559,11 +50757,27 @@ dir = 2 }, /area/engine/chiefs_office) +"cgN" = ( +/obj/structure/closet/radiation, +/turf/open/floor/plasteel, +/area/engine/engineering) "cgO" = ( /turf/open/floor/plasteel/neutral{ dir = 2 }, /area/engine/chiefs_office) +"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/open/floor/plasteel, +/area/engine/engineering) "cgQ" = ( /obj/machinery/camera{ c_tag = "Engineering East"; @@ -51120,6 +51334,15 @@ }, /turf/open/floor/plating, /area/maintenance/aft) +"chU" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/mob/living/simple_animal/mouse, +/turf/open/floor/plating, +/area/maintenance/aft) "chV" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -51142,6 +51365,20 @@ }, /turf/open/floor/engine, /area/engine/engineering) +"chW" = ( +/obj/machinery/camera{ + c_tag = "Engineering Center"; + dir = 2; + pixel_x = 23 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/engine/engineering) "chX" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -51161,6 +51398,12 @@ /obj/machinery/shieldgen, /turf/open/floor/plating, /area/engine/engineering) +"chZ" = ( +/obj/machinery/the_singularitygen{ + anchored = 0 + }, +/turf/open/floor/plating, +/area/engine/engineering) "cia" = ( /obj/machinery/light{ dir = 1 @@ -51313,13 +51556,20 @@ dir = 2 }, /area/engine/chiefs_office) +"cil" = ( +/obj/structure/rack{ + dir = 8; + layer = 2.9 + }, +/obj/item/clothing/gloves/color/yellow, +/obj/item/weapon/storage/belt/utility, +/turf/open/floor/plasteel, +/area/engine/engineering) "cim" = ( /obj/structure/chair/office/light{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Chief Engineer" - }, +/obj/effect/landmark/start/chief_engineer, /turf/open/floor/plasteel/neutral{ dir = 2 }, @@ -51579,10 +51829,19 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/aft) -"ciW" = ( -/obj/effect/landmark{ - name = "blobstart" +"ciV" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"ciW" = ( +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/engine/engineering) "ciX" = ( @@ -51670,9 +51929,7 @@ /obj/structure/chair/office/dark{ dir = 1 }, -/obj/effect/landmark/start{ - name = "Station Engineer" - }, +/obj/effect/landmark/start/station_engineer, /turf/open/floor/plasteel, /area/engine/engineering) "cjg" = ( @@ -51755,6 +52012,9 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"cjn" = ( +/turf/open/floor/wood, +/area/space/nearstation) "cjo" = ( /obj/structure/closet/toolcloset, /turf/open/floor/plasteel, @@ -52047,6 +52307,10 @@ dir = 2 }, /area/engine/chiefs_office) +"cjZ" = ( +/obj/structure/sign/securearea, +/turf/closed/wall/r_wall, +/area/engine/engineering) "cka" = ( /obj/machinery/door/poddoor/preopen{ id = "testlab"; @@ -52518,9 +52782,7 @@ /turf/open/floor/engine/air, /area/atmos) "cld" = ( -/obj/effect/landmark{ - name = "blobstart" - }, +/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/components/binary/pump{ dir = 4; @@ -52810,6 +53072,22 @@ /obj/structure/window/fulltile, /turf/open/floor/plating, /area/engine/engineering) +"clK" = ( +/obj/item/device/radio/intercom{ + desc = "Talk through this. Evilly"; + freerange = 1; + frequency = 1213; + name = "Syndicate Intercom"; + pixel_y = -32; + subspace_transmission = 1; + syndie = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) +"clL" = ( +/obj/structure/closet/syndicate/personal, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) "clM" = ( /obj/structure/table, /obj/item/weapon/crowbar/large, @@ -52881,15 +53159,19 @@ /turf/open/floor/plasteel/bar, /area/crew_quarters/bar) "clY" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/engine/air, /area/atmos) "clZ" = ( /turf/open/floor/engine/air, /area/atmos) +"cma" = ( +/obj/machinery/door/window{ + name = "Cockpit"; + req_access_txt = "150" + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) "cmb" = ( /obj/structure/grille, /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, @@ -52971,6 +53253,13 @@ }, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) +"cmm" = ( +/obj/structure/chair{ + dir = 8; + name = "tactical chair" + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) "cmn" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, @@ -52989,10 +53278,7 @@ /turf/closed/wall/mineral/plastitanium, /area/shuttle/syndicate) "cmq" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, +/obj/effect/landmark/xeno_spawn, /obj/structure/disposalpipe/segment, /turf/open/floor/plating{ icon_state = "platingdmg3" @@ -53153,6 +53439,26 @@ dir = 9 }, /area/engine/engineering) +"cmH" = ( +/obj/structure/table, +/obj/item/stack/cable_coil, +/obj/item/weapon/crowbar/red, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) +"cmI" = ( +/obj/machinery/vending/engivend, +/turf/open/floor/plasteel/yellow/side{ + dir = 1 + }, +/area/engine/engineering) +"cmJ" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/zipties{ + pixel_x = 1; + pixel_y = 2 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) "cmK" = ( /obj/machinery/requests_console{ announcementConsole = 0; @@ -53180,6 +53486,12 @@ dir = 1 }, /area/engine/engineering) +"cmM" = ( +/obj/machinery/sleeper/syndie{ + dir = 4 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/syndicate) "cmN" = ( /obj/structure/sign/nosmoking_2{ pixel_y = 32 @@ -53194,6 +53506,13 @@ dir = 1 }, /area/engine/engineering) +"cmO" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/mineral/titanium, +/area/shuttle/syndicate) +"cmP" = ( +/turf/open/floor/mineral/titanium, +/area/shuttle/syndicate) "cmQ" = ( /obj/structure/cable{ d1 = 4; @@ -53203,6 +53522,34 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"cmR" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"cmS" = ( +/obj/structure/table, +/obj/item/stack/medical/ointment, +/obj/item/stack/medical/bruise_pack, +/obj/structure/extinguisher_cabinet{ + pixel_x = -5; + pixel_y = 30 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/syndicate) +"cmT" = ( +/obj/machinery/suit_storage_unit/syndicate, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) "cmU" = ( /obj/machinery/light/small, /turf/open/floor/engine/n2, @@ -53321,6 +53668,12 @@ /obj/item/weapon/clipboard, /turf/open/floor/plating, /area/maintenance/asmaint) +"cnh" = ( +/obj/structure/chair/stool{ + pixel_y = 8 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) "cni" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; @@ -53448,6 +53801,10 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/engine/engineering) +"cns" = ( +/obj/structure/closet/syndicate/nuclear, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) "cnt" = ( /obj/machinery/camera{ c_tag = "Engineering West"; @@ -53459,18 +53816,29 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/landmark/start{ - name = "Station Engineer" - }, +/obj/effect/landmark/start/station_engineer, /turf/open/floor/plasteel/yellow/corner{ dir = 1 }, /area/engine/engineering) +"cnu" = ( +/obj/structure/table, +/obj/item/device/aicard, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) "cnv" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/engine/engineering) +"cnw" = ( +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plasteel, +/area/engine/engineering) "cnx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -53486,11 +53854,13 @@ /turf/open/floor/engine, /area/engine/engineering) "cny" = ( -/obj/effect/landmark/start{ - name = "Station Engineer" - }, +/obj/effect/landmark/start/station_engineer, /turf/open/floor/plasteel, /area/engine/engineering) +"cnz" = ( +/obj/structure/tank_dispenser/oxygen, +/turf/open/floor/mineral/titanium, +/area/shuttle/syndicate) "cnA" = ( /obj/structure/cable{ d1 = 1; @@ -53570,6 +53940,30 @@ }, /turf/open/floor/plating, /area/maintenance/asmaint2) +"cnI" = ( +/obj/structure/table, +/obj/item/weapon/c4{ + pixel_x = 2; + pixel_y = -5 + }, +/obj/item/weapon/c4{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/weapon/c4{ + pixel_x = 2; + pixel_y = -3 + }, +/obj/item/weapon/c4{ + pixel_x = -2; + pixel_y = -1 + }, +/obj/item/weapon/c4{ + pixel_x = 3; + pixel_y = 3 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) "cnJ" = ( /obj/structure/disposalpipe/segment, /obj/effect/spawner/lootdrop/maintenance, @@ -53702,6 +54096,10 @@ }, /turf/open/floor/plasteel, /area/engine/engine_smes) +"cnT" = ( +/obj/structure/sign/bluecross_2, +/turf/closed/wall/mineral/plastitanium, +/area/shuttle/syndicate) "cnU" = ( /obj/structure/cable{ d1 = 4; @@ -53720,6 +54118,10 @@ }, /turf/open/floor/plasteel/loadingarea, /area/engine/engineering) +"cnV" = ( +/obj/structure/bed/roller, +/turf/open/floor/mineral/titanium, +/area/shuttle/syndicate) "cnW" = ( /turf/open/space, /turf/closed/wall/mineral/plastitanium{ @@ -53807,17 +54209,106 @@ }, /turf/open/floor/engine, /area/engine/engineering) +"cod" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/weapon/storage/firstaid/fire, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = -3; + pixel_y = -3 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/syndicate) +"coe" = ( +/obj/machinery/door/window{ + dir = 4; + name = "EVA Storage"; + req_access_txt = "150" + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) "cof" = ( /obj/machinery/door/airlock/external{ req_access_txt = "150" }, /turf/open/floor/mineral/plastitanium, /area/shuttle/syndicate) +"cog" = ( +/obj/machinery/door/window{ + base_state = "right"; + dir = 4; + icon_state = "right"; + name = "EVA Storage"; + req_access_txt = "150" + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) "coh" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/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/open/floor/mineral/plastitanium, +/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/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) +"cok" = ( +/obj/machinery/recharge_station, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) +"col" = ( +/obj/machinery/door/window{ + dir = 4; + name = "Infirmary"; + req_access_txt = "150" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/syndicate) +"com" = ( +/obj/machinery/door/window{ + base_state = "right"; + dir = 4; + icon_state = "right"; + name = "Infirmary"; + req_access_txt = "150" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/syndicate) +"con" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/table, +/obj/item/bodypart/r_arm/robot, +/obj/item/bodypart/l_arm/robot, +/turf/open/floor/mineral/titanium, +/area/shuttle/syndicate) +"coo" = ( +/obj/structure/table, +/obj/item/weapon/stock_parts/cell/high{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/weapon/stock_parts/cell/high, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) "cop" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ dir = 1; @@ -53993,6 +54484,44 @@ }, /turf/open/floor/plasteel, /area/engine/engine_smes) +"coD" = ( +/obj/structure/table, +/obj/item/weapon/wrench, +/obj/item/device/assembly/infra, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) +"coE" = ( +/obj/structure/table, +/obj/item/weapon/screwdriver{ + pixel_y = 9 + }, +/obj/item/device/assembly/voice{ + pixel_y = 3 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) +"coF" = ( +/obj/structure/table, +/obj/item/weapon/weldingtool/largetank{ + pixel_y = 3 + }, +/obj/item/device/multitool, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) +"coG" = ( +/obj/structure/table, +/obj/item/device/assembly/signaler, +/obj/item/device/assembly/signaler, +/obj/item/device/assembly/prox_sensor{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/device/assembly/prox_sensor{ + pixel_x = -8; + pixel_y = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) "coH" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -54004,6 +54533,12 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"coI" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/syndicate) "coJ" = ( /obj/machinery/door/firedoor, /obj/structure/cable/yellow{ @@ -54061,6 +54596,51 @@ }, /turf/open/floor/engine, /area/engine/engineering) +"coN" = ( +/obj/machinery/door/window/westright{ + name = "Tool Storage"; + req_access_txt = "150" + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) +"coO" = ( +/obj/structure/table, +/obj/item/weapon/storage/toolbox/syndicate, +/obj/item/weapon/crowbar/red, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) +"coP" = ( +/obj/machinery/door/window{ + dir = 1; + name = "Surgery"; + req_access_txt = "150" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/syndicate) +"coQ" = ( +/obj/structure/table, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/weapon/storage/firstaid/brute, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = -3; + pixel_y = -3 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/syndicate) +"coR" = ( +/obj/machinery/door/window{ + dir = 8; + name = "Tool Storage"; + req_access_txt = "150" + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) "coS" = ( /obj/structure/rack, /obj/item/weapon/gun/energy/laser{ @@ -54088,6 +54668,52 @@ }, /turf/open/floor/engine, /area/toxins/misc_lab) +"coU" = ( +/obj/structure/table, +/obj/item/weapon/surgicaldrill, +/obj/item/weapon/circular_saw, +/turf/open/floor/mineral/titanium, +/area/shuttle/syndicate) +"coV" = ( +/obj/structure/sink{ + dir = 4; + icon_state = "sink"; + pixel_x = 11; + pixel_y = 0 + }, +/obj/structure/mirror{ + pixel_x = 30 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/syndicate) +"coW" = ( +/obj/structure/table, +/obj/item/device/sbeacondrop/bomb{ + pixel_y = 5 + }, +/obj/item/device/sbeacondrop/bomb, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) +"coX" = ( +/obj/structure/table, +/obj/item/weapon/grenade/syndieminibomb{ + pixel_x = 4; + pixel_y = 2 + }, +/obj/item/weapon/grenade/syndieminibomb{ + pixel_x = -1 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) +"coY" = ( +/obj/machinery/nuclearbomb/syndicate, +/obj/machinery/door/window{ + dir = 1; + name = "Secure Storage"; + req_access_txt = "150" + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) "coZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 @@ -54130,6 +54756,12 @@ }, /turf/open/space, /area/space) +"cpf" = ( +/obj/machinery/telecomms/allinone{ + intercept = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) "cpg" = ( /obj/item/weapon/grenade/barrier{ pixel_x = 4 @@ -54242,6 +54874,12 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"cpr" = ( +/obj/structure/table, +/obj/item/weapon/cautery, +/obj/item/weapon/scalpel, +/turf/open/floor/mineral/titanium, +/area/shuttle/syndicate) "cps" = ( /obj/structure/table, /obj/item/stack/sheet/glass{ @@ -54294,6 +54932,12 @@ }, /turf/open/floor/engine, /area/engine/engineering) +"cpw" = ( +/obj/structure/table, +/obj/item/weapon/retractor, +/obj/item/weapon/hemostat, +/turf/open/floor/mineral/titanium, +/area/shuttle/syndicate) "cpx" = ( /obj/structure/cable{ d1 = 4; @@ -54316,6 +54960,10 @@ }, /turf/open/floor/engine, /area/engine/engineering) +"cpz" = ( +/obj/structure/particle_accelerator/end_cap, +/turf/open/floor/plating, +/area/engine/engineering) "cpA" = ( /obj/structure/cable{ d1 = 1; @@ -54327,6 +54975,17 @@ }, /turf/open/floor/plasteel, /area/ai_monitored/security/armory) +"cpB" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating, +/area/engine/engineering) "cpC" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/effect/landmark/event_spawn, @@ -54350,11 +55009,23 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"cpF" = ( +/obj/structure/table/optable, +/obj/item/weapon/surgical_drapes, +/turf/open/floor/mineral/titanium, +/area/shuttle/syndicate) "cpG" = ( /obj/structure/table/optable, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel/white, /area/medical/sleeper) +"cpH" = ( +/obj/structure/shuttle/engine/heater, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/floor/plating, +/area/shuttle/syndicate) "cpI" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 4; @@ -54841,6 +55512,16 @@ dir = 8 }, /area/ai_monitored/security/armory) +"cqH" = ( +/obj/item/weapon/screwdriver, +/turf/open/floor/plating, +/area/engine/engineering) +"cqI" = ( +/obj/structure/shuttle/engine/propulsion{ + icon_state = "propulsion_l" + }, +/turf/open/floor/plating, +/area/shuttle/syndicate) "cqJ" = ( /obj/structure/cable, /obj/structure/lattice/catwalk, @@ -54931,6 +55612,35 @@ /obj/machinery/portable_atmospherics/canister, /turf/open/floor/plasteel/black, /area/engine/engineering) +"cqV" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"cqW" = ( +/obj/machinery/power/rad_collector{ + anchored = 1 + }, +/obj/item/weapon/tank/internals/plasma, +/obj/structure/cable/yellow, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"cqX" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating, +/area/engine/engineering) "cqY" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, @@ -54981,6 +55691,31 @@ }, /turf/open/floor/plasteel/black, /area/engine/engineering) +"cre" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; + icon_state = "space"; + layer = 4; + name = "EXTERNAL AIRLOCK"; + pixel_x = -32 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"crf" = ( +/obj/structure/shuttle/engine/propulsion{ + icon_state = "propulsion_r" + }, +/turf/open/floor/plating, +/area/shuttle/syndicate) +"crg" = ( +/obj/structure/shuttle/engine/propulsion, +/turf/open/floor/plating, +/area/shuttle/syndicate) "crh" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -55050,10 +55785,6 @@ icon_state = "0-8" }, /obj/structure/grille, -/obj/machinery/door/poddoor/preopen{ - id = "Secure Gate"; - name = "brig shutters" - }, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating, /area/engine/engineering) @@ -55367,6 +56098,18 @@ }, /turf/open/floor/plasteel/black, /area/engine/engineering) +"csf" = ( +/obj/machinery/power/emitter{ + anchored = 1; + dir = 8; + state = 2 + }, +/obj/structure/cable{ + icon_state = "0-4"; + d2 = 4 + }, +/turf/open/floor/plating/airless, +/area/engine/engineering) "csg" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 1; @@ -55376,6 +56119,12 @@ }, /turf/open/floor/plating, /area/engine/engineering) +"csh" = ( +/obj/structure/transit_tube{ + icon_state = "D-SW" + }, +/turf/open/space, +/area/space) "csi" = ( /obj/structure/transit_tube/curved/flipped{ dir = 1 @@ -55414,6 +56163,12 @@ /obj/structure/transit_tube/crossing/horizontal, /turf/open/space, /area/space) +"csp" = ( +/obj/structure/transit_tube{ + icon_state = "E-W-Pass" + }, +/turf/open/space, +/area/space) "csq" = ( /obj/machinery/computer/security/telescreen{ desc = "Used for watching the turbine vent."; @@ -55455,6 +56210,15 @@ /obj/machinery/atmospherics/pipe/heat_exchanging/simple, /turf/open/space, /area/space) +"cst" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/grille, +/turf/open/floor/plating/airless, +/area/engine/engineering) "csu" = ( /obj/structure/closet/firecloset, /turf/open/floor/plasteel/black, @@ -55486,9 +56250,7 @@ /turf/open/floor/plating, /area/maintenance/asmaint2) "csz" = ( -/obj/effect/landmark{ - name = "carpspawn" - }, +/obj/effect/landmark/carpspawn, /turf/open/space, /area/space/nearstation) "csA" = ( @@ -55507,6 +56269,11 @@ }, /turf/open/floor/plating, /area/engine/supermatter) +"csB" = ( +/obj/item/weapon/wirecutters, +/obj/structure/lattice, +/turf/open/space, +/area/space/nearstation) "csC" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/black, @@ -55524,6 +56291,28 @@ /obj/structure/lattice/catwalk, /turf/open/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/closed/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/open/floor/plating/airless, +/area/engine/engineering) "csH" = ( /obj/machinery/atmospherics/pipe/simple/general/visible, /obj/effect/turf_decal/stripes/line{ @@ -55542,6 +56331,25 @@ /obj/machinery/atmospherics/pipe/simple/general/visible, /turf/open/floor/engine, /area/engine/engineering) +"csK" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/grille, +/turf/open/floor/plating/airless, +/area/engine/engineering) +"csL" = ( +/obj/structure/transit_tube{ + icon_state = "D-NE" + }, +/turf/open/space, +/area/space) "csM" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/yellow/visible, @@ -55591,6 +56399,10 @@ }, /turf/open/floor/engine, /area/engine/engineering) +"csS" = ( +/obj/item/weapon/weldingtool, +/turf/open/space, +/area/space/nearstation) "csT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/landmark/xmastree, @@ -55674,6 +56486,16 @@ /obj/machinery/atmospherics/pipe/simple/yellow/visible, /turf/open/space, /area/space) +"cte" = ( +/obj/item/device/radio/off, +/turf/open/floor/plating/airless, +/area/engine/engineering) +"ctf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 2 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "ctg" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating, @@ -55717,6 +56539,30 @@ }, /turf/closed/wall, /area/ai_monitored/turret_protected/aisat_interior) +"ctl" = ( +/obj/structure/grille, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plating/airless, +/area/engine/engineering) +"ctm" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"ctn" = ( +/obj/structure/grille, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plating/airless, +/area/engine/engineering) "cto" = ( /obj/machinery/door/airlock/hatch{ name = "MiniSat Foyer"; @@ -55838,6 +56684,22 @@ /obj/machinery/power/tracker, /turf/open/floor/plasteel/airless/solarpanel, /area/solar/starboard) +"ctC" = ( +/obj/machinery/camera/emp_proof{ + c_tag = "Singularity West"; + dir = 1; + network = list("Singularity") + }, +/turf/open/floor/plating/airless, +/area/engine/engineering) +"ctD" = ( +/obj/machinery/camera/emp_proof{ + c_tag = "Singularity East"; + dir = 1; + network = list("Singularity") + }, +/turf/open/floor/plating/airless, +/area/engine/engineering) "ctE" = ( /obj/machinery/teleport/hub, /turf/open/floor/plating, @@ -55897,9 +56759,7 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/landmark/start{ - name = "Cyborg" - }, +/obj/effect/landmark/start/cyborg, /turf/open/floor/plasteel/grimy, /area/ai_monitored/turret_protected/aisat_interior) "ctK" = ( @@ -56258,6 +57118,19 @@ dir = 4 }, /area/ai_monitored/turret_protected/aisat_interior) +"cut" = ( +/obj/structure/table, +/obj/item/stack/sheet/metal{ + amount = 50 + }, +/obj/item/stack/sheet/glass{ + amount = 50 + }, +/obj/item/stack/rods{ + amount = 50 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) "cuu" = ( /obj/structure/cable{ d1 = 1; @@ -56940,9 +57813,7 @@ name = "AI Satellite Hallway" }) "cvx" = ( -/obj/effect/landmark{ - name = "tripai" - }, +/obj/effect/landmark/tripai, /obj/item/device/radio/intercom{ anyai = 1; freerange = 1; @@ -56990,9 +57861,7 @@ name = "AI Satellite Hallway" }) "cvA" = ( -/obj/effect/landmark{ - name = "tripai" - }, +/obj/effect/landmark/tripai, /obj/item/device/radio/intercom{ anyai = 1; freerange = 1; @@ -57859,9 +58728,7 @@ /area/shuttle/escape) "cxn" = ( /obj/structure/lattice, -/obj/effect/landmark{ - name = "carpspawn" - }, +/obj/effect/landmark/carpspawn, /turf/open/space, /area/space) "cxo" = ( @@ -57915,6 +58782,11 @@ "cxu" = ( /turf/closed/wall/mineral/titanium, /area/shuttle/transport) +"cxv" = ( +/obj/structure/window/shuttle, +/obj/structure/grille, +/turf/open/floor/plating, +/area/shuttle/transport) "cxw" = ( /obj/structure/grille, /obj/structure/window/shuttle, @@ -57943,6 +58815,10 @@ /obj/structure/window/reinforced, /turf/open/floor/plating, /area/shuttle/transport) +"cxz" = ( +/obj/machinery/computer/shuttle/ferry/request, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/transport) "cxA" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -58011,6 +58887,10 @@ }, /turf/open/floor/plating, /area/security/main) +"cxH" = ( +/obj/structure/closet/crate, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/transport) "cxI" = ( /obj/structure/chair{ dir = 1 @@ -58636,6 +59516,9 @@ /obj/structure/light_construct, /turf/open/floor/plasteel/shuttle/white, /area/shuttle/abandoned) +"czo" = ( +/turf/open/space, +/area/shuttle/syndicate) "czp" = ( /obj/structure/window/reinforced{ dir = 1 @@ -58643,6 +59526,12 @@ /obj/structure/shuttle/engine/heater, /turf/open/floor/plating/airless, /area/shuttle/supply) +"czq" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 5 + }, +/turf/closed/wall/mineral/plastitanium, +/area/shuttle/syndicate) "czr" = ( /obj/machinery/portable_atmospherics/scrubber, /turf/open/floor/mineral/titanium, @@ -58717,6 +59606,12 @@ /obj/structure/light_construct, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) +"czD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "czE" = ( /turf/open/floor/engine, /area/engine/engineering) @@ -59011,6 +59906,15 @@ }, /turf/closed/wall/r_wall, /area/engine/engine_smes) +"cAk" = ( +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4"; + + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "cAl" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -59032,6 +59936,15 @@ /obj/machinery/power/supermatter_shard/crystal, /turf/open/floor/engine, /area/engine/supermatter) +"cAn" = ( +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "cAo" = ( /obj/structure/cable{ d1 = 1; @@ -59112,10 +60025,44 @@ anchored = 1; dir = 4; icon_state = "emitter"; - state = 2 + state = 2; + }, /turf/open/floor/plating, /area/engine/engineering) +"cAv" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4"; + + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"cAw" = ( +/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"; + + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"cAx" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8"; + + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "cAy" = ( /obj/structure/closet/secure_closet/freezer/kitchen/maintenance, /turf/open/floor/plating, @@ -59245,6 +60192,19 @@ }, /turf/open/floor/plating, /area/security/main) +"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" + }, +/turf/open/floor/plating, +/area/engine/engineering) "cAP" = ( /obj/structure/sign/fire, /turf/closed/wall/r_wall, @@ -59267,9 +60227,7 @@ /turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai) "cAS" = ( -/obj/effect/landmark/start{ - name = "AI" - }, +/obj/effect/landmark/start/ai, /obj/item/device/radio/intercom{ broadcasting = 0; freerange = 1; @@ -59517,6 +60475,13 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/hallway/primary/central) +"cBs" = ( +/obj/structure/table/optable{ + name = "Robotics Operating Table" + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/white, +/area/assembly/robotics) "cBt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -59724,6 +60689,15 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/engine/air, /area/atmos) +"cBQ" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/plating, +/area/engine/engineering) "cBR" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -59819,6 +60793,12 @@ /obj/item/clothing/under/burial, /turf/open/floor/plasteel/grimy, /area/chapel/office) +"cCa" = ( +/obj/structure/chair/stool, +/turf/open/floor/wood{ + icon_state = "wood-broken5" + }, +/area/space/nearstation) "cCb" = ( /obj/structure/table, /obj/item/stack/cable_coil{ @@ -59943,6 +60923,10 @@ /obj/machinery/deepfryer, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/kitchen) +"cCr" = ( +/obj/machinery/deepfryer, +/turf/open/floor/plasteel/cafeteria, +/area/crew_quarters/kitchen) "cCs" = ( /obj/structure/mining_shuttle_beacon{ dir = 4 @@ -59962,6 +60946,9 @@ /obj/machinery/door/airlock/external, /turf/open/floor/pod/dark, /area/shuttle/transport) +"cCv" = ( +/turf/open/floor/pod/light, +/area/space) "cCw" = ( /obj/machinery/door/airlock/titanium, /turf/open/floor/pod/light, @@ -59985,6 +60972,9 @@ /obj/machinery/door/airlock/external, /turf/open/floor/pod/light, /area/shuttle/transport) +"cCA" = ( +/turf/open/floor/pod/light, +/area/space) "cCB" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 10; @@ -60052,6 +61042,37 @@ /obj/machinery/atmospherics/pipe/simple/orange/visible, /turf/open/space, /area/space/nearstation) +"cCK" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/space, +/area/space/nearstation) +"cCL" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/space, +/area/space/nearstation) +"cCM" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/space, +/area/space/nearstation) +"cCN" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/space, +/area/space/nearstation) +"cCO" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/space, +/area/space/nearstation) "cCP" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/orange/visible{ @@ -60066,6 +61087,13 @@ }, /turf/open/space, /area/space/nearstation) +"cCR" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 10 + }, +/turf/open/space, +/area/space/nearstation) "cCS" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible, /obj/structure/lattice, @@ -60080,10 +61108,25 @@ /obj/structure/closet/firecloset, /turf/open/floor/plasteel, /area/engine/engineering) +"cCU" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/obj/structure/lattice, +/turf/open/space, +/area/space/nearstation) +"cCV" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/space, +/area/space/nearstation) "cCW" = ( /obj/machinery/portable_atmospherics/canister/freon, /turf/open/floor/plating, /area/engine/engineering) +"cCX" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/space, +/area/space/nearstation) "cCY" = ( /obj/structure/cable{ d1 = 1; @@ -60091,16 +61134,44 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/landmark/start{ - name = "Station Engineer" - }, +/obj/effect/landmark/start/station_engineer, /turf/open/floor/plasteel, /area/engine/engineering) +"cCZ" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/space, +/area/space/nearstation) +"cDa" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/space, +/area/space/nearstation) +"cDb" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/space, +/area/space/nearstation) +"cDc" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/space, +/area/space/nearstation) +"cDd" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/space, +/area/space/nearstation) "cDe" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/closet/radiation, /turf/open/floor/plasteel, /area/engine/engineering) +"cDf" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/space, +/area/space/nearstation) "cDg" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -60198,6 +61269,11 @@ /obj/machinery/vending/engivend, /turf/open/floor/plasteel, /area/engine/engineering) +"cDn" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/space, +/area/space/nearstation) "cDo" = ( /obj/structure/cable{ d1 = 1; @@ -60220,6 +61296,15 @@ }, /turf/open/floor/engine, /area/engine/engineering) +"cDq" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/engine, +/area/engine/engineering) "cDr" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; @@ -60262,6 +61347,11 @@ }, /turf/open/floor/engine, /area/engine/engineering) +"cDu" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/space, +/area/space/nearstation) "cDv" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/components/trinary/filter/flipped{ @@ -60270,6 +61360,13 @@ }, /turf/open/floor/engine, /area/engine/engineering) +"cDw" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) "cDx" = ( /obj/structure/cable{ d1 = 1; @@ -60299,13 +61396,16 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"cDA" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/space, +/area/space/nearstation) "cDB" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Station Engineer" - }, +/obj/effect/landmark/start/station_engineer, /turf/open/floor/plasteel, /area/engine/engineering) "cDC" = ( @@ -60399,12 +61499,42 @@ }, /turf/closed/wall/r_wall, /area/engine/engineering) +"cDM" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) "cDN" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 }, /turf/closed/wall, /area/engine/engineering) +"cDO" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/closed/wall, +/area/engine/engineering) +"cDP" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/closed/wall, +/area/engine/engineering) +"cDQ" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/closed/wall, +/area/engine/engineering) +"cDR" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) "cDS" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/orange/visible{ @@ -60412,6 +61542,41 @@ }, /turf/open/space, /area/space) +"cDT" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/open/space, +/area/space) +"cDU" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/open/space, +/area/space) +"cDV" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/open/space, +/area/space) +"cDW" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/open/space, +/area/space/nearstation) +"cDX" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/open/space, +/area/space/nearstation) "cDY" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/orange/visible{ @@ -60436,6 +61601,26 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel/black, /area/engine/engineering) +"cEb" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/black, +/area/engine/engineering) +"cEc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/general/visible, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/engine, +/area/engine/engineering) "cEd" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line{ @@ -60501,6 +61686,9 @@ }, /turf/open/floor/engine, /area/engine/engineering) +"cEj" = ( +/turf/open/floor/plasteel/black, +/area/engine/engineering) "cEk" = ( /obj/machinery/firealarm{ dir = 4; @@ -60515,6 +61703,40 @@ /obj/structure/lattice, /turf/open/space, /area/space) +"cEm" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/turf/open/space, +/area/space) +"cEn" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/obj/structure/lattice, +/turf/open/space, +/area/space) +"cEo" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/turf/open/space, +/area/space) +"cEp" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/turf/open/space, +/area/space) +"cEq" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/turf/open/space, +/area/space) "cEr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line{ @@ -60674,6 +61896,41 @@ }, /turf/open/space, /area/space) +"cEF" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/turf/open/space, +/area/space) +"cEG" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/turf/open/space, +/area/space) +"cEH" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/turf/open/space, +/area/space) +"cEI" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/turf/open/space, +/area/space) +"cEJ" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/turf/open/space, +/area/space) "cEK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 @@ -60712,6 +61969,58 @@ /obj/item/weapon/tank/internals/plasma, /turf/open/floor/plating, /area/engine/supermatter) +"cEN" = ( +/obj/machinery/power/rad_collector{ + anchored = 1 + }, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"cEO" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 8 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"cEP" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"cEQ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"cER" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + icon_state = "manifold"; + dir = 4 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"cES" = ( +/obj/machinery/power/rad_collector{ + anchored = 1 + }, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/engine, +/area/engine/engineering) "cET" = ( /obj/machinery/door/poddoor/shutters/preopen{ id = "engsm"; @@ -60747,6 +62056,9 @@ /obj/machinery/atmospherics/pipe/simple/general/visible, /turf/open/floor/engine, /area/engine/engineering) +"cEV" = ( +/turf/open/floor/plasteel/black, +/area/engine/engineering) "cEW" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ icon_state = "connector_map"; @@ -60758,6 +62070,30 @@ }, /turf/open/floor/plasteel/black, /area/engine/engineering) +"cEX" = ( +/turf/closed/wall/r_wall, +/area/space) +"cEY" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 6 + }, +/obj/structure/lattice, +/turf/open/space, +/area/space) +"cEZ" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/obj/structure/lattice, +/turf/open/space, +/area/space) +"cFa" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/obj/structure/lattice, +/turf/open/space, +/area/space) "cFb" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; @@ -60783,6 +62119,16 @@ }, /turf/open/floor/engine, /area/engine/engineering) +"cFd" = ( +/obj/machinery/power/rad_collector{ + anchored = 1 + }, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/engine, +/area/engine/engineering) "cFe" = ( /obj/structure/grille, /obj/structure/window/reinforced/highpressure/fulltile, @@ -60791,6 +62137,21 @@ }, /turf/open/floor/plating, /area/engine/supermatter) +"cFf" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"cFg" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) "cFh" = ( /obj/structure/grille, /obj/structure/window/reinforced/highpressure/fulltile, @@ -60799,6 +62160,16 @@ }, /turf/open/floor/plating, /area/engine/supermatter) +"cFi" = ( +/obj/machinery/power/rad_collector{ + anchored = 1 + }, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/engine, +/area/engine/engineering) "cFj" = ( /obj/machinery/door/poddoor/shutters/preopen{ id = "engsm"; @@ -60830,6 +62201,9 @@ }, /turf/open/floor/engine, /area/engine/engineering) +"cFl" = ( +/turf/closed/wall/r_wall, +/area/space) "cFm" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple, /obj/structure/lattice, @@ -60849,6 +62223,41 @@ /obj/structure/lattice, /turf/open/space, /area/space) +"cFp" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 6 + }, +/turf/open/space, +/area/space) +"cFq" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 10 + }, +/obj/structure/lattice, +/turf/open/space, +/area/space) +"cFr" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 6 + }, +/turf/open/space, +/area/space) +"cFs" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 10 + }, +/obj/structure/lattice, +/turf/open/space, +/area/space) +"cFt" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 6 + }, +/turf/open/space, +/area/space) "cFu" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -60859,10 +62268,18 @@ /obj/machinery/meter, /turf/open/floor/engine, /area/engine/engineering) +"cFv" = ( +/obj/machinery/status_display, +/turf/closed/wall/r_wall, +/area/engine/engineering) "cFw" = ( /obj/structure/sign/electricshock, /turf/closed/wall/r_wall, /area/engine/supermatter) +"cFx" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall/r_wall, +/area/engine/engineering) "cFy" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 @@ -60883,6 +62300,39 @@ /obj/machinery/atmospherics/pipe/manifold/general/visible, /turf/open/floor/plasteel/black, /area/engine/engineering) +"cFB" = ( +/turf/closed/wall/r_wall, +/area/space) +"cFC" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/turf/open/space, +/area/space) +"cFD" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/turf/open/space, +/area/space) +"cFE" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/turf/open/space, +/area/space) +"cFF" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/turf/open/space, +/area/space) +"cFG" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/turf/open/space, +/area/space) +"cFH" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/turf/open/space, +/area/space) "cFI" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -61017,6 +62467,44 @@ }, /turf/open/floor/plasteel/black, /area/engine/engineering) +"cFV" = ( +/turf/closed/wall/r_wall, +/area/space) +"cFW" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/obj/structure/lattice, +/turf/open/space, +/area/space) +"cFX" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/turf/open/space, +/area/space) +"cFY" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/obj/structure/lattice, +/turf/open/space, +/area/space) +"cFZ" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/turf/open/space, +/area/space) +"cGa" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/obj/structure/lattice, +/turf/open/space, +/area/space) +"cGb" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/turf/open/space, +/area/space) +"cGc" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/obj/structure/lattice, +/turf/open/space, +/area/space) "cGd" = ( /obj/structure/closet/crate/bin, /obj/effect/turf_decal/stripes/line{ @@ -61032,6 +62520,10 @@ }, /turf/open/floor/engine, /area/engine/engineering) +"cGf" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/open/floor/engine, +/area/engine/engineering) "cGg" = ( /obj/structure/cable{ d1 = 2; @@ -61069,6 +62561,29 @@ /obj/structure/closet/secure_closet/engineering_personal, /turf/open/floor/plasteel/black, /area/engine/engineering) +"cGm" = ( +/turf/closed/wall/r_wall, +/area/space) +"cGn" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/obj/structure/lattice, +/turf/open/space, +/area/space) +"cGo" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/obj/structure/lattice, +/turf/open/space, +/area/space) +"cGp" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/obj/structure/lattice, +/turf/open/space, +/area/space) +"cGq" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/obj/structure/lattice, +/turf/open/space, +/area/space) "cGr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 @@ -61115,6 +62630,13 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/engine, /area/engine/engineering) +"cGy" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/engine/engineering) "cGz" = ( /obj/machinery/atmospherics/pipe/manifold/general/visible, /obj/effect/turf_decal/stripes/line, @@ -61132,6 +62654,13 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/engine, /area/engine/engineering) +"cGB" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/engine/engineering) "cGC" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 @@ -61159,6 +62688,15 @@ }, /turf/open/floor/plating, /area/engine/engineering) +"cGF" = ( +/turf/closed/wall/r_wall, +/area/space) +"cGG" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) "cGH" = ( /obj/structure/grille, /obj/structure/window/reinforced/highpressure/fulltile, @@ -61180,6 +62718,19 @@ }, /turf/open/floor/engine, /area/engine/engineering) +"cGJ" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass_engineering{ + name = "Laser Room"; + req_access_txt = "10" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/engine, +/area/engine/engineering) "cGK" = ( /obj/structure/grille, /obj/structure/window/reinforced/highpressure/fulltile, @@ -61200,6 +62751,30 @@ /obj/machinery/atmospherics/pipe/simple/general/visible, /turf/open/floor/plating/airless, /area/engine/engineering) +"cGN" = ( +/turf/closed/wall/r_wall, +/area/space) +"cGO" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 5 + }, +/obj/structure/lattice, +/turf/open/space, +/area/space) +"cGP" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 5 + }, +/obj/structure/lattice, +/turf/open/space, +/area/space) +"cGQ" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 5 + }, +/obj/structure/lattice, +/turf/open/space, +/area/space) "cGR" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; @@ -61236,6 +62811,20 @@ }, /turf/open/floor/plasteel/black, /area/engine/engineering) +"cGW" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/black, +/area/engine/engineering) +"cGX" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/engine/engineering) "cGY" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; @@ -61297,6 +62886,13 @@ }, /turf/open/floor/plating, /area/engine/engineering) +"cHf" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/open/floor/plasteel/black, +/area/engine/engineering) "cHg" = ( /obj/structure/cable{ d1 = 1; @@ -61310,6 +62906,26 @@ }, /turf/open/floor/plating, /area/engine/engineering) +"cHh" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/emitter{ + anchored = 1; + dir = 4; + icon_state = "emitter"; + state = 2 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"cHi" = ( +/obj/structure/reflector/box{ + anchored = 1; + dir = 1 + }, +/turf/open/floor/plasteel/black, +/area/engine/engineering) "cHj" = ( /obj/structure/cable{ icon_state = "0-4"; @@ -61323,10 +62939,26 @@ }, /turf/open/floor/plating, /area/engine/engineering) +"cHk" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/engine/engineering) "cHl" = ( /obj/effect/decal/cleanable/dirt, /turf/closed/wall/r_wall, /area/engine/engineering) +"cHm" = ( +/turf/closed/wall/r_wall, +/area/space) "cHn" = ( /obj/structure/cable{ d1 = 1; @@ -61352,6 +62984,13 @@ }, /turf/open/floor/plating, /area/engine/engineering) +"cHq" = ( +/obj/structure/cable{ + icon_state = "0-4"; + d2 = 4 + }, +/turf/open/floor/plating, +/area/engine/engineering) "cHr" = ( /obj/structure/cable{ d1 = 1; @@ -61365,6 +63004,41 @@ /obj/item/weapon/crowbar/large, /turf/open/floor/plating, /area/engine/engineering) +"cHt" = ( +/turf/closed/wall/r_wall, +/area/space) +"cHu" = ( +/turf/closed/wall/r_wall, +/area/space) +"cHv" = ( +/turf/closed/wall/r_wall, +/area/space) +"cHw" = ( +/turf/closed/wall/r_wall, +/area/space) +"cHx" = ( +/turf/closed/wall/r_wall, +/area/space) +"cHy" = ( +/turf/closed/wall/r_wall, +/area/space) +"cHz" = ( +/turf/closed/wall/r_wall, +/area/space) +"cHA" = ( +/turf/closed/wall/r_wall, +/area/space) +"cHB" = ( +/turf/closed/wall/r_wall, +/area/space) +"cHC" = ( +/obj/structure/chair/stool{ + desc = "Apply butt, tactically."; + name = "tactical stool"; + pixel_y = 8 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate) "cHD" = ( /obj/structure/cable{ d1 = 1; @@ -61642,6 +63316,15 @@ }, /turf/open/floor/plasteel, /area/assembly/robotics) +"cHY" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black, +/area/assembly/robotics) "cHZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -61670,9 +63353,7 @@ "cIc" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/bot, -/obj/effect/landmark/start{ - name = "Roboticist" - }, +/obj/effect/landmark/start/roboticist, /turf/open/floor/plasteel, /area/assembly/robotics) "cId" = ( @@ -61714,6 +63395,27 @@ }, /turf/open/floor/plating, /area/hallway/secondary/entry) +"cIi" = ( +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 1; + name = "Port Docking Bay 1" + }, +/turf/open/floor/plating, +/area/hallway/secondary/entry) +"cIj" = ( +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 1; + name = "Port Docking Bay 1" + }, +/turf/open/floor/plating, +/area/hallway/secondary/entry) +"cIk" = ( +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 1; + name = "Port Docking Bay 1" + }, +/turf/open/floor/plating, +/area/hallway/secondary/entry) "cIl" = ( /obj/machinery/computer/med_data{ icon_keyboard = "syndi_key" @@ -61804,6 +63506,9 @@ }, /turf/open/floor/plasteel/black, /area/shuttle/syndicate) +"cIw" = ( +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) "cIx" = ( /obj/structure/chair/office/dark{ dir = 4; @@ -61827,6 +63532,24 @@ "cIz" = ( /turf/open/floor/plasteel/vault, /area/shuttle/syndicate) +"cIA" = ( +/turf/open/floor/plasteel/vault, +/area/shuttle/syndicate) +"cIB" = ( +/turf/open/floor/plasteel/vault, +/area/shuttle/syndicate) +"cIC" = ( +/turf/open/floor/plasteel/vault, +/area/shuttle/syndicate) +"cID" = ( +/turf/open/floor/plasteel/vault, +/area/shuttle/syndicate) +"cIE" = ( +/turf/open/floor/plasteel/vault, +/area/shuttle/syndicate) +"cIF" = ( +/turf/open/floor/plasteel/vault, +/area/shuttle/syndicate) "cIG" = ( /obj/machinery/status_display, /turf/closed/wall/mineral/plastitanium, @@ -61874,6 +63597,9 @@ dir = 5 }, /area/shuttle/syndicate) +"cIM" = ( +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) "cIN" = ( /obj/structure/chair{ dir = 8; @@ -61896,6 +63622,9 @@ dir = 5 }, /area/shuttle/syndicate) +"cIP" = ( +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) "cIQ" = ( /obj/structure/chair{ dir = 8; @@ -61914,12 +63643,43 @@ dir = 5 }, /area/shuttle/syndicate) +"cIS" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"cIT" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) "cIU" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/plasteel/vault{ dir = 8 }, /area/shuttle/syndicate) +"cIV" = ( +/obj/structure/chair{ + dir = 4; + name = "tactical chair" + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"cIW" = ( +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"cIX" = ( +/obj/structure/chair{ + dir = 8; + name = "tactical chair" + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) "cIY" = ( /obj/machinery/suit_storage_unit/syndicate, /turf/open/floor/plasteel/podhatch{ @@ -61928,12 +63688,45 @@ dir = 4 }, /area/shuttle/syndicate) +"cIZ" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"cJa" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) "cJb" = ( /obj/structure/tank_dispenser/oxygen, /turf/open/floor/plasteel/vault{ dir = 8 }, /area/shuttle/syndicate) +"cJc" = ( +/obj/structure/chair{ + dir = 4; + name = "tactical chair" + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"cJd" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"cJe" = ( +/obj/structure/chair{ + dir = 8; + name = "tactical chair" + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) "cJf" = ( /obj/machinery/door/poddoor{ id = "smindicate"; @@ -61974,6 +63767,24 @@ dir = 1 }, /area/shuttle/syndicate) +"cJg" = ( +/obj/machinery/suit_storage_unit/syndicate, +/turf/open/floor/plasteel/podhatch{ + tag = "icon-podhatch (EAST)"; + icon_state = "podhatch"; + dir = 4 + }, +/area/shuttle/syndicate) +"cJh" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"cJi" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) "cJj" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /obj/machinery/light{ @@ -62017,6 +63828,24 @@ dir = 6 }, /area/shuttle/syndicate) +"cJo" = ( +/obj/machinery/suit_storage_unit/syndicate, +/turf/open/floor/plasteel/podhatch{ + tag = "icon-podhatch (EAST)"; + icon_state = "podhatch"; + dir = 4 + }, +/area/shuttle/syndicate) +"cJp" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"cJq" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) "cJr" = ( /turf/open/floor/plasteel/vault{ dir = 8 @@ -62031,6 +63860,36 @@ dir = 8 }, /area/shuttle/syndicate) +"cJt" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"cJu" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"cJv" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"cJw" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"cJx" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"cJy" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) "cJz" = ( /obj/machinery/suit_storage_unit/syndicate, /turf/open/floor/plasteel/podhatch{ @@ -62039,12 +63898,35 @@ dir = 6 }, /area/shuttle/syndicate) +"cJA" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"cJB" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) "cJC" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plasteel/vault{ dir = 8 }, /area/shuttle/syndicate) +"cJD" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"cJE" = ( +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"cJF" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) "cJG" = ( /obj/structure/chair{ dir = 1; @@ -62054,6 +63936,15 @@ dir = 8 }, /area/shuttle/syndicate) +"cJH" = ( +/obj/structure/chair{ + dir = 1; + name = "tactical chair" + }, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, +/area/shuttle/syndicate) "cJI" = ( /obj/structure/rack, /obj/item/clothing/suit/space/syndicate/black/red, @@ -62066,6 +63957,23 @@ /obj/machinery/ai_status_display, /turf/closed/wall/mineral/plastitanium, /area/shuttle/syndicate) +"cJK" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"cJL" = ( +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"cJM" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"cJN" = ( +/obj/machinery/status_display, +/turf/closed/wall/mineral/plastitanium, +/area/shuttle/syndicate) "cJO" = ( /obj/machinery/sleeper/syndie{ dir = 4 @@ -62074,6 +63982,11 @@ dir = 8 }, /area/shuttle/syndicate) +"cJP" = ( +/turf/open/floor/plasteel/vault{ + dir = 8 + }, +/area/shuttle/syndicate) "cJQ" = ( /obj/machinery/light{ dir = 1 @@ -62128,6 +64041,19 @@ dir = 8 }, /area/shuttle/syndicate) +"cJT" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"cJU" = ( +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) +"cJV" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) "cJW" = ( /obj/item/weapon/stock_parts/cell/high{ pixel_x = -3; @@ -62195,6 +64121,18 @@ dir = 8 }, /area/shuttle/syndicate) +"cKc" = ( +/turf/open/floor/plasteel/vault, +/area/shuttle/syndicate) +"cKd" = ( +/turf/open/floor/plasteel/vault, +/area/shuttle/syndicate) +"cKe" = ( +/turf/open/floor/plasteel/vault, +/area/shuttle/syndicate) +"cKf" = ( +/turf/open/floor/plasteel/vault, +/area/shuttle/syndicate) "cKg" = ( /obj/machinery/light{ icon_state = "tube1"; @@ -62204,6 +64142,9 @@ dir = 5 }, /area/shuttle/syndicate) +"cKh" = ( +/turf/open/floor/plasteel/black, +/area/shuttle/syndicate) "cKi" = ( /obj/machinery/light{ dir = 4 @@ -62212,6 +64153,34 @@ dir = 5 }, /area/shuttle/syndicate) +"cKj" = ( +/turf/open/floor/plasteel/vault, +/area/shuttle/syndicate) +"cKk" = ( +/turf/open/floor/plasteel/vault, +/area/shuttle/syndicate) +"cKl" = ( +/turf/open/floor/plasteel/vault, +/area/shuttle/syndicate) +"cKm" = ( +/turf/open/floor/plasteel/vault, +/area/shuttle/syndicate) +"cKn" = ( +/turf/open/floor/plasteel/vault, +/area/shuttle/syndicate) +"cKo" = ( +/obj/machinery/sleeper/syndie{ + dir = 4 + }, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, +/area/shuttle/syndicate) +"cKp" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) "cKq" = ( /turf/open/floor/plasteel/podhatch{ dir = 9 @@ -62224,6 +64193,13 @@ dir = 1 }, /area/shuttle/syndicate) +"cKs" = ( +/turf/open/floor/plasteel/podhatch{ + tag = "icon-podhatch (NORTH)"; + icon_state = "podhatch"; + dir = 1 + }, +/area/shuttle/syndicate) "cKt" = ( /obj/machinery/door/airlock/hatch{ req_access_txt = "150" @@ -62232,11 +64208,59 @@ dir = 8 }, /area/shuttle/syndicate) +"cKu" = ( +/turf/open/floor/plasteel/podhatch{ + tag = "icon-podhatch (NORTH)"; + icon_state = "podhatch"; + dir = 1 + }, +/area/shuttle/syndicate) +"cKv" = ( +/turf/open/floor/plasteel/podhatch{ + tag = "icon-podhatch (NORTH)"; + icon_state = "podhatch"; + dir = 1 + }, +/area/shuttle/syndicate) +"cKw" = ( +/turf/open/floor/plasteel/podhatch{ + tag = "icon-podhatch (NORTH)"; + icon_state = "podhatch"; + dir = 1 + }, +/area/shuttle/syndicate) +"cKx" = ( +/obj/machinery/door/airlock/hatch{ + req_access_txt = "150" + }, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, +/area/shuttle/syndicate) +"cKy" = ( +/turf/open/floor/plasteel/podhatch{ + tag = "icon-podhatch (NORTH)"; + icon_state = "podhatch"; + dir = 1 + }, +/area/shuttle/syndicate) +"cKz" = ( +/turf/open/floor/plasteel/podhatch{ + tag = "icon-podhatch (NORTH)"; + icon_state = "podhatch"; + dir = 1 + }, +/area/shuttle/syndicate) "cKA" = ( /turf/open/floor/plasteel/podhatch{ dir = 5 }, /area/shuttle/syndicate) +"cKB" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) "cKC" = ( /obj/structure/closet/syndicate/personal, /turf/open/floor/plasteel/vault{ @@ -62252,11 +64276,37 @@ dir = 8 }, /area/shuttle/syndicate) +"cKE" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) "cKF" = ( /turf/open/floor/plasteel/podhatch{ dir = 10 }, /area/shuttle/syndicate) +"cKG" = ( +/turf/open/floor/plasteel/podhatch, +/area/shuttle/syndicate) +"cKH" = ( +/turf/open/floor/plasteel/podhatch, +/area/shuttle/syndicate) +"cKI" = ( +/turf/open/floor/plasteel/podhatch, +/area/shuttle/syndicate) +"cKJ" = ( +/turf/open/floor/plasteel/podhatch, +/area/shuttle/syndicate) +"cKK" = ( +/turf/open/floor/plasteel/podhatch, +/area/shuttle/syndicate) +"cKL" = ( +/turf/open/floor/plasteel/podhatch, +/area/shuttle/syndicate) +"cKM" = ( +/turf/open/floor/plasteel/podhatch, +/area/shuttle/syndicate) "cKN" = ( /turf/open/floor/plasteel/podhatch{ tag = "icon-podhatch (SOUTHEAST)"; @@ -62264,6 +64314,11 @@ dir = 6 }, /area/shuttle/syndicate) +"cKO" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) "cKP" = ( /obj/structure/closet/syndicate/nuclear, /turf/open/floor/plasteel/vault{ @@ -62322,6 +64377,15 @@ /obj/structure/table/reinforced, /turf/open/floor/plasteel/vault, /area/shuttle/syndicate) +"cKV" = ( +/turf/open/floor/plasteel/vault, +/area/shuttle/syndicate) +"cKW" = ( +/turf/open/floor/plasteel/vault, +/area/shuttle/syndicate) +"cKX" = ( +/turf/open/floor/plasteel/vault, +/area/shuttle/syndicate) "cKY" = ( /obj/item/device/sbeacondrop/bomb{ pixel_y = 5 @@ -62353,6 +64417,12 @@ dir = 8 }, /area/shuttle/syndicate) +"cLa" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/floor/plasteel/vault, +/area/shuttle/syndicate) "cLb" = ( /obj/machinery/door/window{ dir = 1; @@ -62381,6 +64451,11 @@ dir = 8 }, /area/shuttle/syndicate) +"cLe" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) "cLf" = ( /obj/structure/sink{ dir = 4; @@ -62404,6 +64479,24 @@ }, /turf/open/floor/circuit/red, /area/shuttle/syndicate) +"cLh" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"cLi" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) +"cLj" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/syndicate) "cLk" = ( /obj/item/weapon/cautery, /obj/item/weapon/scalpel, @@ -62435,6 +64528,22 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating/airless, /area/shuttle/syndicate) +"cLo" = ( +/obj/structure/shuttle/engine/heater, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating/airless, +/area/shuttle/syndicate) +"cLp" = ( +/obj/structure/shuttle/engine/heater, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating/airless, +/area/shuttle/syndicate) "cLq" = ( /obj/machinery/recharge_station, /turf/open/floor/circuit/red, @@ -62445,6 +64554,34 @@ }, /turf/open/floor/circuit/red, /area/shuttle/syndicate) +"cLs" = ( +/obj/machinery/recharge_station, +/turf/open/floor/circuit/red, +/area/shuttle/syndicate) +"cLt" = ( +/obj/structure/shuttle/engine/heater, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating/airless, +/area/shuttle/syndicate) +"cLu" = ( +/obj/structure/shuttle/engine/heater, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating/airless, +/area/shuttle/syndicate) +"cLv" = ( +/obj/structure/shuttle/engine/heater, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating/airless, +/area/shuttle/syndicate) "cLw" = ( /obj/structure/shuttle/engine/propulsion{ icon_state = "propulsion_l" @@ -62464,6 +64601,68 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating/airless, /area/shuttle/syndicate) +"cLz" = ( +/obj/structure/shuttle/engine/heater, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating/airless, +/area/shuttle/syndicate) +"cLA" = ( +/obj/structure/shuttle/engine/heater, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating/airless, +/area/shuttle/syndicate) +"cLB" = ( +/obj/structure/shuttle/engine/heater, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating/airless, +/area/shuttle/syndicate) +"cLC" = ( +/obj/structure/shuttle/engine/propulsion{ + icon_state = "propulsion_l" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating/airless, +/area/shuttle/syndicate) +"cLD" = ( +/obj/structure/shuttle/engine/propulsion, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating/airless, +/area/shuttle/syndicate) +"cLE" = ( +/obj/structure/shuttle/engine/propulsion{ + icon_state = "propulsion_r" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating/airless, +/area/shuttle/syndicate) +"cLF" = ( +/obj/structure/shuttle/engine/propulsion{ + icon_state = "propulsion_l" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating/airless, +/area/shuttle/syndicate) +"cLG" = ( +/obj/structure/shuttle/engine/propulsion, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating/airless, +/area/shuttle/syndicate) +"cLH" = ( +/obj/structure/shuttle/engine/propulsion{ + icon_state = "propulsion_r" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating/airless, +/area/shuttle/syndicate) "cLI" = ( /obj/machinery/light{ dir = 1 @@ -62606,12 +64805,26 @@ }, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) +"cMg" = ( +/obj/structure/light_construct, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) "cMh" = ( /obj/structure/light_construct/small{ dir = 8 }, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) +"cMi" = ( +/obj/structure/light_construct, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"cMj" = ( +/obj/structure/light_construct{ + dir = 1 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) "cMk" = ( /obj/structure/light_construct/small{ dir = 1 @@ -62630,6 +64843,76 @@ /obj/structure/window/reinforced/highpressure/fulltile, /turf/open/floor/plating, /area/engine/engineering) +"cMn" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/highpressure/fulltile, +/turf/open/floor/plating, +/area/engine/engineering) +"cMo" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/highpressure/fulltile, +/turf/open/floor/plating, +/area/engine/engineering) +"cMp" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/highpressure/fulltile, +/turf/open/floor/plating, +/area/engine/engineering) +"cMq" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/highpressure/fulltile, +/turf/open/floor/plating, +/area/engine/engineering) +"cMr" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/highpressure/fulltile, +/turf/open/floor/plating, +/area/engine/engineering) +"cMs" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/highpressure/fulltile, +/turf/open/floor/plating, +/area/engine/engineering) +"cMt" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/highpressure/fulltile, +/turf/open/floor/plating, +/area/engine/engineering) +"cMu" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/highpressure/fulltile, +/turf/open/floor/plating, +/area/engine/engineering) +"cMv" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/highpressure/fulltile, +/turf/open/floor/plating, +/area/engine/engineering) +"cMw" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/highpressure/fulltile, +/turf/open/floor/plating, +/area/engine/engineering) +"cMx" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/highpressure/fulltile, +/turf/open/floor/plating, +/area/engine/engineering) +"cMy" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/highpressure/fulltile, +/turf/open/floor/plating, +/area/engine/engineering) +"cMz" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/highpressure/fulltile, +/turf/open/floor/plating, +/area/engine/engineering) +"cMA" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/highpressure/fulltile, +/turf/open/floor/plating, +/area/engine/engineering) "cMB" = ( /obj/structure/window/shuttle, /obj/structure/grille, @@ -62638,14 +64921,38 @@ "cMC" = ( /turf/closed/wall/r_wall, /area/engine/supermatter) +"cMD" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cME" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cMF" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) "cMG" = ( /turf/open/floor/engine, /area/engine/supermatter) +"cMH" = ( +/turf/open/floor/engine, +/area/engine/supermatter) +"cMI" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cMJ" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) "cMK" = ( /obj/structure/grille, /obj/structure/window/reinforced/highpressure/fulltile, /turf/open/floor/plating, /area/engine/supermatter) +"cML" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"cMM" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) "cMN" = ( /obj/structure/cable{ d1 = 1; @@ -62679,31 +64986,90 @@ }, /turf/open/floor/engine, /area/engine/supermatter) -"cRZ" = ( -/obj/machinery/telecomms/hub/preset, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 +"cMP" = ( +/obj/machinery/camera/motion{ + c_tag = "External Armory Camera"; + dir = 1; + network = list("SS13") }, -/turf/open/floor/plasteel/vault{ - dir = 8; - name = "Mainframe Floor"; - initial_gas_mix = "n2=100;TEMP=80" +/turf/open/space/basic, +/area/space) +"cMQ" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/tinted/fulltile, +/turf/open/floor/plating, +/area/maintenance/aft) +"cMR" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Maintenance Bar"; + req_access_txt = "12" }, -/area/tcommsat/server) -"dfH" = ( -/obj/structure/window/reinforced, -/obj/machinery/computer/slot_machine, +/turf/open/floor/plating, +/area/maintenance/aft) +"cMS" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/tinted/fulltile, +/turf/open/floor/plating, +/area/maintenance/aft) +"cMT" = ( +/obj/structure/barricade/wooden{ + name = "wooden barricade (CLOSED)" + }, +/obj/machinery/door/airlock/maintenance{ + name = "Incinerator Access"; + req_access_txt = "12" + }, +/turf/open/floor/plating, +/area/maintenance/aft) +"cMU" = ( +/obj/machinery/vending/cola/random, +/obj/effect/decal/cleanable/cobweb, /turf/open/floor/wood, -/area/maintenance/bar) -"dHs" = ( -/obj/structure/table/wood, -/obj/effect/spawner/lootdrop/maintenance, +/area/space/nearstation) +"cMV" = ( +/obj/machinery/vending/snack/random, /turf/open/floor/wood, -/area/maintenance/bar) -"eeC" = ( +/area/space/nearstation) +"cMW" = ( +/turf/open/floor/wood, +/area/space/nearstation) +"cMX" = ( +/turf/open/floor/wood{ + icon_state = "wood-broken" + }, +/area/space/nearstation) +"cMY" = ( +/turf/open/floor/wood, +/area/space/nearstation) +"cMZ" = ( +/obj/machinery/vending/cigarette, +/turf/open/floor/wood, +/area/space/nearstation) +"cNa" = ( +/obj/machinery/vending/kink, +/turf/open/floor/wood, +/area/space/nearstation) +"cNb" = ( +/turf/open/floor/wood{ + icon_state = "wood-broken5" + }, +/area/space/nearstation) +"cNc" = ( +/turf/open/floor/wood, +/area/space/nearstation) +"cNd" = ( +/turf/open/floor/wood, +/area/space/nearstation) +"cNe" = ( +/obj/effect/decal/cleanable/oil, +/turf/open/floor/wood, +/area/space/nearstation) +"cNf" = ( +/turf/open/floor/wood{ + icon_state = "wood-broken6" + }, +/area/space/nearstation) +"cNg" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -62712,42 +65078,8 @@ /turf/open/floor/wood{ icon_state = "wood-broken5" }, -/area/maintenance/bar) -"elp" = ( -/obj/machinery/vending/kink, -/turf/open/floor/wood, -/area/maintenance/bar) -"eIp" = ( -/obj/structure/table/wood/poker, -/obj/item/weapon/storage/pill_bottle/dice, -/turf/open/floor/wood, -/area/maintenance/bar) -"gsu" = ( -/obj/structure/table/wood, -/obj/item/device/flashlight/lamp/green, -/turf/open/floor/wood, -/area/maintenance/bar) -"gAI" = ( -/obj/structure/rack, -/obj/item/weapon/soap/nanotrasen, -/turf/open/floor/wood{ - icon_state = "wood-broken7" - }, -/area/maintenance/aft) -"hho" = ( -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" - }, -/obj/machinery/atmospherics/pipe/simple/general/hidden{ - icon_state = "intact"; - dir = 4 - }, -/obj/structure/barricade/wooden{ - name = "wooden barricade (CLOSED)" - }, -/turf/open/floor/plating, -/area/maintenance/aft) -"hjV" = ( +/area/space/nearstation) +"cNh" = ( /obj/structure/window/reinforced, /obj/structure/cable{ d1 = 4; @@ -62756,49 +65088,8 @@ pixel_y = 0 }, /turf/open/floor/wood, -/area/maintenance/bar) -"hKu" = ( -/turf/open/floor/wood{ - icon_state = "wood-broken6" - }, -/area/maintenance/bar) -"idC" = ( -/obj/machinery/vending/cola/random, -/obj/effect/decal/cleanable/cobweb, -/turf/open/floor/wood, -/area/maintenance/bar) -"imJ" = ( -/obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/wood, -/area/maintenance/aft) -"ipA" = ( -/obj/machinery/door/airlock/maintenance{ - name = "maintenance access"; - req_access_txt = "12" - }, -/obj/structure/barricade/wooden{ - name = "wooden barricade (CLOSED)" - }, -/turf/open/floor/plating, -/area/maintenance/aft) -"iCw" = ( -/obj/structure/table/wood, -/turf/open/floor/wood, -/area/maintenance/bar) -"kiy" = ( -/obj/machinery/vending/snack/random, -/turf/open/floor/wood, -/area/maintenance/bar) -"kqI" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/open/floor/wood, -/area/maintenance/bar) -"twx" = ( +/area/space/nearstation) +"cNi" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 4; @@ -62807,18 +65098,8 @@ pixel_y = 0 }, /turf/closed/wall, -/area/maintenance/bar) -"ulk" = ( -/obj/structure/chair/stool, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 - }, -/turf/open/floor/wood, -/area/maintenance/bar) -"uvo" = ( +/area/maintenance/aft) +"cNj" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -62834,115 +65115,129 @@ }, /turf/open/floor/plating, /area/maintenance/aft) -"uCm" = ( -/obj/structure/chair/stool, -/turf/open/floor/wood{ - icon_state = "wood-broken5" - }, -/area/maintenance/bar) -"wnx" = ( -/obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 4; - name = "4maintenance loot spawner" - }, +"cNk" = ( +/obj/effect/decal/cleanable/oil, /turf/open/floor/wood, /area/maintenance/aft) -"wnE" = ( -/obj/structure/table/wood, -/obj/machinery/chem_dispenser/drinks, +"cNl" = ( +/obj/structure/chair/stool, /turf/open/floor/wood, -/area/maintenance/bar) -"yug" = ( +/area/space/nearstation) +"cNm" = ( +/obj/structure/chair/stool, +/turf/open/floor/wood, +/area/space/nearstation) +"cNn" = ( +/obj/structure/chair/stool, +/turf/open/floor/wood, +/area/space/nearstation) +"cNo" = ( +/turf/open/floor/wood, +/area/space/nearstation) +"cNp" = ( +/turf/open/floor/wood, +/area/space/nearstation) +"cNq" = ( +/obj/structure/chair/stool, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/wood, +/area/space/nearstation) +"cNr" = ( +/obj/structure/window/reinforced, +/obj/machinery/computer/arcade, +/turf/open/floor/wood, +/area/space/nearstation) +"cNs" = ( +/obj/structure/table/wood/poker, +/obj/item/weapon/storage/pill_bottle/dice, +/turf/open/floor/wood, +/area/space/nearstation) +"cNt" = ( +/obj/structure/table/wood/poker, +/obj/item/toy/cards/deck, +/turf/open/floor/wood, +/area/space/nearstation) +"cNu" = ( +/obj/structure/chair/stool, +/turf/open/floor/wood, +/area/space/nearstation) +"cNv" = ( +/turf/open/floor/wood, +/area/space/nearstation) +"cNw" = ( +/obj/structure/chair/stool, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/wood, +/area/space/nearstation) +"cNx" = ( +/obj/structure/window/reinforced, +/obj/machinery/computer/slot_machine, +/turf/open/floor/wood, +/area/space/nearstation) +"cNy" = ( +/turf/open/floor/wood, +/area/space/nearstation) +"cNz" = ( +/turf/open/floor/wood, +/area/space/nearstation) +"cNA" = ( /obj/structure/chair/stool, /turf/open/floor/wood{ icon_state = "wood-broken" }, -/area/maintenance/bar) -"yUg" = ( -/obj/structure/window/reinforced, -/obj/machinery/computer/arcade, -/turf/open/floor/wood, -/area/maintenance/bar) -"zXD" = ( -/obj/structure/closet{ - name = "Glasware Storage" - }, -/obj/item/weapon/storage/box/beakers, -/obj/item/weapon/storage/box/drinkingglasses, -/turf/open/floor/wood, -/area/maintenance/bar) -"AMw" = ( -/obj/effect/decal/cleanable/oil, -/turf/open/floor/wood, -/area/maintenance/bar) -"CuL" = ( -/obj/structure/table/wood/poker, -/obj/item/device/flashlight/lamp/green, -/turf/open/floor/wood, -/area/maintenance/bar) -"Dat" = ( +/area/space/nearstation) +"cNB" = ( /obj/structure/chair/stool, /turf/open/floor/wood, -/area/maintenance/bar) -"Fsp" = ( +/area/space/nearstation) +"cNC" = ( +/obj/structure/chair/stool, /turf/open/floor/wood, -/area/maintenance/bar) -"FJA" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/tinted/fulltile, -/turf/open/floor/plating, -/area/maintenance/bar) -"Hio" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/window/reinforced/tinted/fulltile, -/obj/structure/grille, -/turf/open/floor/plating, -/area/maintenance/bar) -"HWm" = ( -/obj/structure/window/reinforced/tinted/fulltile, -/obj/structure/grille, -/turf/open/floor/plating, -/area/maintenance/bar) -"JyR" = ( -/obj/structure/barricade/wooden{ - name = "wooden barricade (CLOSED)" - }, -/obj/machinery/door/airlock/maintenance{ - name = "Incinerator Access"; - req_access_txt = "12" +/area/space/nearstation) +"cND" = ( +/obj/structure/chair/stool, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 }, +/turf/open/floor/wood, +/area/space/nearstation) +"cNE" = ( +/obj/structure/window/reinforced, +/obj/machinery/computer/slot_machine, +/turf/open/floor/wood, +/area/space/nearstation) +"cNF" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/tinted/fulltile, /turf/open/floor/plating, /area/maintenance/aft) -"JEz" = ( -/obj/structure/table/wood/poker, -/obj/item/toy/cards/deck, -/turf/open/floor/wood, -/area/maintenance/bar) -"KUG" = ( -/obj/machinery/chem_dispenser/drinks/beer, -/obj/structure/table/wood, -/turf/open/floor/wood, -/area/maintenance/bar) -"MIM" = ( -/obj/machinery/vending/cigarette, -/turf/open/floor/wood, -/area/maintenance/bar) -"Pfx" = ( -/turf/closed/wall, -/area/maintenance/bar) -"PPX" = ( -/obj/structure/chair/stool, -/turf/open/floor/wood{ - icon_state = "wood-broken6" - }, -/area/maintenance/bar) -"Qmz" = ( +"cNG" = ( /turf/open/floor/wood{ icon_state = "wood-broken5" }, -/area/maintenance/bar) -"SgX" = ( +/area/space/nearstation) +"cNH" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/wood, +/area/space/nearstation) +"cNI" = ( /obj/machinery/power/apc{ dir = 4; name = "Maintenance Bar APC"; @@ -62956,37 +65251,141 @@ /turf/open/floor/wood{ icon_state = "wood-broken" }, -/area/maintenance/bar) -"Shp" = ( +/area/space/nearstation) +"cNJ" = ( +/obj/structure/chair/stool, +/turf/open/floor/wood, +/area/space/nearstation) +"cNK" = ( +/obj/structure/chair/stool, +/turf/open/floor/wood{ + icon_state = "wood-broken6" + }, +/area/space/nearstation) +"cNL" = ( +/obj/structure/chair/stool, +/turf/open/floor/wood, +/area/space/nearstation) +"cNM" = ( +/obj/structure/chair/stool, +/turf/open/floor/wood, +/area/space/nearstation) +"cNN" = ( +/obj/structure/chair/stool, +/turf/open/floor/wood, +/area/space/nearstation) +"cNO" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/window/reinforced/tinted/fulltile, +/obj/structure/grille, +/turf/open/floor/plating, +/area/maintenance/aft) +"cNP" = ( +/obj/structure/chair/stool, +/turf/open/floor/wood, +/area/space/nearstation) +"cNQ" = ( +/obj/structure/table/wood, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/wood, +/area/space/nearstation) +"cNR" = ( +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/space/nearstation) +"cNS" = ( +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/space/nearstation) +"cNT" = ( +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/space/nearstation) +"cNU" = ( +/obj/structure/table/wood, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/wood, +/area/space/nearstation) +"cNV" = ( +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/space/nearstation) +"cNW" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/window/reinforced/tinted/fulltile, +/obj/structure/grille, +/turf/open/floor/plating, +/area/maintenance/aft) +"cNX" = ( /obj/effect/decal/cleanable/robot_debris/old, /turf/open/floor/wood, -/area/maintenance/bar) -"Tjc" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 - }, -/turf/closed/wall, -/area/maintenance/bar) -"YTi" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Maintenance Bar"; - req_access_txt = "12" - }, -/turf/open/floor/plating, -/area/maintenance/bar) -"YZg" = ( -/obj/structure/rack, +/area/space/nearstation) +"cNY" = ( +/obj/structure/chair/stool, /turf/open/floor/wood, +/area/space/nearstation) +"cNZ" = ( +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/space/nearstation) +"cOa" = ( +/obj/effect/decal/cleanable/oil, +/turf/open/floor/wood, +/area/space/nearstation) +"cOb" = ( +/turf/open/floor/wood{ + icon_state = "wood-broken5" + }, +/area/space/nearstation) +"cOc" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/window/reinforced/tinted/fulltile, +/obj/structure/grille, +/turf/open/floor/plating, /area/maintenance/aft) -"ZAX" = ( +"cOd" = ( /turf/open/floor/wood{ icon_state = "wood-broken" }, -/area/maintenance/bar) -"ZVf" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall, -/area/maintenance/bar) +/area/space/nearstation) +"cOe" = ( +/obj/structure/table/wood, +/obj/item/device/flashlight/lamp/green, +/turf/open/floor/wood, +/area/space/nearstation) +"cOf" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks, +/turf/open/floor/wood, +/area/space/nearstation) +"cOg" = ( +/obj/machinery/chem_dispenser/drinks/beer, +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/space/nearstation) +"cOh" = ( +/obj/structure/closet{ + name = "Glasware Storage" + }, +/obj/item/weapon/storage/box/beakers, +/obj/item/weapon/storage/box/drinkingglasses, +/turf/open/floor/wood, +/area/space/nearstation) +"cOi" = ( +/obj/structure/window/reinforced/tinted/fulltile, +/obj/structure/grille, +/turf/open/floor/plating, +/area/maintenance/aft) +"cOj" = ( +/obj/structure/window/reinforced/tinted/fulltile, +/obj/structure/grille, +/turf/open/floor/plating, +/area/maintenance/aft) +"cOk" = ( +/obj/structure/window/reinforced/tinted/fulltile, +/obj/structure/grille, +/turf/open/floor/plating, +/area/maintenance/aft) (1,1,1) = {" aaa @@ -81910,7 +84309,7 @@ bCq bCq bLv bCq -bCq +aoV cbj aoV bVw @@ -82163,10 +84562,10 @@ aaa aaa aaa bCq -YZg -imJ +bJP +bCq bSn -imJ +bCq bCq cbj bLv @@ -82421,7 +84820,7 @@ akD aaa bCq bPS -bPS +bRd bPS bPS bCq @@ -82678,8 +85077,8 @@ akD aaa bLv bPR -gAI -imJ +bRc +bSo bTs bCq bVy @@ -82935,8 +85334,8 @@ bMF aaa bCq bPS -bTs -bPS +bRf +bSo bTu bCq bVB @@ -83192,8 +85591,8 @@ akD aaa bLv bPT -wnx -imJ +bRe +bSo bTt bCq bVA @@ -83448,10 +85847,10 @@ akD akD aaa bCq -ipA +bPV bCq bCq -hho +bTw bCq bVD bWy @@ -84482,17 +86881,17 @@ bCq bCq bCq bCq -JyR -Pfx -Pfx -Pfx -Pfx -FJA -Pfx -Pfx -Pfx -Pfx -Pfx +cMT +bCq +bCq +bCq +bCq +cNF +bCq +bCq +bCq +bCq +bCq cgH bLv aaa @@ -84740,16 +87139,16 @@ bCq bHE bVG bHE -Pfx -AMw -Fsp -Fsp -Qmz -Fsp -Fsp -Shp -Fsp -Pfx +bCq +cNk +bPS +cNy +cNG +cjn +cjn +cNX +cjn +bCq cgH bLv aaa @@ -84995,22 +87394,22 @@ bHE bHE bCq bHE -Pfx -Pfx -Pfx -Fsp -Dat -Fsp -Fsp -hKu -Fsp -Fsp -ZAX -Pfx +bCq +bCq +bCq +bPS +bSo +cNz +cjn +bdV +cjn +cjn +cOd +bCq cgH bLv aaf -cAj +cjJ cjJ cjJ cjJ @@ -85252,18 +87651,18 @@ bHE bHE bTz bHE -Pfx -idC -Qmz -Dat -eIp -yug -Fsp -Fsp -Dat -Dat -Fsp -Pfx +bCq +cMU +cNb +cNl +cNs +cNA +cjn +cjn +cNP +cNY +cjn +bCq cgH bLv aaa @@ -85509,18 +87908,18 @@ bHE bSs bCq bHE -Pfx -kiy -Fsp -Dat -CuL -Dat -Fsp -uCm -dHs -iCw -Fsp -HWm +bCq +cMV +cNc +cNm +bcU +cNB +cjn +cCa +cNQ +cNZ +cjn +cOi cgH bLv aaa @@ -85766,18 +88165,18 @@ bRh bSr bCq bHE -FJA -Fsp -Fsp -Dat -JEz -Dat -hKu -Dat -iCw -Fsp -Fsp -HWm +cMQ +cMW +cNd +cNn +cNt +cNC +bdV +cNJ +cNR +cjn +cjn +cOj cgH bLv aaf @@ -85937,11 +88336,11 @@ aaa aaa aaa aaa -abc -abc -abc +afA +afA +afA afu -abc +afA aaa aaa aaa @@ -86023,18 +88422,18 @@ bCq bCq bCq bHE -YTi -ZAX -AMw -Fsp -Dat -Fsp -Fsp -PPX -iCw -AMw -gsu -HWm +cMR +cMX +cNe +cNo +cNu +cjn +cjn +cNK +cNS +cOa +cOe +cOk cgH bLv aaa @@ -86194,11 +88593,11 @@ aaa aaa aaa aaa -abc +afA aea aeH aft -abc +afA aaa aaa aaa @@ -86280,18 +88679,18 @@ bLv aaa bLv bHE -FJA -Fsp -hKu -Fsp -Fsp -Fsp -Fsp -Dat -iCw -Qmz -wnE -Pfx +cMS +cMY +cNf +cNp +cNv +cjn +cjn +cNL +cNT +cOb +cOf +bCq cgH bLv aaa @@ -86450,13 +88849,13 @@ abc abu abu abu -abc -abc +afA +afA aec aeJ afw -abc -abc +afA +afA aaf aaa aaf @@ -86537,18 +88936,18 @@ bLv aaf bLv bUt -Pfx -MIM -eeC -ulk -ulk -ulk -kqI -Dat -dHs -Fsp -KUG -Pfx +bCq +cMZ +cNg +cNq +cNw +cND +cNH +cNM +cNU +cjn +cOg +bCq cgH bLv aaf @@ -86576,7 +88975,7 @@ abY abY aaa aaf -ctv +cEX abY abY aaa @@ -86713,12 +89112,12 @@ aeb aeI afv agf -abc +afA aaf aaa aaa -aiT -aiT +aiV +aiV aiV akG cxJ @@ -86794,18 +89193,18 @@ bCq aaa bLv bUs -Pfx -elp -hjV -yUg -dfH -dfH -SgX -Dat -iCw -Fsp -zXD -Pfx +bCq +cNa +cNh +cNr +cNx +cNE +cNI +cNN +cNV +cjn +cOh +bCq cgH bCq aaa @@ -86823,18 +89222,18 @@ aaa crn aaf abY -ctv -ctv -ctv -ctv -ctv -ctv -ctv +cEX +cEX +cEX +cEX +cEX +cEX +cEX abY aaa aaf -ctv -ctv +cEX +cEX abY aaa aaa @@ -86970,17 +89369,17 @@ aee aeL afy agh -abc +afA aaf aaa aaf -aiT +aiV ajs akb akI akI amc -aiT +aiV ant akI aos @@ -87051,18 +89450,18 @@ aaa aaa bTB bUv -ZVf -ZVf -twx -ZVf -ZVf -ZVf -ZVf -Hio -Hio -Hio -ZVf -Tjc +bES +bES +cNi +bES +bES +bES +bES +cNO +cNW +cOc +bES +car cgH bCq bCq @@ -87227,7 +89626,7 @@ aed aeK afx agg -abc +afA aaf aaa aaa @@ -87310,7 +89709,7 @@ bTA bUu bVH bVH -uvo +cNj bVH bVH bVH @@ -87853,15 +90252,15 @@ cEl cEE cEl cFm -csx +cFC cFm cFm -csx -csv +cFC +cGO aaa aaa aaT -ctv +cEX abY aaa aaa @@ -88106,19 +90505,19 @@ ciN cji cDZ crr -crJ -crT -crJ +cEm +cEF +cEm cFn -css -csx -csx -css +cFD +cFC +cFC +cFD csb aaf aaf aaT -ctv +cEX abY aaa aaa @@ -88363,19 +90762,19 @@ cgR cDB cqP crq -crZ -crT -crZ +cEn +cEF +cEn cFo -css +cFD cFm cFm -css -csv +cFD +cGO aaa aaa aaT -ctv +cEX abY aaa aaa @@ -88598,7 +90997,7 @@ bWF bXC bXC bZp -cRZ +cak bWB bWB bWB @@ -88620,19 +91019,19 @@ cgR cqx cqR crp -crJ -crT -crJ +cEm +cEF +cEm cFn -css -csx -csx -css +cFD +cFC +cFC +cFD csb aaf aaf aaT -ctv +cEX abY aaa aaa @@ -88877,19 +91276,19 @@ cpX cqz cqQ ccw -crH -crT -crZ +cEp +cEF +cEn cFo -css +cFD cFm cFm -css -csv +cFD +cGO aaa aaa aaT -ctv +cEX abY aaa aaa @@ -89134,19 +91533,19 @@ clJ cig cig ccw -crJ -crT -crJ +cEm +cEF +cEm cFn -css -csx -csx -css +cFD +cFC +cFC +cFD csb aaf aaf aaT -ctv +cEX abY aaa aaa @@ -89391,19 +91790,19 @@ cpZ cig cqS ccw -crH -crT -crZ +cEp +cEF +cEn cFo -css +cFD cFm cFm -css -csv +cFD +cGO aaa aaa aaT -ctv +cEX abY aaa aaf @@ -89648,14 +92047,14 @@ cgR cqA cqT czh -crJ +cEm crU csb cFn -css -csx -csx -css +cFD +cFC +cFC +cFD csb aaf aaf @@ -90061,9 +92460,9 @@ aiF agj aja ajG -akQ -agj -agj +amS +aiX +aiX amS anx anz @@ -90681,17 +93080,17 @@ cAl cFc cAq cFJ -cpx +cDq cGu cGH cGR cHa -csd +cEj ciZ ccw aaa abY -ctv +cEX abY aaa aaa @@ -90928,7 +93327,7 @@ cfg cgU cgJ chG -cpx +cDq cqd cDC cqU @@ -90948,7 +93347,7 @@ cHn ccw aaf aaT -ctv +cEX aaT aaf aaa @@ -91089,9 +93488,9 @@ agn ajc ajI ako -akQ -agj -agj +amS +aiX +aiX amS any anz @@ -91195,17 +93594,17 @@ cEu cEu cMC cFL -csJ +cGf cGw cMm ciZ cHc -cAu -cAu +cHh +cHh ccw aaa abY -ctv +cEX abY aaa aaa @@ -91442,7 +93841,7 @@ cmK cBO ccw chV -cpx +cDq cqf cqD cMC @@ -91456,13 +93855,13 @@ czE cGx ccw cGT -csd -csd +cEj +cEj ciZ ccw aaf aaT -ctv +cEX abY aaa aaa @@ -91699,7 +94098,7 @@ cmL cgR cgL chX -cpx +cDq cqh cqF cra @@ -91713,13 +94112,13 @@ csH csR cMm cGU -csd -csd +cEj +cEj cHo ccw aaa abY -ctv +cEX abY aaa aaa @@ -91956,7 +94355,7 @@ cmL cnv cMm chX -cpx +cDq cqg cqE cqZ @@ -91970,13 +94369,13 @@ csC csQ cMm cGV -csd +cEj cGV ccw ccw aaa abY -ctv +cEX abY aaa aaa @@ -92117,9 +94516,9 @@ aiL ajc ajI akq -akQ -agj -agj +amS +aiX +aiX amS anx anz @@ -92213,7 +94612,7 @@ cmN cgR cgL chX -cpx +cDq cqj cqF crb @@ -92226,14 +94625,14 @@ cFP csI cAt cMm -csd -csd -csd +cEj +cEj +cEj cHp ccw aaf abY -ctv +cEX abY aaa aaa @@ -92358,7 +94757,7 @@ aaa aaf aaf aaT -aaa +cMP aaZ abI ack @@ -92470,7 +94869,7 @@ cfz cgR ccw cii -cpx +cDq cqi cMC cAP @@ -92484,13 +94883,13 @@ czE cGx ccw cGT -csd -csd +cEj +cEj ciZ ccw aaf aaS -ctv +cEX abY aaa aaa @@ -92728,7 +95127,7 @@ cgR ccw cDi cDr -cqk +cDw cDE cEa cMC @@ -92737,7 +95136,7 @@ cEz cEz cMC cFR -csJ +cGf cGz cMm ciZ @@ -92747,7 +95146,7 @@ cHd ccw aaa abY -ctv +cEX abY aaa aaa @@ -92888,7 +95287,7 @@ aIF ajc ajI akp -akQ +amS alA amm amU @@ -92985,7 +95384,7 @@ cgR cMm chX cpD -cqk +cDw cDF cEa cEg @@ -93004,7 +95403,7 @@ cHr ccw aaf aaT -ctv +cEX aaT aaf aaa @@ -93251,17 +95650,17 @@ cEU cFk cAs cFT -cpx +cDq cGx cGK cGY cEk -csd +cEj cHs ccw aaf abY -ctv +cEX abY aaa aaa @@ -93642,7 +96041,7 @@ aaa aaf aaf aaa -abp +adR abP aco acO @@ -93659,9 +96058,9 @@ adR aiQ ajI akt -akQ -agj -agj +amS +aiX +aiX aiX anB anz @@ -94018,8 +96417,8 @@ cig ccw ccw czF -csd -csd +cEj +cEj cFz cFU cGj @@ -94156,7 +96555,7 @@ aaa aaa aaf aaa -abp +adR abO acq acq @@ -94273,12 +96672,12 @@ cjN cDz cDH cMm -csd +cEj crM crV crV cFA -csd +cEj cGk ccw aag @@ -94543,7 +96942,7 @@ aaa aaf aaa aaf -ctv +cEX abY aaa aaf @@ -94670,7 +97069,7 @@ aaa aaa aaa aaf -abp +adR abR abP abP @@ -94800,7 +97199,7 @@ aaf aaf aaf aaf -ctv +cEX abY aaa aaf @@ -94940,7 +97339,7 @@ agz ahb ahF clI -abp +adR ajh ajM akw @@ -95055,9 +97454,9 @@ aaa aaa aaa aaa -ctv -ctv -ctv +cEX +cEX +cEX abY aaa aaa @@ -95197,7 +97596,7 @@ agB ahd ahI clS -abp +adR ajj ajP aky @@ -95454,7 +97853,7 @@ afU ahc ahH aiq -abp +adR aji ajO akw @@ -95711,7 +98110,7 @@ agC ahf ahK ait -abp +adR ajl ajR akw @@ -95968,7 +98367,7 @@ afW ahe ahJ ais -abp +adR ajk ajQ akw @@ -96225,7 +98624,7 @@ agE ahh ahM aiv -abp +adR aiY ajE ajH @@ -96482,7 +98881,7 @@ afY ahg ahL aiu -abp +adR ajm ajS ajn @@ -96739,7 +99138,7 @@ agG ahi ahN aix -abp +adR ajp ajU ajn @@ -96992,11 +99391,11 @@ abo aeA afl aga -abp +adR ahj -abp +adR cAN -abp +adR ajo ajo ajo @@ -97243,12 +99642,12 @@ aaa aaa aaa acw -abp -abp adR -abp +adR +adR +adR cxG -abp +adR adR ahl ahO @@ -97506,7 +99905,7 @@ acU aeC afn agc -abp +adR ahk aoJ aib @@ -97757,13 +100156,13 @@ aag aaa aaa aag -abp -abp -abp -abp +adR +adR +adR +adR afo abp -abp +adR ahn ahn aiA diff --git a/_maps/map_files/debug/runtimestation.dmm b/_maps/map_files/debug/runtimestation.dmm index 1a6183603c..b3facda8d2 100644 --- a/_maps/map_files/debug/runtimestation.dmm +++ b/_maps/map_files/debug/runtimestation.dmm @@ -1,4 +1,4 @@ -"aa" = (/turf/open/space,/area/space) +"aa" = (/turf/open/space/basic,/area/space) "ab" = (/obj/structure/lattice,/turf/open/space,/area/space) "ac" = (/turf/open/space,/area/space/nearstation) "ad" = (/turf/closed/wall/r_wall,/area/maintenance/maintcentral) @@ -139,7 +139,7 @@ "cI" = (/obj/structure/table,/obj/item/weapon/storage/fancy/donut_box,/turf/open/floor/plasteel/arrival{dir = 8},/area/hallway/secondary/entry) "cJ" = (/obj/structure/table,/obj/item/weapon/storage/fancy/donut_box,/turf/open/floor/plasteel/arrival{dir = 10},/area/hallway/secondary/entry) "cK" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/rods{amount = 50},/obj/machinery/light,/turf/open/floor/plasteel/arrival,/area/hallway/secondary/entry) -"cL" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 7},/obj/item/weapon/pen,/turf/open/floor/plasteel/arrival,/area/hallway/secondary/entry) +"cL" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 7},/turf/open/floor/plasteel/arrival,/area/hallway/secondary/entry) "cM" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/regular,/obj/item/device/healthanalyzer,/turf/open/floor/plasteel/arrival,/area/hallway/secondary/entry) "cN" = (/turf/closed/wall/r_wall,/area/construction) "cO" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/closed/wall/r_wall,/area/construction) diff --git a/_maps/map_files/generic/Centcomm.dmm b/_maps/map_files/generic/Centcomm.dmm index a50e899515..7c9956e00c 100644 --- a/_maps/map_files/generic/Centcomm.dmm +++ b/_maps/map_files/generic/Centcomm.dmm @@ -1,6 +1,6 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aa" = ( -/turf/open/space, +/turf/open/space/basic, /area/space) "ab" = ( /turf/closed/indestructible/riveted, @@ -2297,7 +2297,7 @@ /turf/closed/indestructible/riveted, /area/start) "gd" = ( -/obj/effect/landmark/start, +/obj/effect/landmark/start/new_player, /turf/open/floor/plating, /area/start) "ge" = ( @@ -2992,9 +2992,7 @@ /turf/closed/indestructible/riveted, /area/centcom/control) "iv" = ( -/obj/effect/landmark{ - name = "prisonwarp" - }, +/obj/effect/landmark/prisonwarp, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -6494,9 +6492,7 @@ /area/syndicate_mothership/control) "qp" = ( /obj/structure/chair/stool, -/obj/effect/landmark{ - name = "Syndicate-Spawn" - }, +/obj/effect/landmark/syndicate_spawn, /turf/open/floor/plasteel/bar{ dir = 2 }, @@ -8111,9 +8107,7 @@ /turf/open/floor/wood, /area/syndicate_mothership/control) "tT" = ( -/obj/effect/landmark{ - name = "Syndicate-Spawn" - }, +/obj/effect/landmark/syndicate_spawn, /turf/open/floor/wood, /area/syndicate_mothership/control) "tU" = ( @@ -9049,16 +9043,12 @@ /area/centcom/ferry) "wo" = ( /obj/structure/chair/office/dark, -/obj/effect/landmark{ - name = "Emergencyresponseteam" - }, +/obj/effect/landmark/ert_spawn, /turf/open/floor/plasteel/black, /area/centcom/ferry) "wp" = ( /obj/structure/chair/office/dark, -/obj/effect/landmark{ - name = "Emergencyresponseteam" - }, +/obj/effect/landmark/ert_spawn, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -9204,9 +9194,7 @@ /obj/structure/chair/office/dark{ dir = 8 }, -/obj/effect/landmark{ - name = "Emergencyresponseteam" - }, +/obj/effect/landmark/ert_spawn, /turf/open/floor/plasteel/black, /area/centcom/ferry) "wK" = ( @@ -9294,9 +9282,7 @@ }, /area/wizard_station) "wY" = ( -/obj/effect/landmark/start{ - name = "wizard" - }, +/obj/effect/landmark/start/wizard, /turf/open/floor/engine/cult, /area/wizard_station) "wZ" = ( @@ -9357,9 +9343,7 @@ /obj/structure/chair/office/dark{ dir = 8 }, -/obj/effect/landmark{ - name = "Emergencyresponseteam" - }, +/obj/effect/landmark/ert_spawn, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -9697,18 +9681,14 @@ /obj/structure/chair/office/dark{ dir = 1 }, -/obj/effect/landmark{ - name = "Emergencyresponseteam" - }, +/obj/effect/landmark/ert_spawn, /turf/open/floor/plasteel/black, /area/centcom/ferry) "xV" = ( /obj/structure/chair/office/dark{ dir = 1 }, -/obj/effect/landmark{ - name = "Emergencyresponseteam" - }, +/obj/effect/landmark/ert_spawn, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -10328,9 +10308,7 @@ /area/wizard_station) "zj" = ( /obj/structure/table/wood, -/obj/effect/landmark{ - name = "Teleport-Scroll" - }, +/obj/effect/landmark/teleport_scroll, /obj/item/weapon/dice/d20, /obj/item/weapon/dice, /turf/open/floor/carpet, @@ -11791,9 +11769,7 @@ /turf/open/space, /area/space) "CV" = ( -/obj/effect/landmark{ - name = "Holding Facility" - }, +/obj/effect/landmark/holding_facility, /turf/open/floor/engine, /area/centcom/holding) "CW" = ( @@ -11837,9 +11813,7 @@ /area/tdome/tdomeobserve) "Da" = ( /obj/structure/chair, -/obj/effect/landmark{ - name = "tdomeobserve" - }, +/obj/effect/landmark/thunderdome/observe, /obj/structure/sign/barsign{ pixel_y = 32 }, @@ -11849,9 +11823,7 @@ /area/tdome/tdomeobserve) "Db" = ( /obj/structure/chair, -/obj/effect/landmark{ - name = "tdomeobserve" - }, +/obj/effect/landmark/thunderdome/observe, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -12189,27 +12161,21 @@ }, /area/tdome/arena) "DO" = ( -/obj/effect/landmark{ - name = "tdome2" - }, +/obj/effect/landmark/thunderdome/two, /obj/effect/turf_decal/stripes/line{ dir = 9 }, /turf/open/floor/plasteel, /area/tdome/arena) "DP" = ( -/obj/effect/landmark{ - name = "tdome2" - }, +/obj/effect/landmark/thunderdome/two, /obj/effect/turf_decal/stripes/line{ dir = 1 }, /turf/open/floor/plasteel, /area/tdome/arena) "DQ" = ( -/obj/effect/landmark{ - name = "tdome2" - }, +/obj/effect/landmark/thunderdome/two, /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -12262,27 +12228,21 @@ }, /area/tdome/arena) "DZ" = ( -/obj/effect/landmark{ - name = "tdome1" - }, +/obj/effect/landmark/thunderdome/one, /obj/effect/turf_decal/stripes/line{ dir = 9 }, /turf/open/floor/plasteel, /area/tdome/arena) "Ea" = ( -/obj/effect/landmark{ - name = "tdome1" - }, +/obj/effect/landmark/thunderdome/one, /obj/effect/turf_decal/stripes/line{ dir = 1 }, /turf/open/floor/plasteel, /area/tdome/arena) "Eb" = ( -/obj/effect/landmark{ - name = "tdome1" - }, +/obj/effect/landmark/thunderdome/one, /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -12336,9 +12296,7 @@ }, /area/tdome/tdomeadmin) "Eh" = ( -/obj/effect/landmark{ - name = "tdome2" - }, +/obj/effect/landmark/thunderdome/two, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -12348,22 +12306,16 @@ /obj/machinery/recharger{ pixel_y = 4 }, -/obj/effect/landmark{ - name = "tdome2" - }, +/obj/effect/landmark/thunderdome/two, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/tdome/arena) "Ej" = ( -/obj/effect/landmark{ - name = "tdome2" - }, +/obj/effect/landmark/thunderdome/two, /turf/open/floor/plasteel/neutral, /area/tdome/arena) "Ek" = ( -/obj/effect/landmark{ - name = "tdome2" - }, +/obj/effect/landmark/thunderdome/two, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -12380,9 +12332,7 @@ }, /area/tdome/arena) "En" = ( -/obj/effect/landmark{ - name = "tdome1" - }, +/obj/effect/landmark/thunderdome/one, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -12392,22 +12342,16 @@ /obj/machinery/recharger{ pixel_y = 4 }, -/obj/effect/landmark{ - name = "tdome1" - }, +/obj/effect/landmark/thunderdome/one, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/tdome/arena) "Ep" = ( -/obj/effect/landmark{ - name = "tdome1" - }, +/obj/effect/landmark/thunderdome/one, /turf/open/floor/plasteel/neutral, /area/tdome/arena) "Eq" = ( -/obj/effect/landmark{ - name = "tdome1" - }, +/obj/effect/landmark/thunderdome/one, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -12441,9 +12385,7 @@ network = list("thunder"); c_tag = "Red Team" }, -/obj/effect/landmark{ - name = "tdome2" - }, +/obj/effect/landmark/thunderdome/two, /turf/open/floor/plasteel/neutral, /area/tdome/arena) "Ev" = ( @@ -12474,9 +12416,7 @@ network = list("thunder"); c_tag = "Green Team" }, -/obj/effect/landmark{ - name = "tdome1" - }, +/obj/effect/landmark/thunderdome/one, /turf/open/floor/plasteel/neutral, /area/tdome/arena) "EA" = ( @@ -12516,50 +12456,38 @@ /turf/open/floor/plasteel/green/corner, /area/tdome/arena) "EG" = ( -/obj/effect/landmark{ - name = "tdome2" - }, +/obj/effect/landmark/thunderdome/two, /obj/effect/turf_decal/stripes/line{ dir = 10 }, /turf/open/floor/plasteel, /area/tdome/arena) "EH" = ( -/obj/effect/landmark{ - name = "tdome2" - }, +/obj/effect/landmark/thunderdome/two, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/tdome/arena) "EI" = ( -/obj/effect/landmark{ - name = "tdome2" - }, +/obj/effect/landmark/thunderdome/two, /obj/effect/turf_decal/stripes/line{ dir = 6 }, /turf/open/floor/plasteel, /area/tdome/arena) "EJ" = ( -/obj/effect/landmark{ - name = "tdome1" - }, +/obj/effect/landmark/thunderdome/one, /obj/effect/turf_decal/stripes/line{ dir = 10 }, /turf/open/floor/plasteel, /area/tdome/arena) "EK" = ( -/obj/effect/landmark{ - name = "tdome1" - }, +/obj/effect/landmark/thunderdome/one, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/tdome/arena) "EL" = ( -/obj/effect/landmark{ - name = "tdome1" - }, +/obj/effect/landmark/thunderdome/one, /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -12644,9 +12572,7 @@ }, /area/tdome/tdomeadmin) "EV" = ( -/obj/effect/landmark{ - name = "tdomeadmin" - }, +/obj/effect/landmark/thunderdome/admin, /obj/structure/chair/comfy/black{ dir = 1 }, @@ -14446,7 +14372,7 @@ /area/wizard_station) "KN" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/open/floor/engine/cult, /area/wizard_station) @@ -14964,6 +14890,10 @@ name = "Centcom" }, /area/centcom/evac) +"Md" = ( +/obj/machinery/computer/emergency_shuttle, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) (1,1,1) = {" aa @@ -62947,7 +62877,7 @@ tH qk Ks ql -Ma +LY Mb yS Lc @@ -65807,7 +65737,7 @@ aa aa aa Fa -Fh +Md Fp FC Fh diff --git a/_maps/map_files/generic/Space.dmm b/_maps/map_files/generic/Space.dmm index c71d2e76ad..3da5b62f4d 100644 --- a/_maps/map_files/generic/Space.dmm +++ b/_maps/map_files/generic/Space.dmm @@ -1,4 +1,4 @@ -"a" = (/turf/open/space,/area/space) +"a" = (/turf/open/space/basic,/area/space) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/generic/SpaceDock.dmm b/_maps/map_files/generic/SpaceDock.dmm index 7c3b1d0e4b..336c7dd724 100644 --- a/_maps/map_files/generic/SpaceDock.dmm +++ b/_maps/map_files/generic/SpaceDock.dmm @@ -1,4 +1,4 @@ -"a" = (/turf/open/space,/area/space) +"a" = (/turf/open/space/basic,/area/space) "b" = (/obj/docking_port/stationary{dheight = 0;dir = 2;dwidth = 11;height = 22;id = "whiteship_away";name = "Deep Space";width = 35},/turf/open/space,/area/space) (1,1,1) = {" diff --git a/_maps/shuttles/emergency_bar.dmm b/_maps/shuttles/emergency_bar.dmm index eb696067e2..c15d5cea75 100644 --- a/_maps/shuttles/emergency_bar.dmm +++ b/_maps/shuttles/emergency_bar.dmm @@ -250,7 +250,7 @@ "aN" = ( /obj/structure/chair/stool/bar{ can_buckle = 1; - name = "buckable bar stool" + name = "buckleable bar stool" }, /turf/open/floor/plasteel/bar, /area/shuttle/escape) diff --git a/code/__DATASTRUCTURES/globals.dm b/code/__DATASTRUCTURES/globals.dm new file mode 100644 index 0000000000..f9b5281212 --- /dev/null +++ b/code/__DATASTRUCTURES/globals.dm @@ -0,0 +1,37 @@ +//See controllers/globals.dm +#define GLOBAL_MANAGED(X, InitValue)\ +/datum/controller/global_vars/proc/InitGlobal##X(){\ + ##X = ##InitValue;\ + gvars_datum_init_order += #X;\ +} +#define GLOBAL_UNMANAGED(X, InitValue) /datum/controller/global_vars/proc/InitGlobal##X() + +#ifndef TESTING +#define GLOBAL_PROTECT(X)\ +/datum/controller/global_vars/InitGlobal##X(){\ + ..();\ + gvars_datum_protected_varlist += #X;\ +} +#else +#define GLOBAL_PROTECT(X) +#endif + +#define GLOBAL_REAL(X, Typepath) var/global##Typepath/##X + +#define GLOBAL_RAW(X) /datum/controller/global_vars/var/global##X + +#define GLOBAL_VAR_INIT(X, InitValue) GLOBAL_RAW(/##X); GLOBAL_MANAGED(X, InitValue) + +#define GLOBAL_VAR_CONST(X, InitValue) GLOBAL_RAW(/const/##X) = InitValue; GLOBAL_UNMANAGED(X, InitValue) + +#define GLOBAL_LIST_INIT(X, InitValue) GLOBAL_RAW(/list/##X); GLOBAL_MANAGED(X, InitValue) + +#define GLOBAL_LIST_EMPTY(X) GLOBAL_LIST_INIT(X, list()) + +#define GLOBAL_DATUM_INIT(X, Typepath, InitValue) GLOBAL_RAW(Typepath/##X); GLOBAL_MANAGED(X, InitValue) + +#define GLOBAL_VAR(X) GLOBAL_RAW(/##X); GLOBAL_MANAGED(X, null) + +#define GLOBAL_LIST(X) GLOBAL_RAW(/list/##X); GLOBAL_MANAGED(X, null) + +#define GLOBAL_DATUM(X, Typepath) GLOBAL_RAW(Typepath/##X); GLOBAL_MANAGED(X, null) \ No newline at end of file diff --git a/code/__DEFINES/MC.dm b/code/__DEFINES/MC.dm index 86c43d1590..130e3dd671 100644 --- a/code/__DEFINES/MC.dm +++ b/code/__DEFINES/MC.dm @@ -1,4 +1,4 @@ -#define MC_TICK_CHECK ( ( world.tick_usage > CURRENT_TICKLIMIT || src.state != SS_RUNNING ) ? pause() : 0 ) +#define MC_TICK_CHECK ( ( world.tick_usage > GLOB.CURRENT_TICKLIMIT || src.state != SS_RUNNING ) ? pause() : 0 ) // Used to smooth out costs to try and avoid oscillation. #define MC_AVERAGE_FAST(average, current) (0.7 * (average) + 0.3 * (current)) #define MC_AVERAGE(average, current) (0.8 * (average) + 0.2 * (current)) @@ -52,18 +52,16 @@ #define SS_SLEEPING 4 //fire() slept. #define SS_PAUSING 5 //in the middle of pausing +#define SUBSYSTEM_DEF(X) GLOBAL_REAL(SS##X, /datum/controller/subsystem/##X);\ +/datum/controller/subsystem/##X/New(){\ + NEW_SS_GLOBAL(SS##X);\ + PreInit();\ +}\ +/datum/controller/subsystem/##X -//Timing subsystem -//Don't run if there is an identical unique timer active -#define TIMER_UNIQUE 0x1 -//For unique timers: Replace the old timer rather then not start this one -#define TIMER_OVERRIDE 0x2 -//Timing should be based on how timing progresses on clients, not the sever. -// tracking this is more expensive, -// should only be used in conjuction with things that have to progress client side, such as animate() or sound() -#define TIMER_CLIENT_TIME 0x4 -//Timer can be stopped using deltimer() -#define TIMER_STOPPABLE 0x8 -//To be used with TIMER_UNIQUE -//prevents distinguishing identical timers with the wait variable -#define TIMER_NO_HASH_WAIT 0x10 \ No newline at end of file +#define PROCESSING_SUBSYSTEM_DEF(X) GLOBAL_REAL(SS##X, /datum/controller/subsystem/processing/##X);\ +/datum/controller/subsystem/processing/##X/New(){\ + NEW_SS_GLOBAL(SS##X);\ + PreInit();\ +}\ +/datum/controller/subsystem/processing/##X diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index 9e393c1598..c5ef02c455 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -43,7 +43,6 @@ #define ADMIN_VV(atom) "(VV)" #define ADMIN_SM(user) "(SM)" #define ADMIN_TP(user) "(TP)" -#define ADMIN_BSA(user) "(BSA)" #define ADMIN_KICK(user) "(KICK)" #define ADMIN_CENTCOM_REPLY(user) "(RPLY)" #define ADMIN_SYNDICATE_REPLY(user) "(RPLY)" @@ -52,11 +51,14 @@ #define ADMIN_LOOKUP(user) "[key_name_admin(user)][ADMIN_QUE(user)]" #define ADMIN_LOOKUPFLW(user) "[key_name_admin(user)][ADMIN_QUE(user)] [ADMIN_FLW(user)]" #define ADMIN_SET_SD_CODE "(SETCODE)" -#define ADMIN_FULLMONTY(user) "[key_name_admin(user)] [ADMIN_QUE(user)] [ADMIN_PP(user)] [ADMIN_VV(user)] [ADMIN_SM(user)] [ADMIN_FLW(user)] [ADMIN_TP(user)]" +#define ADMIN_FULLMONTY_NONAME(user) "[ADMIN_QUE(user)] [ADMIN_PP(user)] [ADMIN_VV(user)] [ADMIN_SM(user)] [ADMIN_FLW(user)] [ADMIN_TP(user)] [ADMIN_INDIVIDUALLOG(user)]" +#define ADMIN_FULLMONTY(user) "[key_name_admin(user)] [ADMIN_FULLMONTY_NONAME(user)]" #define ADMIN_JMP(src) "(JMP)" #define COORD(src) "[src ? "([src.x],[src.y],[src.z])" : "nonexistent location"]" #define ADMIN_COORDJMP(src) "[src ? "[COORD(src)] [ADMIN_JMP(src)]" : "nonexistent location"]" +#define ADMIN_INDIVIDUALLOG(user) "(LOGS)" #define ADMIN_PUNISHMENT_LIGHTNING "Lightning bolt" #define ADMIN_PUNISHMENT_BRAINDAMAGE "Brain damage" -#define ADMIN_PUNISHMENT_GIB "Gib" \ No newline at end of file +#define ADMIN_PUNISHMENT_GIB "Gib" +#define ADMIN_PUNISHMENT_BSA "Bluespace Artillery Device" \ No newline at end of file diff --git a/code/__DEFINES/citadel_defines.dm b/code/__DEFINES/citadel_defines.dm index 7e8f2d4add..51ba9d4c59 100644 --- a/code/__DEFINES/citadel_defines.dm +++ b/code/__DEFINES/citadel_defines.dm @@ -65,18 +65,6 @@ #define MILK_RATE_MULT 1 #define MILK_EFFICIENCY 1 - -// Admin ticket things -#define TICKET_RESOLVED "Yes" -#define TICKET_UNRESOLVED "No" -#define TICKET_UNASSIGNED "N/A" - -#define TICKET_REPLIED "Yes" -#define TICKET_UNREPLIED "No" - -#define TICKET_INACTIVE "No" -#define TICKET_ACTIVE "Yes" - //Individual logging define #define INDIVIDUAL_LOOC_LOG "LOOC log" diff --git a/code/__DEFINES/clockcult.dm b/code/__DEFINES/clockcult.dm index 768ee708ec..9c86e031ab 100644 --- a/code/__DEFINES/clockcult.dm +++ b/code/__DEFINES/clockcult.dm @@ -5,17 +5,17 @@ #define REPLICANT_ALLOY "replicant_alloy" #define HIEROPHANT_ANSIBLE "hierophant_ansible" -var/global/clockwork_construction_value = 0 //The total value of all structures built by the clockwork cult -var/global/clockwork_caches = 0 //How many clockwork caches exist in the world (not each individual) -var/global/clockwork_daemons = 0 //How many daemons exist in the world -var/global/list/clockwork_generals_invoked = list("nezbere" = FALSE, "sevtug" = FALSE, "nzcrentr" = FALSE, "inath-neq" = FALSE) //How many generals have been recently invoked -var/global/list/all_clockwork_objects = list() //All clockwork items, structures, and effects in existence -var/global/list/all_clockwork_mobs = list() //All clockwork SERVANTS (not creatures) in existence -var/global/list/clockwork_component_cache = list(BELLIGERENT_EYE = 0, VANGUARD_COGWHEEL = 0, GEIS_CAPACITOR = 0, REPLICANT_ALLOY = 0, HIEROPHANT_ANSIBLE = 0) //The pool of components that caches draw from -var/global/ratvar_awakens = 0 //If Ratvar has been summoned; not a boolean, for proper handling of multiple Ratvars -var/global/nezbere_invoked = 0 //If Nezbere has been invoked; not a boolean, for proper handling of multiple Nezberes -var/global/clockwork_gateway_activated = FALSE //if a gateway to the celestial derelict has ever been successfully activated -var/global/list/all_scripture = list() //a list containing scripture instances; not used to track existing scripture +GLOBAL_VAR_INIT(clockwork_construction_value, 0) //The total value of all structures built by the clockwork cult +GLOBAL_VAR_INIT(clockwork_caches, 0) //How many clockwork caches exist in the world (not each individual) +GLOBAL_VAR_INIT(clockwork_daemons, 0) //How many daemons exist in the world +GLOBAL_LIST_INIT(clockwork_generals_invoked, list("nezbere" = FALSE, "sevtug" = FALSE, "nzcrentr" = FALSE, "inath-neq" = FALSE)) //How many generals have been recently invoked +GLOBAL_LIST_EMPTY(all_clockwork_objects) //All clockwork items, structures, and effects in existence +GLOBAL_LIST_EMPTY(all_clockwork_mobs) //All clockwork SERVANTS (not creatures) in existence +GLOBAL_LIST_INIT(clockwork_component_cache, list(BELLIGERENT_EYE = 0, VANGUARD_COGWHEEL = 0, GEIS_CAPACITOR = 0, REPLICANT_ALLOY = 0, HIEROPHANT_ANSIBLE = 0)) //The pool of components that caches draw from +GLOBAL_VAR_INIT(ratvar_awakens, 0) //If Ratvar has been summoned; not a boolean, for proper handling of multiple Ratvars +GLOBAL_VAR_INIT(nezbere_invoked, 0) //If Nezbere has been invoked; not a boolean, for proper handling of multiple Nezberes +GLOBAL_VAR_INIT(clockwork_gateway_activated, FALSE) //if a gateway to the celestial derelict has ever been successfully activated +GLOBAL_LIST_EMPTY(all_scripture) //a list containing scripture instances; not used to track existing scripture //Scripture tiers and requirements; peripherals should never be used #define SCRIPTURE_PERIPHERAL "Peripheral" @@ -43,7 +43,9 @@ var/global/list/all_scripture = list() //a list containing scripture instances; #define SLAB_SLOWDOWN_MAXIMUM 2700 //maximum slowdown from additional servants; defaults to 4 minutes 30 seconds -#define CACHE_PRODUCTION_TIME 900 //how long(deciseconds) caches require to produce a component; defaults to 1 minute 30 seconds +#define CACHE_PRODUCTION_TIME 600 //how long(deciseconds) caches require to produce a component; defaults to 1 minute + +#define ACTIVE_CACHE_SLOWDOWN 100 //how many additional deciseconds caches take to produce a component for each linked cache; defaults to 10 seconds #define LOWER_PROB_PER_COMPONENT 10 //how much each component in the cache reduces the weight of getting another of that component type @@ -85,10 +87,12 @@ var/global/list/all_scripture = list() //a list containing scripture instances; #define GATEWAY_RATVAR_ARRIVAL 300 //when progress is at or above this, game over ratvar's here everybody go home -//Objective defines -#define CLOCKCULT_GATEWAY "summon ratvar" +#define ARK_SUMMON_COST 3 //how many of each component an Ark costs to summon -#define CLOCKCULT_ESCAPE "proselytize the station" +#define ARK_CONSUME_COST 7 //how many of each component an Ark needs to consume to activate + +//Objective text define +#define CLOCKCULT_OBJECTIVE "Construct the Ark of the Clockwork Justicar and free Ratvar." //misc clockcult stuff #define MARAUDER_EMERGE_THRESHOLD 65 //marauders cannot emerge unless host is at this% or less health diff --git a/code/__DEFINES/construction.dm b/code/__DEFINES/construction.dm index 79d78dfbae..d4b536ec2f 100644 --- a/code/__DEFINES/construction.dm +++ b/code/__DEFINES/construction.dm @@ -60,6 +60,12 @@ #define GEAR_SECURE 1 #define GEAR_LOOSE 2 +//floodlights because apparently we use defines now +#define FLOODLIGHT_NEEDS_WIRES 0 +#define FLOODLIGHT_NEEDS_LIGHTS 1 +#define FLOODLIGHT_NEEDS_SECURING 2 +#define FLOODLIGHT_NEEDS_WRENCHING 3 + //other construction-related things //windows affected by nar-sie turn this color. diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index 0c07b50147..05466e1458 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -19,10 +19,11 @@ #define ON_BORDER 512 // item has priority to check when entering or leaving #define NOSLIP 1024 //prevents from slipping on wet floors, in space etc +#define CLEAN_ON_MOVE 2048 // BLOCK_GAS_SMOKE_EFFECT only used in masks at the moment. -#define BLOCK_GAS_SMOKE_EFFECT 8192 // blocks the effect that chemical clouds would have on a mob --glasses, mask and helmets ONLY! (NOTE: flag shared with THICKMATERIAL) -#define THICKMATERIAL 8192 //prevents syringes, parapens and hypos if the external suit or helmet (if targeting head) has this flag. Example: space suits, biosuit, bombsuits, thick suits that cover your body. (NOTE: flag shared with BLOCK_GAS_SMOKE_EFFECT) +#define BLOCK_GAS_SMOKE_EFFECT 4096 // blocks the effect that chemical clouds would have on a mob --glasses, mask and helmets ONLY! +#define THICKMATERIAL 8192 //prevents syringes, parapens and hypos if the external suit or helmet (if targeting head) has this flag. Example: space suits, biosuit, bombsuits, thick suits that cover your body. #define DROPDEL 16384 // When dropped, it calls qdel on itself /* Secondary atom flags, access using the SECONDARY_FLAG macros */ @@ -35,6 +36,12 @@ #define INFORM_ADMINS_ON_RELOCATE "inform_admins_on_relocate" #define BANG_PROTECT "bang_protect" +// A mob with OMNITONGUE has no restriction in the ability to speak +// languages that they know. So even if they wouldn't normally be able to +// through mob or tongue restrictions, this flag allows them to ignore +// those restrictions. +#define OMNITONGUE "omnitongue" + //turf-only flags #define NOJAUNT 1 #define UNUSED_TRANSIT_TURF 2 @@ -59,20 +66,6 @@ #define GROUND 1 #define FLYING 2 - -/* - These defines are used specifically with the atom/movable/languages bitmask. - They are used in atom/movable/Hear() and atom/movable/say() to determine whether hearers can understand a message. -*/ -#define HUMAN 1 -#define MONKEY 2 -#define ALIEN 4 -#define ROBOT 8 -#define SLIME 16 -#define DRONE 32 -#define SWARMER 64 -#define RATVAR 128 - // Flags for reagents #define REAGENT_NOREACT 1 @@ -84,3 +77,5 @@ #define UNACIDABLE 16 //acid can't even appear on it, let alone melt it. #define ACID_PROOF 32 //acid stuck on it doesn't melt it. #define INDESTRUCTIBLE 64 //doesn't take damage + +// language secondary flags for atoms diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index e9a3b21bbb..097538c590 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -19,6 +19,8 @@ #define ismineralturf(A) (istype(A, /turf/closed/mineral)) +#define islava(A) (istype(A, /turf/open/floor/plating/lava)) + //Mobs #define isliving(A) (istype(A, /mob/living)) @@ -120,13 +122,13 @@ #define isorgan(A) (istype(A, /obj/item/organ)) -var/list/static/global/pointed_types = typecacheof(list( +GLOBAL_LIST_INIT(pointed_types, typecacheof(list( /obj/item/weapon/pen, /obj/item/weapon/screwdriver, /obj/item/weapon/reagent_containers/syringe, - /obj/item/weapon/kitchen/fork)) + /obj/item/weapon/kitchen/fork))) -#define is_pointed(W) (is_type_in_typecache(W, pointed_types)) +#define is_pointed(W) (is_type_in_typecache(W, GLOB.pointed_types)) #define isbodypart(A) (istype(A, /obj/item/bodypart)) diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm new file mode 100644 index 0000000000..6d5310364f --- /dev/null +++ b/code/__DEFINES/jobs.dm @@ -0,0 +1,43 @@ + +#define ENGSEC (1<<0) + +#define CAPTAIN (1<<0) +#define HOS (1<<1) +#define WARDEN (1<<2) +#define DETECTIVE (1<<3) +#define OFFICER (1<<4) +#define CHIEF (1<<5) +#define ENGINEER (1<<6) +#define ATMOSTECH (1<<7) +#define ROBOTICIST (1<<8) +#define AI_JF (1<<9) +#define CYBORG (1<<10) + + +#define MEDSCI (1<<1) + +#define RD_JF (1<<0) +#define SCIENTIST (1<<1) +#define CHEMIST (1<<2) +#define CMO_JF (1<<3) +#define DOCTOR (1<<4) +#define GENETICIST (1<<5) +#define VIROLOGIST (1<<6) + + +#define CIVILIAN (1<<2) + +#define HOP (1<<0) +#define BARTENDER (1<<1) +#define BOTANIST (1<<2) +#define COOK (1<<3) +#define JANITOR (1<<4) +#define LIBRARIAN (1<<5) +#define QUARTERMASTER (1<<6) +#define CARGOTECH (1<<7) +#define MINER (1<<8) +#define LAWYER (1<<9) +#define CHAPLAIN (1<<10) +#define CLOWN (1<<11) +#define MIME (1<<12) +#define ASSISTANT (1<<13) \ No newline at end of file diff --git a/code/__DEFINES/language.dm b/code/__DEFINES/language.dm new file mode 100644 index 0000000000..3f09f46817 --- /dev/null +++ b/code/__DEFINES/language.dm @@ -0,0 +1,2 @@ +#define NO_STUTTER 1 +#define TONGUELESS_SPEECH 2 diff --git a/code/__DEFINES/lighting.dm b/code/__DEFINES/lighting.dm index 78395458ae..32b4e6059f 100644 --- a/code/__DEFINES/lighting.dm +++ b/code/__DEFINES/lighting.dm @@ -4,9 +4,9 @@ #define LIGHTING_FALLOFF 1 // type of falloff to use for lighting; 1 for circular, 2 for square #define LIGHTING_LAMBERTIAN 0 // use lambertian shading for light sources #define LIGHTING_HEIGHT 1 // height off the ground of light sources on the pseudo-z-axis, you should probably leave this alone -#define LIGHTING_ROUND_VALUE 1 / 128 //Value used to round lumcounts, values smaller than 1/255 don't matter (if they do, thanks sinking points), greater values will make lighting less precise, but in turn increase performance, VERY SLIGHTLY. +#define LIGHTING_ROUND_VALUE 1 / 64 //Value used to round lumcounts, values smaller than 1/129 don't matter (if they do, thanks sinking points), greater values will make lighting less precise, but in turn increase performance, VERY SLIGHTLY. -#define LIGHTING_ICON 'icons/effects/lighting_object.png' // icon used for lighting shading effects +#define LIGHTING_ICON 'icons/effects/lighting_object.dmi' // icon used for lighting shading effects // If the max of the lighting lumcounts of each spectrum drops below this, disable luminosity on the lighting objects. // Set to zero to disable soft lighting. Luminosity changes then work if it's lit at all. @@ -67,3 +67,8 @@ #define LIGHT_COLOR_SLIME_LAMP "#AFC84B" //Weird color, between yellow and green, very slimy. rgb(175, 200, 75) #define LIGHT_COLOR_TUNGSTEN "#FAE1AF" //Extremely diluted yellow, close to skin color (for some reason). rgb(250, 225, 175) #define LIGHT_COLOR_HALOGEN "#F0FAFA" //Barely visible cyan-ish hue, as the doctor prescribed. rgb(240, 250, 250) + +#define LIGHTING_PLANE_ALPHA_VISIBLE 255 +#define LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE 192 +#define LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE 128 //For lighting alpha, small amounts lead to big changes. even at 128 its hard to figure out what is dark and what is light, at 64 you almost can't even tell. +#define LIGHTING_PLANE_ALPHA_INVISIBLE 0 \ No newline at end of file diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm index 8f9f1cb5e7..004ea378da 100644 --- a/code/__DEFINES/machines.dm +++ b/code/__DEFINES/machines.dm @@ -63,3 +63,6 @@ #define PROGRAM_STATE_KILLED 0 #define PROGRAM_STATE_BACKGROUND 1 #define PROGRAM_STATE_ACTIVE 2 + +#define FIREDOOR_OPEN 1 +#define FIREDOOR_CLOSED 2 \ No newline at end of file diff --git a/code/__DEFINES/maps.dm b/code/__DEFINES/maps.dm index 6212c2a4c7..21aaaaaf07 100644 --- a/code/__DEFINES/maps.dm +++ b/code/__DEFINES/maps.dm @@ -41,4 +41,6 @@ Last space-z level = empty #define ZLEVEL_EMPTY_SPACE 11 #define ZLEVEL_SPACEMIN 3 -#define ZLEVEL_SPACEMAX 11 \ No newline at end of file +#define ZLEVEL_SPACEMAX 11 + +#define SPACERUIN_MAP_EDGE_PAD 15 \ No newline at end of file diff --git a/code/__DEFINES/math.dm b/code/__DEFINES/math.dm index 76dae9e21e..3e781da6cd 100644 --- a/code/__DEFINES/math.dm +++ b/code/__DEFINES/math.dm @@ -22,4 +22,4 @@ //time of day but automatically adjusts to the server going into the next day within the same round. //for when you need a reliable time number that doesn't depend on byond time. #define REALTIMEOFDAY (world.timeofday + (MIDNIGHT_ROLLOVER * MIDNIGHT_ROLLOVER_CHECK)) -#define MIDNIGHT_ROLLOVER_CHECK ( rollovercheck_last_timeofday != world.timeofday ? update_midnight_rollover() : midnight_rollovers ) +#define MIDNIGHT_ROLLOVER_CHECK ( GLOB.rollovercheck_last_timeofday != world.timeofday ? update_midnight_rollover() : GLOB.midnight_rollovers ) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 8e98e80d78..b71af8236e 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -149,7 +149,7 @@ #define STAGE_FIVE 9 #define STAGE_SIX 11 //From supermatter shard -//ticker.current_state values +//SSticker.current_state values #define GAME_STATE_STARTUP 0 #define GAME_STATE_PREGAME 1 #define GAME_STATE_SETTING_UP 2 @@ -188,7 +188,7 @@ //Key: //"entered-[blood_state]-[dir_of_image]" //or: "exited-[blood_state]-[dir_of_image]" -var/list/bloody_footprints_cache = list() +GLOBAL_LIST_EMPTY(bloody_footprints_cache) //Bloody shoes/footprints #define MAX_SHOE_BLOODINESS 100 @@ -253,7 +253,7 @@ var/list/bloody_footprints_cache = list() #define GHOST_ACCS_DEFAULT_OPTION GHOST_ACCS_FULL -var/global/list/ghost_accs_options = list(GHOST_ACCS_NONE, GHOST_ACCS_DIR, GHOST_ACCS_FULL) //So save files can be sanitized properly. +GLOBAL_LIST_INIT(ghost_accs_options, list(GHOST_ACCS_NONE, GHOST_ACCS_DIR, GHOST_ACCS_FULL)) //So save files can be sanitized properly. #define GHOST_OTHERS_SIMPLE 1 #define GHOST_OTHERS_DEFAULT_SPRITE 50 @@ -269,7 +269,7 @@ var/global/list/ghost_accs_options = list(GHOST_ACCS_NONE, GHOST_ACCS_DIR, GHOST #define GHOST_MAX_VIEW_RANGE_MEMBER 14 -var/global/list/ghost_others_options = list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DEFAULT_SPRITE, GHOST_OTHERS_THEIR_SETTING) //Same as ghost_accs_options. +GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DEFAULT_SPRITE, GHOST_OTHERS_THEIR_SETTING)) //Same as ghost_accs_options. //Color Defines #define OOC_COLOR "#002eb8" @@ -332,9 +332,9 @@ var/global/list/ghost_others_options = list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE #define SHELTER_DEPLOY_ANCHORED_OBJECTS "anchored objects" //debug printing macros -#define debug_world(msg) if (Debug2) to_chat(world, "DEBUG: [msg]") -#define debug_admins(msg) if (Debug2) to_chat(admins, "DEBUG: [msg]") -#define debug_world_log(msg) if (Debug2) log_world("DEBUG: [msg]") +#define debug_world(msg) if (GLOB.Debug2) to_chat(world, "DEBUG: [msg]") +#define debug_admins(msg) if (GLOB.Debug2) to_chat(GLOB.admins, "DEBUG: [msg]") +#define debug_world_log(msg) if (GLOB.Debug2) log_world("DEBUG: [msg]") #define COORD(A) "([A.x],[A.y],[A.z])" #define INCREMENT_TALLY(L, stat) if(L[stat]){L[stat]++}else{L[stat] = 1} diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 2d847f39b5..28e4a262fd 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -107,4 +107,13 @@ #define INDIVIDUAL_SAY_LOG "Say log" #define INDIVIDUAL_EMOTE_LOG "Emote log" #define INDIVIDUAL_OOC_LOG "OOC log" -#define INDIVIDUAL_SHOW_ALL_LOG "All logs" \ No newline at end of file +#define INDIVIDUAL_SHOW_ALL_LOG "All logs" + +#define TK_MAXRANGE 15 + +#define NO_SLIP_WHEN_WALKING 1 +#define SLIDE 2 +#define GALOSHES_DONT_HELP 4 +#define SLIDE_ICE 8 + +#define MAX_CHICKENS 50 \ No newline at end of file diff --git a/code/__DEFINES/reagents.dm b/code/__DEFINES/reagents.dm index 2cd950b92d..6df0514b0a 100644 --- a/code/__DEFINES/reagents.dm +++ b/code/__DEFINES/reagents.dm @@ -3,4 +3,10 @@ #define GAS 3 #define OPENCONTAINER 4096 // is an open container for chemistry purposes -#define TRANSPARENT 8192 //Used for non-open containers which you still want to be able to see the reagents off. \ No newline at end of file +#define TRANSPARENT 8192 //Used for non-open containers which you still want to be able to see the reagents off. + +#define TOUCH 1 //splashing +#define INGEST 2 //ingestion +#define VAPOR 3 //foam, spray, blob attack +#define PATCH 4 //patches +#define INJECT 5 //injection \ No newline at end of file diff --git a/code/__DEFINES/robots.dm b/code/__DEFINES/robots.dm index 921589d033..9b450765db 100644 --- a/code/__DEFINES/robots.dm +++ b/code/__DEFINES/robots.dm @@ -34,3 +34,9 @@ #define FLOOR_BOT 4 // Floorbots #define CLEAN_BOT 8 // Cleanbots #define MED_BOT 16 // Medibots + +//AI notification defines +#define NEW_BORG 1 +#define NEW_MODULE 2 +#define RENAME 3 +#define AI_SHELL 4 \ No newline at end of file diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index 94995eeb23..dc9fbe6fe3 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -28,7 +28,7 @@ //Missing assignment means it's not a gamemode specific role, IT'S NOT A BUG OR ERROR. //The gamemode specific ones are just so the gamemodes can query whether a player is old enough //(in game days played) to play that role -var/global/list/special_roles = list( +GLOBAL_LIST_INIT(special_roles, list( ROLE_TRAITOR = /datum/game_mode/traitor, ROLE_OPERATIVE = /datum/game_mode/nuclear, ROLE_CHANGELING = /datum/game_mode/changeling, @@ -47,7 +47,7 @@ var/global/list/special_roles = list( ROLE_DEVIL = /datum/game_mode/devil, ROLE_SERVANT_OF_RATVAR = /datum/game_mode/clockwork_cult, ROLE_BORER, -) +)) //Job defines for what happens when you fail to qualify for any job during job selection #define BEASSISTANT 1 diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm index 2d460f2d8b..4f3a03dc95 100644 --- a/code/__DEFINES/say.dm +++ b/code/__DEFINES/say.dm @@ -11,6 +11,7 @@ #define MODE_INTERCOM "intercom" #define MODE_BINARY "binary" #define MODE_WHISPER "whisper" +#define MODE_WHISPER_CRIT "whispercrit" #define MODE_DEPARTMENT "department" #define MODE_ALIEN "alientalk" #define MODE_HOLOPAD "holopad" @@ -32,6 +33,9 @@ #define REDUCE_RANGE 2 #define NOPASS 4 +//Eavesdropping +#define EAVESDROP_EXTRA_RANGE 1 //how much past the specified message_range does the message get starred, whispering only + // A link given to ghost alice to follow bob #define FOLLOW_LINK(alice, bob) "(F)" #define TURF_LINK(alice, turfy) "(T)" diff --git a/code/__DEFINES/shuttles.dm b/code/__DEFINES/shuttles.dm index ea52fb21ae..a133816f2d 100644 --- a/code/__DEFINES/shuttles.dm +++ b/code/__DEFINES/shuttles.dm @@ -43,4 +43,6 @@ #define HYPERSPACE_WARMUP 1 #define HYPERSPACE_LAUNCH 2 -#define HYPERSPACE_END 3 \ No newline at end of file +#define HYPERSPACE_END 3 + +#define CALL_SHUTTLE_REASON_LENGTH 12 \ No newline at end of file diff --git a/code/__DEFINES/sight.dm b/code/__DEFINES/sight.dm index 6482d541f0..d756cbaf1b 100644 --- a/code/__DEFINES/sight.dm +++ b/code/__DEFINES/sight.dm @@ -1,8 +1,5 @@ - #define SEE_INVISIBLE_MINIMUM 5 -#define SEE_INVISIBLE_NOLIGHTING 15 //to not see the lighting objects. Used for nightvision and observer with darkness toggled. - #define INVISIBILITY_LIGHTING 20 #define SEE_INVISIBLE_LIVING 25 diff --git a/code/__DEFINES/sound.dm b/code/__DEFINES/sound.dm new file mode 100644 index 0000000000..94ed5dc7b9 --- /dev/null +++ b/code/__DEFINES/sound.dm @@ -0,0 +1,8 @@ +//max channel is 1024. Only go lower from here, because byond tends to pick the first availiable channel to play sounds on +#define CHANNEL_LOBBYMUSIC 1024 +#define CHANNEL_ADMIN 1023 +#define CHANNEL_VOX 1022 + +//THIS SHOULD ALWAYS BE THE LOWEST ONE! +//KEEP IT UPDATED +#define CHANNEL_HIGHEST_AVAILABLE 1021 diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index 3bdd86ae39..bc5816dbb9 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -1,6 +1,12 @@ //These are all the different status effects. Use the paths for each effect in the defines. +#define STATUS_EFFECT_MULTIPLE 0 //if it allows multiple instances of the effect + +#define STATUS_EFFECT_UNIQUE 1 //if it allows only one, preventing new instances + +#define STATUS_EFFECT_REPLACE 2 //if it allows only one, but new instances replace + #define BASIC_STATUS_EFFECT /datum/status_effect //Has no effect. /////////// diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm new file mode 100644 index 0000000000..20b3f88745 --- /dev/null +++ b/code/__DEFINES/subsystems.dm @@ -0,0 +1,21 @@ + +//Timing subsystem +//Don't run if there is an identical unique timer active +#define TIMER_UNIQUE 0x1 +//For unique timers: Replace the old timer rather then not start this one +#define TIMER_OVERRIDE 0x2 +//Timing should be based on how timing progresses on clients, not the sever. +// tracking this is more expensive, +// should only be used in conjuction with things that have to progress client side, such as animate() or sound() +#define TIMER_CLIENT_TIME 0x4 +//Timer can be stopped using deltimer() +#define TIMER_STOPPABLE 0x8 +//To be used with TIMER_UNIQUE +//prevents distinguishing identical timers with the wait variable +#define TIMER_NO_HASH_WAIT 0x10 + +#define TIMER_NO_INVOKE_WARNING 600 //number of byond ticks that are allowed to pass before the timer subsystem thinks it hung on something + +//For servers that can't do with any additional lag, set this to none in flightpacks.dm in subsystem/processing. +#define FLIGHTSUIT_PROCESSING_NONE 0 +#define FLIGHTSUIT_PROCESSING_FULL 1 diff --git a/code/__DEFINES/tick.dm b/code/__DEFINES/tick.dm index 393ad99eda..0c8c17da6f 100644 --- a/code/__DEFINES/tick.dm +++ b/code/__DEFINES/tick.dm @@ -3,5 +3,5 @@ #define TICK_LIMIT_MC 70 #define TICK_LIMIT_MC_INIT_DEFAULT 98 -#define TICK_CHECK ( world.tick_usage > CURRENT_TICKLIMIT ) -#define CHECK_TICK if (world.tick_usage > CURRENT_TICKLIMIT) stoplag() +#define TICK_CHECK ( world.tick_usage > GLOB.CURRENT_TICKLIMIT ) +#define CHECK_TICK if TICK_CHECK stoplag() diff --git a/code/__DEFINES/voreconstants.dm b/code/__DEFINES/voreconstants.dm deleted file mode 100644 index 6a07a60f4b..0000000000 --- a/code/__DEFINES/voreconstants.dm +++ /dev/null @@ -1,66 +0,0 @@ -// Overhauled vore system -#define DM_HOLD "Hold" -#define DM_DIGEST "Digest" -#define DM_HEAL "Heal" -#define DM_DIGESTF "Fast Digest" - -#define VORE_STRUGGLE_EMOTE_CHANCE 40 - -// Stance for hostile mobs to be in while devouring someone. -#define HOSTILE_STANCE_EATING 99 - -/* -var/global/list/player_sizes_list = list("Macro" = SIZESCALE_HUGE, "Big" = SIZESCALE_BIG, "Normal" = SIZESCALE_NORMAL, "Small" = SIZESCALE_SMALL, "Tiny" = SIZESCALE_TINY) - // moved to sound.dm - -var/global/list/digestion_sounds = list( - 'sound/vore/digest1.ogg', - 'sound/vore/digest2.ogg', - 'sound/vore/digest3.ogg', - 'sound/vore/digest4.ogg', - 'sound/vore/digest5.ogg', - 'sound/vore/digest6.ogg', - 'sound/vore/digest7.ogg', - 'sound/vore/digest8.ogg', - 'sound/vore/digest9.ogg', - 'sound/vore/digest10.ogg', - 'sound/vore/digest11.ogg', - 'sound/vore/digest12.ogg') - -var/global/list/death_sounds = list( - 'sound/vore/death1.ogg', - 'sound/vore/death2.ogg', - 'sound/vore/death3.ogg', - 'sound/vore/death4.ogg', - 'sound/vore/death5.ogg', - 'sound/vore/death6.ogg', - 'sound/vore/death7.ogg', - 'sound/vore/death8.ogg', - 'sound/vore/death9.ogg', - 'sound/vore/death10.ogg') */ - -var/global/list/vore_sounds = list( - "Gulp" = 'sound/vore/gulp.ogg', - "Insert" = 'sound/vore/insert.ogg', - "Insertion1" = 'sound/vore/insertion1.ogg', - "Insertion2" = 'sound/vore/insertion2.ogg', - "Insertion3" = 'sound/vore/insertion3.ogg', - "Schlorp" = 'sound/vore/schlorp.ogg', - "Squish1" = 'sound/vore/squish1.ogg', - "Squish2" = 'sound/vore/squish2.ogg', - "Squish3" = 'sound/vore/squish3.ogg', - "Squish4" = 'sound/vore/squish4.ogg') -/* also moved to sound.dmi -var/global/list/struggle_sounds = list( - "Squish1" = 'sound/vore/squish1.ogg', - "Squish2" = 'sound/vore/squish2.ogg', - "Squish3" = 'sound/vore/squish3.ogg', - "Squish4" = 'sound/vore/squish4.ogg') - -/proc/log_debug(text) - if (config.log_debug) - diary << "\[[time_stamp()]]DEBUG: [text][log_end]" - - for(var/client/C in admins) - if(C.prefs.toggles & CHAT_DEBUGLOGS) - C << "DEBUG: [text]" */ diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index de22c139ae..db07a99d03 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -65,7 +65,10 @@ if(!L || !L.len || !A) return 0 - return L[A.type] + if(ispath(A)) + . = L[A] + else + . = L[A.type] //Checks for a string in a list /proc/is_string_in_list(string, list/L) @@ -278,7 +281,7 @@ //Specifically for record datums in a list. /proc/sortRecord(list/L, field = "name", order = 1) - cmp_field = field + GLOB.cmp_field = field return sortTim(L, order >= 0 ? /proc/cmp_records_asc : /proc/cmp_records_dsc) //any value in a list diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm index cceea91f64..2785ba896f 100644 --- a/code/__HELPERS/_logging.dm +++ b/code/__HELPERS/_logging.dm @@ -18,15 +18,15 @@ #endif /proc/log_admin(text) - admin_log.Add(text) + GLOB.admin_log.Add(text) if (config.log_admin) - diary << "\[[time_stamp()]]ADMIN: [text]" + GLOB.diary << "\[[time_stamp()]]ADMIN: [text]" //Items using this proc are stripped from public logs - use with caution /proc/log_admin_private(text) - admin_log.Add(text) + GLOB.admin_log.Add(text) if (config.log_admin) - diary << "\[[time_stamp()]]ADMINPRIVATE: [text]" + GLOB.diary << "\[[time_stamp()]]ADMINPRIVATE: [text]" /proc/log_adminsay(text) if (config.log_adminchat) @@ -38,65 +38,65 @@ /proc/log_game(text) if (config.log_game) - diary << "\[[time_stamp()]]GAME: [text]" + GLOB.diary << "\[[time_stamp()]]GAME: [text]" /proc/log_vote(text) if (config.log_vote) - diary << "\[[time_stamp()]]VOTE: [text]" + GLOB.diary << "\[[time_stamp()]]VOTE: [text]" /proc/log_access(text) if (config.log_access) - diary << "\[[time_stamp()]]ACCESS: [text]" + GLOB.diary << "\[[time_stamp()]]ACCESS: [text]" /proc/log_say(text) if (config.log_say) - diary << "\[[time_stamp()]]SAY: [text]" + GLOB.diary << "\[[time_stamp()]]SAY: [text]" /proc/log_prayer(text) if (config.log_prayer) - diary << "\[[time_stamp()]]PRAY: [text]" + GLOB.diary << "\[[time_stamp()]]PRAY: [text]" /proc/log_law(text) if (config.log_law) - diary << "\[[time_stamp()]]LAW: [text]" + GLOB.diary << "\[[time_stamp()]]LAW: [text]" /proc/log_ooc(text) if (config.log_ooc) - diary << "\[[time_stamp()]]OOC: [text]" + GLOB.diary << "\[[time_stamp()]]OOC: [text]" /proc/log_whisper(text) if (config.log_whisper) - diary << "\[[time_stamp()]]WHISPER: [text]" + GLOB.diary << "\[[time_stamp()]]WHISPER: [text]" /proc/log_emote(text) if (config.log_emote) - diary << "\[[time_stamp()]]EMOTE: [text]" + GLOB.diary << "\[[time_stamp()]]EMOTE: [text]" /proc/log_attack(text) if (config.log_attack) - diaryofmeanpeople << "\[[time_stamp()]]ATTACK: [text]" + GLOB.diaryofmeanpeople << "\[[time_stamp()]]ATTACK: [text]" /proc/log_pda(text) if (config.log_pda) - diary << "\[[time_stamp()]]PDA: [text]" + GLOB.diary << "\[[time_stamp()]]PDA: [text]" /proc/log_comment(text) if (config.log_pda) //reusing the PDA option because I really don't think news comments are worth a config option - diary << "\[[time_stamp()]]COMMENT: [text]" + GLOB.diary << "\[[time_stamp()]]COMMENT: [text]" /proc/log_chat(text) if (config.log_pda) - diary << "\[[time_stamp()]]CHAT: [text]" + GLOB.diary << "\[[time_stamp()]]CHAT: [text]" /proc/log_sql(text) if(config.sql_enabled) - diary << "\[[time_stamp()]]SQL: [text]" + GLOB.diary << "\[[time_stamp()]]SQL: [text]" //This replaces world.log so it displays both in DD and the file /proc/log_world(text) if(config && config.log_runtimes) - world.log = runtime_diary + world.log = GLOB.runtime_diary world.log << text world.log = null world.log << text diff --git a/code/__HELPERS/_string_lists.dm b/code/__HELPERS/_string_lists.dm index b101efa2a9..7d694c1844 100644 --- a/code/__HELPERS/_string_lists.dm +++ b/code/__HELPERS/_string_lists.dm @@ -2,15 +2,15 @@ #define pick_list_replacements(FILE, KEY) (strings_replacement(FILE, KEY)) #define json_load(FILE) (json_decode(file2text(FILE))) -var/global/list/string_cache -var/global/string_filename_current_key +GLOBAL_LIST(string_cache) +GLOBAL_VAR(string_filename_current_key) /proc/strings_replacement(filename, key) load_strings_file(filename) - if((filename in string_cache) && (key in string_cache[filename])) - var/response = pick(string_cache[filename][key]) + if((filename in GLOB.string_cache) && (key in GLOB.string_cache[filename])) + var/response = pick(GLOB.string_cache[filename][key]) var/regex/r = regex("@pick\\((\\D+?)\\)", "g") response = r.Replace(response, /proc/strings_subkey_lookup) return response @@ -19,23 +19,23 @@ var/global/string_filename_current_key /proc/strings(filename as text, key as text) load_strings_file(filename) - if((filename in string_cache) && (key in string_cache[filename])) - return string_cache[filename][key] + if((filename in GLOB.string_cache) && (key in GLOB.string_cache[filename])) + return GLOB.string_cache[filename][key] else CRASH("strings list not found: strings/[filename], index=[key]") /proc/strings_subkey_lookup(match, group1) - return pick_list(string_filename_current_key, group1) + return pick_list(GLOB.string_filename_current_key, group1) /proc/load_strings_file(filename) - string_filename_current_key = filename - if(filename in string_cache) + GLOB.string_filename_current_key = filename + if(filename in GLOB.string_cache) return //no work to do - if(!string_cache) - string_cache = new + if(!GLOB.string_cache) + GLOB.string_cache = new if(fexists("strings/[filename]")) - string_cache[filename] = json_load("strings/[filename]") + GLOB.string_cache[filename] = json_load("strings/[filename]") else CRASH("file not found: strings/[filename]") diff --git a/code/__HELPERS/bandetect.dm b/code/__HELPERS/bandetect.dm index 9a43f30372..9da3c38632 100644 --- a/code/__HELPERS/bandetect.dm +++ b/code/__HELPERS/bandetect.dm @@ -2,7 +2,7 @@ /client/proc/join_date_check(y,m,d) - var/DBQuery/query_datediff = dbcon.NewQuery("SELECT DATEDIFF(Now(),'[y]-[m]-[d]')") + var/DBQuery/query_datediff = GLOB.dbcon.NewQuery("SELECT DATEDIFF(Now(),'[y]-[m]-[d]')") if(!query_datediff.Execute()) return FALSE diff --git a/code/__HELPERS/cmp.dm b/code/__HELPERS/cmp.dm index a84bec4d4e..be070ae806 100644 --- a/code/__HELPERS/cmp.dm +++ b/code/__HELPERS/cmp.dm @@ -16,12 +16,12 @@ /proc/cmp_name_dsc(atom/a, atom/b) return sorttext(a.name, b.name) -var/cmp_field = "name" +GLOBAL_VAR_INIT(cmp_field, "name") /proc/cmp_records_asc(datum/data/record/a, datum/data/record/b) - return sorttext(b.fields[cmp_field], a.fields[cmp_field]) + return sorttext(b.fields[GLOB.cmp_field], a.fields[GLOB.cmp_field]) /proc/cmp_records_dsc(datum/data/record/a, datum/data/record/b) - return sorttext(a.fields[cmp_field], b.fields[cmp_field]) + return sorttext(a.fields[GLOB.cmp_field], b.fields[GLOB.cmp_field]) /proc/cmp_ckey_asc(client/a, client/b) return sorttext(b.ckey, a.ckey) diff --git a/code/__HELPERS/files.dm b/code/__HELPERS/files.dm index 0b501c377a..2a0640a6e1 100644 --- a/code/__HELPERS/files.dm +++ b/code/__HELPERS/files.dm @@ -51,11 +51,11 @@ PLEASE USE RESPONSIBLY, Some log files can reach sizes of 4MB! */ /client/proc/file_spam_check() - var/time_to_wait = fileaccess_timer - world.time + var/time_to_wait = GLOB.fileaccess_timer - world.time if(time_to_wait > 0) to_chat(src, "Error: file_spam_check(): Spam. Please wait [round(time_to_wait/10)] seconds.") return 1 - fileaccess_timer = world.time + FTPDELAY + GLOB.fileaccess_timer = world.time + FTPDELAY return 0 #undef FTPDELAY diff --git a/code/__HELPERS/flags.dm b/code/__HELPERS/flags.dm index 8ff099ef27..5a6c1f3ab4 100644 --- a/code/__HELPERS/flags.dm +++ b/code/__HELPERS/flags.dm @@ -1,3 +1,4 @@ #define HAS_SECONDARY_FLAG(atom, sflag) (atom.secondary_flags ? atom.secondary_flags[sflag] : FALSE) #define SET_SECONDARY_FLAG(atom, sflag) if(!atom.secondary_flags) { atom.secondary_flags = list(); } atom.secondary_flags[sflag] = TRUE; #define CLEAR_SECONDARY_FLAG(atom, sflag) if(atom.secondary_flags) atom.secondary_flags[sflag] = null +#define TOGGLE_SECONDARY_FLAG(atom, sflag) if(HAS_SECONDARY_FLAG(atom, sflag)) { CLEAR_SECONDARY_FLAG(atom, sflag); } else {SET_SECONDARY_FLAG(atom, sflag) ; } diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 7ce7dc3705..a727d85dff 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -76,7 +76,7 @@ /proc/alone_in_area(area/the_area, mob/must_be_alone, check_type = /mob/living/carbon) var/area/our_area = get_area(the_area) - for(var/C in living_mob_list) + for(var/C in GLOB.living_mob_list) if(!istype(C, check_type)) continue if(C == must_be_alone) @@ -301,12 +301,12 @@ /proc/try_move_adjacent(atom/movable/AM) var/turf/T = get_turf(AM) - for(var/direction in cardinal) + for(var/direction in GLOB.cardinal) if(AM.Move(get_step(T, direction))) break /proc/get_mob_by_key(key) - for(var/mob/M in mob_list) + for(var/mob/M in GLOB.mob_list) if(M.ckey == lowertext(key)) return M return null @@ -317,7 +317,7 @@ var/list/candidates = list() // Keep looping until we find a non-afk candidate within the time bracket (we limit the bracket to 10 minutes (6000)) while(!candidates.len && afk_bracket < 6000) - for(var/mob/dead/observer/G in player_list) + for(var/mob/dead/observer/G in GLOB.player_list) if(G.client != null) if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD)) if(!G.client.is_afk(afk_bracket) && (be_special_type in G.client.prefs.be_special)) @@ -358,8 +358,8 @@ /proc/get_active_player_count(var/alive_check = 0, var/afk_check = 0, var/human_check = 0) // Get active players who are playing in the round var/active_players = 0 - for(var/i = 1; i <= player_list.len; i++) - var/mob/M = player_list[i] + for(var/i = 1; i <= GLOB.player_list.len; i++) + var/mob/M = GLOB.player_list[i] if(M && M.client) if(alive_check && M.stat) continue @@ -431,10 +431,10 @@ if(2) to_chat(G, "Choice registered: No.") if(3) - var/list/L = poll_ignore[ignore_category] + var/list/L = GLOB.poll_ignore[ignore_category] if(!L) - poll_ignore[ignore_category] = list() - poll_ignore[ignore_category] += G.ckey + GLOB.poll_ignore[ignore_category] = list() + GLOB.poll_ignore[ignore_category] += G.ckey to_chat(G, "Choice registered: Never for this round.") /proc/pollCandidates(var/Question, var/jobbanType, var/datum/game_mode/gametypeCheck, var/be_special_flag = 0, var/poll_time = 300, var/ignore_category = null, flashwindow = TRUE) @@ -443,8 +443,8 @@ if (!Question) Question = "Would you like to be a special role?" - for(var/mob/dead/observer/G in player_list) - if(!G.key || !G.client || (ignore_category && poll_ignore[ignore_category] && G.ckey in poll_ignore[ignore_category])) + for(var/mob/dead/observer/G in GLOB.player_list) + if(!G.key || !G.client || (ignore_category && GLOB.poll_ignore[ignore_category] && G.ckey in GLOB.poll_ignore[ignore_category])) continue if(be_special_flag) if(!(G.client.prefs) || !(be_special_flag in G.client.prefs.be_special)) @@ -490,7 +490,7 @@ return //First we spawn a dude. - var/mob/living/carbon/human/new_character = new(pick(latejoin))//The mob being spawned. + var/mob/living/carbon/human/new_character = new(pick(GLOB.latejoin))//The mob being spawned. G_found.client.prefs.copy_to(new_character) new_character.dna.update_dna_identity() @@ -499,7 +499,7 @@ return new_character /proc/send_to_playing_players(thing) //sends a whatever to all playing players; use instead of to_chat(world, where needed) - for(var/M in player_list) + for(var/M in GLOB.player_list) if(M && !isnewplayer(M)) to_chat(M, thing) @@ -513,19 +513,19 @@ winset(C, "mainwindow", "flash=5") /proc/AnnounceArrival(var/mob/living/carbon/human/character, var/rank) - if(ticker.current_state != GAME_STATE_PLAYING || !character) + if(SSticker.current_state != GAME_STATE_PLAYING || !character) return var/area/A = get_area(character) var/message = "\ [character.real_name] ([rank]) has arrived at the station at \ [A.name]." deadchat_broadcast(message, follow_target = character, message_type=DEADCHAT_ARRIVALRATTLE) - if((!announcement_systems.len) || (!character.mind)) + if((!GLOB.announcement_systems.len) || (!character.mind)) return if((character.mind.assigned_role == "Cyborg") || (character.mind.assigned_role == character.mind.special_role)) return - var/obj/machinery/announcement_system/announcer = pick(announcement_systems) + var/obj/machinery/announcement_system/announcer = pick(GLOB.announcement_systems) announcer.announce("ARRIVAL", character.real_name, rank, list()) //make the list empty to make it announce it in common /proc/GetRedPart(const/hexa) @@ -535,4 +535,4 @@ return hex2num(copytext(hexa, 4, 6)) /proc/GetBluePart(const/hexa) - return hex2num(copytext(hexa, 6, 8)) \ No newline at end of file + return hex2num(copytext(hexa, 6, 8)) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 81881f76b5..a010d3a0a4 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -4,86 +4,79 @@ /proc/make_datum_references_lists() //hair - init_sprite_accessory_subtypes(/datum/sprite_accessory/hair, hair_styles_list, hair_styles_male_list, hair_styles_female_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/hair, GLOB.hair_styles_list, GLOB.hair_styles_male_list, GLOB.hair_styles_female_list) //facial hair - init_sprite_accessory_subtypes(/datum/sprite_accessory/facial_hair, facial_hair_styles_list, facial_hair_styles_male_list, facial_hair_styles_female_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/facial_hair, GLOB.facial_hair_styles_list, GLOB.facial_hair_styles_male_list, GLOB.facial_hair_styles_female_list) //underwear - init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear, underwear_list, underwear_m, underwear_f) + init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear, GLOB.underwear_list, GLOB.underwear_m, GLOB.underwear_f) //undershirt - init_sprite_accessory_subtypes(/datum/sprite_accessory/undershirt, undershirt_list, undershirt_m, undershirt_f) + init_sprite_accessory_subtypes(/datum/sprite_accessory/undershirt, GLOB.undershirt_list, GLOB.undershirt_m, GLOB.undershirt_f) //socks - init_sprite_accessory_subtypes(/datum/sprite_accessory/socks, socks_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/socks, GLOB.socks_list) //lizard bodyparts (blizzard intensifies) - init_sprite_accessory_subtypes(/datum/sprite_accessory/body_markings, body_markings_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/lizard, tails_list_lizard) - init_sprite_accessory_subtypes(/datum/sprite_accessory/tails_animated/lizard, animated_tails_list_lizard) - init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, tails_list_human) - init_sprite_accessory_subtypes(/datum/sprite_accessory/tails_animated/human, animated_tails_list_human) - init_sprite_accessory_subtypes(/datum/sprite_accessory/snouts, snouts_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/horns, horns_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/ears, ears_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/wings, wings_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/wings_open, wings_open_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/frills, frills_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/spines, spines_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/spines_animated, animated_spines_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/legs, legs_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/wings, r_wings_list,roundstart = TRUE) - - //human mutant bodyparts - init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, tails_list_human) - init_sprite_accessory_subtypes(/datum/sprite_accessory/tails_animated/human, animated_tails_list_human) - init_sprite_accessory_subtypes(/datum/sprite_accessory/ears, ears_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/wings, wings_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/wings_open, wings_open_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/body_markings, GLOB.body_markings_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/lizard, GLOB.tails_list_lizard) + init_sprite_accessory_subtypes(/datum/sprite_accessory/tails_animated/lizard, GLOB.animated_tails_list_lizard) + init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, GLOB.tails_list_human) + init_sprite_accessory_subtypes(/datum/sprite_accessory/tails_animated/human, GLOB.animated_tails_list_human) + init_sprite_accessory_subtypes(/datum/sprite_accessory/snouts, GLOB.snouts_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/horns,GLOB.horns_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/ears, GLOB.ears_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/wings, GLOB.wings_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/wings_open, GLOB.wings_open_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/frills, GLOB.frills_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/spines, GLOB.spines_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/spines_animated, GLOB.animated_spines_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/legs, GLOB.legs_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/wings, GLOB.r_wings_list,roundstart = TRUE) //citadel code //mammal bodyparts (fucking furries) - init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_body_markings, mam_body_markings_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_tails, mam_tails_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_ears, mam_ears_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_tails_animated, mam_tails_animated_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/taur, taur_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_body_markings, GLOB.mam_body_markings_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_tails, GLOB.mam_tails_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_ears, GLOB.mam_ears_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_tails_animated, GLOB.mam_tails_animated_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/taur, GLOB.taur_list) //avian bodyparts (i swear this isn't starbound) -// init_sprite_accessory_subtypes(/datum/sprite_accessory/beaks/avian, avian_beaks_list) -// init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/avian, avian_tails_list) -// init_sprite_accessory_subtypes(/datum/sprite_accessory/avian_wings, avian_wings_list) -// init_sprite_accessory_subtypes(/datum/sprite_accessory/avian_open_wings, avian_open_wings_list) +// init_sprite_accessory_subtypes(/datum/sprite_accessory/beaks/avian, GLOB.avian_beaks_list) +// init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/avian, GLOB.avian_tails_list) +// init_sprite_accessory_subtypes(/datum/sprite_accessory/avian_wings, GLOB.avian_wings_list) +// init_sprite_accessory_subtypes(/datum/sprite_accessory/avian_open_wings, GLOB.avian_open_wings_list) //xeno parts (hiss?) - init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_head, xeno_head_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_tail, xeno_tail_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_dorsal, xeno_dorsal_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_head, GLOB.xeno_head_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_tail, GLOB.xeno_tail_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_dorsal, GLOB.xeno_dorsal_list) //genitals - init_sprite_accessory_subtypes(/datum/sprite_accessory/penis, cock_shapes_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/breasts, breasts_size_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/penis, GLOB.cock_shapes_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/breasts, GLOB.breasts_size_list) //Species for(var/spath in subtypesof(/datum/species)) var/datum/species/S = new spath() if(S.roundstart) - roundstart_species[S.id] = S.type - species_list[S.id] = S.type + GLOB.roundstart_species[S.id] = S.type + GLOB.species_list[S.id] = S.type //Surgeries for(var/path in subtypesof(/datum/surgery)) - surgeries_list += new path() + GLOB.surgeries_list += new path() //Materials for(var/path in subtypesof(/datum/material)) var/datum/material/D = new path() - materials_list[D.id] = D + GLOB.materials_list[D.id] = D //Techs for(var/path in subtypesof(/datum/tech)) var/datum/tech/D = new path() - tech_list[D.id] = D + GLOB.tech_list[D.id] = D //Emotes for(var/path in subtypesof(/datum/emote)) var/datum/emote/E = new path() - emote_list[E.key] = E + E.emote_list[E.key] = E - init_subtypes(/datum/crafting_recipe, crafting_recipes) + init_subtypes(/datum/crafting_recipe, GLOB.crafting_recipes) /* // Uncomment to debug chemical reaction list. /client/verb/debug_chemical_list() diff --git a/code/__HELPERS/icon_smoothing.dm b/code/__HELPERS/icon_smoothing.dm index 108c2f1c54..d890788c91 100644 --- a/code/__HELPERS/icon_smoothing.dm +++ b/code/__HELPERS/icon_smoothing.dm @@ -67,7 +67,7 @@ if(AM.can_be_unanchored && !AM.anchored) return 0 - for(var/direction in cardinal) + for(var/direction in GLOB.cardinal) AM = find_type_in_direction(A, direction) if(AM == NULLTURF_BORDER) if((A.smooth & SMOOTH_BORDER)) @@ -259,7 +259,7 @@ A.cut_overlay(A.bottom_left_corner) A.bottom_left_corner = se LAZYADD(New, se) - + if(New) A.add_overlay(New) diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 08569a8ee1..f49c030737 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -15,7 +15,7 @@ CHANGING ICONS Several new procs have been added to the /icon datum to simplify working with icons. To use them, remember you first need to setup an /icon var like so: -var/icon/my_icon = new('iconfile.dmi') +GLOBAL_DATUM_INIT(my_icon, /icon, new('iconfile.dmi')) icon/ChangeOpacity(amount = 1) A very common operation in DM is to try to make an icon more or less transparent. Making an icon more @@ -872,18 +872,18 @@ The _flatIcons list is a cache for generated icon files. qdel(atom_icon) return text_image -var/global/list/friendly_animal_types = list() +GLOBAL_LIST_EMPTY(friendly_animal_types) // Pick a random animal instead of the icon, and use that instead /proc/getRandomAnimalImage(atom/A) - if(!friendly_animal_types.len) + if(!GLOB.friendly_animal_types.len) for(var/T in typesof(/mob/living/simple_animal)) var/mob/living/simple_animal/SA = T if(initial(SA.gold_core_spawnable) == 2) - friendly_animal_types += SA + GLOB.friendly_animal_types += SA - var/mob/living/simple_animal/SA = pick(friendly_animal_types) + var/mob/living/simple_animal/SA = pick(GLOB.friendly_animal_types) var/icon = initial(SA.icon) var/icon_state = initial(SA.icon_state) @@ -943,16 +943,16 @@ var/global/list/friendly_animal_types = list() return J return 0 -var/global/list/humanoid_icon_cache = list() //For creating consistent icons for human looking simple animals -/proc/get_flat_human_icon(var/icon_id,var/outfit,var/datum/preferences/prefs) +/proc/get_flat_human_icon(icon_id, datum/job/J, datum/preferences/prefs) + var/static/list/humanoid_icon_cache = list() if(!icon_id || !humanoid_icon_cache[icon_id]) var/mob/living/carbon/human/dummy/body = new() if(prefs) prefs.copy_to(body) - if(outfit) - body.equipOutfit(outfit, TRUE) + if(J) + J.equip(body, TRUE, FALSE) SSoverlays.Flush() @@ -988,13 +988,12 @@ var/global/list/humanoid_icon_cache = list() /image/proc/setDir(newdir) dir = newdir -// Used to make the frozen item visuals for Freon. -var/list/freeze_item_icons = list() - /atom/proc/freeze_icon_index() return "\ref[initial(icon)]-[initial(icon_state)]" /obj/proc/make_frozen_visual() + // Used to make the frozen item visuals for Freon. + var/static/list/freeze_item_icons = list() if(!HAS_SECONDARY_FLAG(src, FROZEN) && (initial(icon) && initial(icon_state))) var/index = freeze_icon_index() var/icon/IC diff --git a/code/__HELPERS/maths.dm b/code/__HELPERS/maths.dm index f4bcfcca76..7e892e8dd4 100644 --- a/code/__HELPERS/maths.dm +++ b/code/__HELPERS/maths.dm @@ -1,13 +1,13 @@ // Credits to Nickr5 for the useful procs I've taken from his library resource. -var/const/E = 2.71828183 -var/const/Sqrt2 = 1.41421356 +GLOBAL_VAR_INIT(E, 2.71828183) +GLOBAL_VAR_INIT(Sqrt2, 1.41421356) // List of square roots for the numbers 1-100. -var/list/sqrtTable = list(1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, +GLOBAL_LIST_INIT(sqrtTable, list(1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10) + 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10)) /proc/sign(x) return x!=0?x/abs(x):0 @@ -150,9 +150,9 @@ var/list/sqrtTable = list(1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, //68% chance that the number is within 1stddev //95% chance that the number is within 2stddev //98% chance that the number is within 3stddev...etc -var/gaussian_next #define ACCURACY 10000 /proc/gaussian(mean, stddev) + var/static/gaussian_next var/R1;var/R2;var/working if(gaussian_next != null) R1 = gaussian_next diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 61e7f9364a..5c3e6da561 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -21,58 +21,59 @@ return "000" /proc/random_underwear(gender) - if(!underwear_list.len) - init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear, underwear_list, underwear_m, underwear_f) + if(!GLOB.underwear_list.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear, GLOB.underwear_list, GLOB.underwear_m, GLOB.underwear_f) switch(gender) if(MALE) - return pick(underwear_m) + return pick(GLOB.underwear_m) if(FEMALE) - return pick(underwear_f) + return pick(GLOB.underwear_f) else - return pick(underwear_list) + return pick(GLOB.underwear_list) /proc/random_undershirt(gender) - if(!undershirt_list.len) - init_sprite_accessory_subtypes(/datum/sprite_accessory/undershirt, undershirt_list, undershirt_m, undershirt_f) + if(!GLOB.undershirt_list.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/undershirt, GLOB.undershirt_list, GLOB.undershirt_m, GLOB.undershirt_f) switch(gender) if(MALE) - return pick(undershirt_m) + return pick(GLOB.undershirt_m) if(FEMALE) - return pick(undershirt_f) + return pick(GLOB.undershirt_f) else - return pick(undershirt_list) + return pick(GLOB.undershirt_list) /proc/random_socks() - if(!socks_list.len) - init_sprite_accessory_subtypes(/datum/sprite_accessory/socks, socks_list) - return pick(socks_list) + if(!GLOB.socks_list.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/socks, GLOB.socks_list) + return pick(GLOB.socks_list) -/proc/random_features(penis=0,balls=0,vagina=0,womb=0,breasts=0) - if(!tails_list_human.len) - init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, tails_list_human) - if(!tails_list_lizard.len) - init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/lizard, tails_list_lizard) - if(!snouts_list.len) - init_sprite_accessory_subtypes(/datum/sprite_accessory/snouts, snouts_list) - if(!horns_list.len) - init_sprite_accessory_subtypes(/datum/sprite_accessory/horns, horns_list) - if(!ears_list.len) - init_sprite_accessory_subtypes(/datum/sprite_accessory/ears, horns_list) - if(!frills_list.len) - init_sprite_accessory_subtypes(/datum/sprite_accessory/frills, frills_list) - if(!spines_list.len) - init_sprite_accessory_subtypes(/datum/sprite_accessory/spines, spines_list) - if(!legs_list.len) - init_sprite_accessory_subtypes(/datum/sprite_accessory/legs, legs_list) - if(!body_markings_list.len) - init_sprite_accessory_subtypes(/datum/sprite_accessory/body_markings, body_markings_list) - if(!wings_list.len) - init_sprite_accessory_subtypes(/datum/sprite_accessory/wings, wings_list) - if(!cock_shapes_list.len) - init_sprite_accessory_subtypes(/datum/sprite_accessory/penis, cock_shapes_list) - if(ishuman(src)) - var/mob/living/carbon/human/H = src - if(H.gender == MALE) +/proc/random_features() + if(!GLOB.tails_list_human.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, GLOB.tails_list_human) + if(!GLOB.tails_list_lizard.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/lizard, GLOB.tails_list_lizard) + if(!GLOB.snouts_list.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/snouts, GLOB.snouts_list) + if(!GLOB.horns_list.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/horns, GLOB.horns_list) + if(!GLOB.ears_list.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/ears, GLOB.horns_list) + if(!GLOB.frills_list.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/frills, GLOB.frills_list) + if(!GLOB.spines_list.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/spines, GLOB.spines_list) + if(!GLOB.legs_list.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/legs, GLOB.legs_list) + if(!GLOB.body_markings_list.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/body_markings, GLOB.body_markings_list) + if(!GLOB.wings_list.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/wings, GLOB.wings_list) + + if(!GLOB.cock_shapes_list.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/penis, GLOB.cock_shapes_list) +// if(ishuman(src)) + // var/mob/living/carbon/human/H = src + /* if(H.gender == MALE) Fuck if I know how to fix this. penis = 1 balls = 1 vagina = 0 @@ -83,21 +84,21 @@ balls = 0 vagina = 1 womb = 1 - breasts = 1 + breasts = 1 */ return(list( "mcolor" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), "mcolor2" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), "mcolor3" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), - "tail_lizard" = pick(tails_list_lizard), + "tail_lizard" = pick(GLOB.tails_list_lizard), "tail_human" = "None", "wings" = "None", - "snout" = pick(snouts_list), - "horns" = pick(horns_list), + "snout" = pick(GLOB.snouts_list), + "horns" = pick(GLOB.horns_list), "ears" = "None", - "frills" = pick(frills_list), - "spines" = pick(spines_list), - "body_markings" = pick(body_markings_list), + "frills" = pick(GLOB.frills_list), + "spines" = pick(GLOB.spines_list), + "body_markings" = pick(GLOB.body_markings_list), "legs" = "Normal Legs", "taur" = "None", "mam_body_markings" = "None", @@ -137,7 +138,7 @@ "eggsack_egg_size" = EGG_GIRTH_DEF, "has_breasts" = FALSE, "breasts_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), - "breasts_size" = pick(breasts_size_list), + "breasts_size" = pick(GLOB.breasts_size_list), "breasts_fluid" = "milk", "has_vag" = FALSE, "vag_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), @@ -153,27 +154,27 @@ /proc/random_hair_style(gender) switch(gender) if(MALE) - return pick(hair_styles_male_list) + return pick(GLOB.hair_styles_male_list) if(FEMALE) - return pick(hair_styles_female_list) + return pick(GLOB.hair_styles_female_list) else - return pick(hair_styles_list) + return pick(GLOB.hair_styles_list) /proc/random_facial_hair_style(gender) switch(gender) if(MALE) - return pick(facial_hair_styles_male_list) + return pick(GLOB.facial_hair_styles_male_list) if(FEMALE) - return pick(facial_hair_styles_female_list) + return pick(GLOB.facial_hair_styles_female_list) else - return pick(facial_hair_styles_list) + return pick(GLOB.facial_hair_styles_list) /proc/random_unique_name(gender, attempts_to_find_unique_name=10) for(var/i=1, i<=attempts_to_find_unique_name, i++) if(gender==FEMALE) - . = capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names)) + . = capitalize(pick(GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names)) else - . = capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names)) + . = capitalize(pick(GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names)) if(i != attempts_to_find_unique_name && !findname(.)) break @@ -193,9 +194,9 @@ break /proc/random_skin_tone() - return pick(skin_tones) + return pick(GLOB.skin_tones) -var/list/skin_tones = list( +GLOBAL_LIST_INIT(skin_tones, list( "albino", "caucasian1", "caucasian2", @@ -208,10 +209,10 @@ var/list/skin_tones = list( "indian", "african1", "african2" - ) + )) -var/global/list/species_list[0] -var/global/list/roundstart_species[0] +GLOBAL_LIST_EMPTY(species_list) +GLOBAL_LIST_EMPTY(roundstart_species) /proc/age2agedescription(age) switch(age) @@ -241,32 +242,56 @@ Proc for attack log creation, because really why not 1 argument is the actor 2 argument is the target of action 3 is the description of action(like punched, throwed, or any other verb) -4 should it make adminlog note or not -5 is the tool with which the action was made(usually item) 5 and 6 are very similar(5 have "by " before it, that it) and are separated just to keep things in a bit more in order -6 is additional information, anything that needs to be added +4 is the tool with which the action was made(usually item) 4 and 5 are very similar(5 have "by " before it, that it) and are separated just to keep things in a bit more in order +5 is additional information, anything that needs to be added */ /proc/add_logs(mob/user, mob/target, what_done, object=null, addition=null) var/turf/attack_location = get_turf(target) - var/is_mob_user = user && typecache_mob[user.type] - var/is_mob_target = target && typecache_mob[target.type] + var/is_mob_user = user && GLOB.typecache_mob[user.type] + var/is_mob_target = target && GLOB.typecache_mob[target.type] var/mob/living/living_target - if(target && isliving(target)) living_target = target + var/hp =" " + if(living_target) + hp = "(NEWHP: [living_target.health])" + + var/starget = "NON-EXISTENT SUBJECT" + if(target) + if(is_mob_target && target.ckey) + starget = "[target.name]([target.ckey])" + else + starget = "[target.name]" + + var/ssource = "NON-EXISTENT USER" //How!? + if(user) + if(is_mob_user && user.ckey) + ssource = "[user.name]([user.ckey])" + else + ssource = "[user.name]" + + var/sobject = "" + if(object) + sobject = "[object]" + + var/sattackloc = "" + if(attack_location) + sattackloc = "([attack_location.x],[attack_location.y],[attack_location.z])" + if(is_mob_user) - var/message = "has [what_done] [target ? "[target.name][(is_mob_target && target.ckey) ? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition][(living_target) ? " (NEWHP: [living_target.health])" : ""][(attack_location) ? "([attack_location.x],[attack_location.y],[attack_location.z])" : ""]" + var/message = "has [what_done] [starget] with [sobject][addition] [hp] [sattackloc]" user.log_message(message, INDIVIDUAL_ATTACK_LOG) if(is_mob_target) - var/message = "has been [what_done] by [user ? "[user.name][(is_mob_user && user.ckey) ? "([user.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition][(living_target) ? " (NEWHP: [living_target.health])" : ""][(attack_location) ? "([attack_location.x],[attack_location.y],[attack_location.z])" : ""]" + var/message = "has been [what_done] by [ssource] with [sobject][addition] [hp] [sattackloc]" target.log_message(message, INDIVIDUAL_ATTACK_LOG) - log_attack("[user ? "[user.name][(is_mob_user && user.ckey) ? "([user.ckey])" : ""]" : "NON-EXISTANT SUBJECT"] [what_done] [target ? "[target.name][(is_mob_target && target.ckey)? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition][(living_target) ? " (NEWHP: [living_target.health])" : ""][(attack_location) ? "([attack_location.x],[attack_location.y],[attack_location.z])" : ""]") + log_attack("[ssource] [what_done] [starget] with [sobject][addition] [hp] [sattackloc]") /proc/do_mob(mob/user , mob/target, time = 30, uninterruptible = 0, progress = 1, datum/callback/extra_checks = null) @@ -292,7 +317,7 @@ Proc for attack log creation, because really why not stoplag() if (progress) progbar.update(world.time - starttime) - if(!user || !target) + if(QDELETED(user) || QDELETED(target)) . = 0 break if(uninterruptible) @@ -344,11 +369,11 @@ Proc for attack log creation, because really why not drifting = 0 Uloc = user.loc - if(!user || user.stat || user.weakened || user.stunned || (!drifting && user.loc != Uloc) || (extra_checks && !extra_checks.Invoke())) + if(QDELETED(user) || user.stat || user.weakened || user.stunned || (!drifting && user.loc != Uloc) || (extra_checks && !extra_checks.Invoke())) . = 0 break - if(Tloc && (!target || Tloc != target.loc)) + if(!QDELETED(Tloc) && (QDELETED(target) || Tloc != target.loc)) if((Uloc != Tloc || Tloc != user) && !drifting) . = 0 break @@ -394,7 +419,7 @@ Proc for attack log creation, because really why not sleep(1) if(progress) progbar.update(world.time - starttime) - if(!user || !targets) + if(QDELETED(user) || !targets) . = 0 break if(uninterruptible) @@ -405,7 +430,7 @@ Proc for attack log creation, because really why not user_loc = user.loc for(var/atom/target in targets) - if((!drifting && user_loc != user.loc) || originalloc[target] != target.loc || user.get_active_held_item() != holding || user.incapacitated() || user.lying || (extra_checks && !extra_checks.Invoke())) + if((!drifting && user_loc != user.loc) || QDELETED(target) || originalloc[target] != target.loc || user.get_active_held_item() != holding || user.incapacitated() || user.lying || (extra_checks && !extra_checks.Invoke())) . = 0 break mainloop if(progbar) @@ -447,7 +472,7 @@ Proc for attack log creation, because really why not step(X, pick(NORTH, SOUTH, EAST, WEST)) /proc/deadchat_broadcast(message, mob/follow_target=null, turf/turf_target=null, speaker_key=null, message_type=DEADCHAT_REGULAR) - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) var/datum/preferences/prefs if(M.client && M.client.prefs) prefs = M.client.prefs diff --git a/code/__HELPERS/names.dm b/code/__HELPERS/names.dm index eeee27ab99..0e62ad1130 100644 --- a/code/__HELPERS/names.dm +++ b/code/__HELPERS/names.dm @@ -2,15 +2,15 @@ /proc/lizard_name(gender) if(gender == MALE) - return "[pick(lizard_names_male)]-[pick(lizard_names_male)]" + return "[pick(GLOB.lizard_names_male)]-[pick(GLOB.lizard_names_male)]" else - return "[pick(lizard_names_female)]-[pick(lizard_names_female)]" + return "[pick(GLOB.lizard_names_female)]-[pick(GLOB.lizard_names_female)]" /proc/plasmaman_name() - return "[pick(plasmaman_names)] \Roman[rand(1,99)]" + return "[pick(GLOB.plasmaman_names)] \Roman[rand(1,99)]" -var/church_name = null /proc/church_name() + var/static/church_name if (church_name) return church_name @@ -26,24 +26,24 @@ var/church_name = null return name -var/command_name = null +GLOBAL_VAR(command_name) /proc/command_name() - if (command_name) - return command_name + if (GLOB.command_name) + return GLOB.command_name var/name = "Central Command" - command_name = name + GLOB.command_name = name return name /proc/change_command_name(name) - command_name = name + GLOB.command_name = name return name -var/religion_name = null /proc/religion_name() + var/static/religion_name if (religion_name) return religion_name @@ -55,20 +55,20 @@ var/religion_name = null return capitalize(name) /proc/station_name() - if(station_name) - return station_name + if(GLOB.station_name) + return GLOB.station_name if(config && config.station_name) - station_name = config.station_name + GLOB.station_name = config.station_name else - station_name = new_station_name() + GLOB.station_name = new_station_name() if(config && config.server_name) - world.name = "[config.server_name][config.server_name==station_name ? "" : ": [station_name]"]" + world.name = "[config.server_name][config.server_name==GLOB.station_name ? "" : ": [GLOB.station_name]"]" else - world.name = station_name + world.name = GLOB.station_name - return station_name + return GLOB.station_name /proc/new_station_name() var/random = rand(1,5) @@ -77,24 +77,24 @@ var/religion_name = null //Rare: Pre-Prefix if (prob(10)) - name = pick(station_prefixes) + name = pick(GLOB.station_prefixes) new_station_name = name + " " name = "" // Prefix - for(var/holiday_name in SSevent.holidays) + for(var/holiday_name in SSevents.holidays) if(holiday_name == "Friday the 13th") random = 13 - var/datum/holiday/holiday = SSevent.holidays[holiday_name] + var/datum/holiday/holiday = SSevents.holidays[holiday_name] name = holiday.getStationPrefix() //get normal name if(!name) - name = pick(station_names) + name = pick(GLOB.station_names) if(name) new_station_name += name + " " // Suffix - name = pick(station_suffixes) + name = pick(GLOB.station_suffixes) new_station_name += name + " " // ID Number @@ -102,19 +102,19 @@ var/religion_name = null if(1) new_station_name += "[rand(1, 99)]" if(2) - new_station_name += pick(greek_letters) + new_station_name += pick(GLOB.greek_letters) if(3) new_station_name += "\Roman[rand(1,99)]" if(4) - new_station_name += pick(phonetic_alphabet) + new_station_name += pick(GLOB.phonetic_alphabet) if(5) - new_station_name += pick(numbers_as_words) + new_station_name += pick(GLOB.numbers_as_words) if(13) new_station_name += pick("13","XIII","Thirteen") return new_station_name -var/syndicate_name = null /proc/syndicate_name() + var/static/syndicate_name if (syndicate_name) return syndicate_name @@ -145,8 +145,8 @@ var/syndicate_name = null //Traitors and traitor silicons will get these. Revs will not. -var/syndicate_code_phrase//Code phrase for traitors. -var/syndicate_code_response//Code response for traitors. +GLOBAL_VAR(syndicate_code_phrase) //Code phrase for traitors. +GLOBAL_VAR(syndicate_code_response) //Code response for traitors. /* Should be expanded. @@ -179,10 +179,10 @@ var/syndicate_code_response//Code response for traitors. var/threats = strings(ION_FILE, "ionthreats") var/foods = strings(ION_FILE, "ionfood") var/drinks = strings(ION_FILE, "iondrinks") - var/list/locations = teleportlocs.len ? teleportlocs : drinks //if null, defaults to drinks instead. + var/list/locations = GLOB.teleportlocs.len ? GLOB.teleportlocs : drinks //if null, defaults to drinks instead. var/list/names = list() - for(var/datum/data/record/t in data_core.general)//Picks from crew manifest. + for(var/datum/data/record/t in GLOB.data_core.general)//Picks from crew manifest. names += t.fields["name"] var/maxwords = words//Extra var to check for duplicates. @@ -204,9 +204,9 @@ var/syndicate_code_response//Code response for traitors. if(prob(10)) code_phrase += pick(lizard_name(MALE),lizard_name(FEMALE)) else - code_phrase += pick(pick(first_names_male,first_names_female)) + code_phrase += pick(pick(GLOB.first_names_male,GLOB.first_names_female)) code_phrase += " " - code_phrase += pick(last_names) + code_phrase += pick(GLOB.last_names) if(2) code_phrase += pick(get_all_jobs())//Returns a job. safety -= 1 @@ -217,7 +217,7 @@ var/syndicate_code_response//Code response for traitors. if(2) code_phrase += lowertext(pick(foods)) if(3) - code_phrase += pick(locations) + code_phrase += lowertext(pick(locations)) safety -= 2 if(3) switch(rand(1,4))//Abstract nouns, objects, adjectives, threats. Can be selected more than once. @@ -241,4 +241,4 @@ var/syndicate_code_response//Code response for traitors. world.name = "[config.server_name]: [designation]" else world.name = designation - station_name = designation + GLOB.station_name = designation diff --git a/code/__HELPERS/sorts/InsertSort.dm b/code/__HELPERS/sorts/InsertSort.dm index 5ffaa4ce02..23e0dc8876 100644 --- a/code/__HELPERS/sorts/InsertSort.dm +++ b/code/__HELPERS/sorts/InsertSort.dm @@ -8,9 +8,9 @@ if(toIndex <= 0) toIndex += L.len + 1 - sortInstance.L = L - sortInstance.cmp = cmp - sortInstance.associative = associative + GLOB.sortInstance.L = L + GLOB.sortInstance.cmp = cmp + GLOB.sortInstance.associative = associative - sortInstance.binarySort(fromIndex, toIndex, fromIndex) + GLOB.sortInstance.binarySort(fromIndex, toIndex, fromIndex) return L \ No newline at end of file diff --git a/code/__HELPERS/sorts/MergeSort.dm b/code/__HELPERS/sorts/MergeSort.dm index 228a08efb9..cc47123b3c 100644 --- a/code/__HELPERS/sorts/MergeSort.dm +++ b/code/__HELPERS/sorts/MergeSort.dm @@ -8,9 +8,9 @@ if(toIndex <= 0) toIndex += L.len + 1 - sortInstance.L = L - sortInstance.cmp = cmp - sortInstance.associative = associative - sortInstance.mergeSort(fromIndex, toIndex) + GLOB.sortInstance.L = L + GLOB.sortInstance.cmp = cmp + GLOB.sortInstance.associative = associative + GLOB.sortInstance.mergeSort(fromIndex, toIndex) return L \ No newline at end of file diff --git a/code/__HELPERS/sorts/TimSort.dm b/code/__HELPERS/sorts/TimSort.dm index 4aa5126365..8cfb792672 100644 --- a/code/__HELPERS/sorts/TimSort.dm +++ b/code/__HELPERS/sorts/TimSort.dm @@ -8,10 +8,10 @@ if(toIndex <= 0) toIndex += L.len + 1 - sortInstance.L = L - sortInstance.cmp = cmp - sortInstance.associative = associative + GLOB.sortInstance.L = L + GLOB.sortInstance.cmp = cmp + GLOB.sortInstance.associative = associative - sortInstance.timSort(fromIndex, toIndex) + GLOB.sortInstance.timSort(fromIndex, toIndex) return L \ No newline at end of file diff --git a/code/__HELPERS/sorts/__main.dm b/code/__HELPERS/sorts/__main.dm index e2c008389e..c26126c0a6 100644 --- a/code/__HELPERS/sorts/__main.dm +++ b/code/__HELPERS/sorts/__main.dm @@ -9,7 +9,7 @@ #define MIN_GALLOP 7 //This is a global instance to allow much of this code to be reused. The interfaces are kept seperately -var/datum/sortInstance/sortInstance = new() +GLOBAL_DATUM_INIT(sortInstance, /datum/sortInstance, new()) /datum/sortInstance //The array being sorted. var/list/L diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index 9af9de3ed0..853ff4fb6a 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -15,11 +15,11 @@ // Run all strings to be used in an SQL query through this proc first to properly escape out injection attempts. /proc/sanitizeSQL(t) - var/sqltext = dbcon.Quote("[t]"); + var/sqltext = GLOB.dbcon.Quote("[t]"); return copytext(sqltext, 2, lentext(sqltext));//Quote() adds quotes around input, we already do that /proc/format_table_name(table as text) - return sqlfdbktableprefix + table + return GLOB.sqlfdbktableprefix + table /* * Text sanitization @@ -334,10 +334,10 @@ new_text += copytext(text, i, i+1) return new_text -var/list/zero_character_only = list("0") -var/list/hex_characters = list("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f") -var/list/alphabet = list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z") -var/list/binary = list("0","1") +GLOBAL_LIST_INIT(zero_character_only, list("0")) +GLOBAL_LIST_INIT(hex_characters, list("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f")) +GLOBAL_LIST_INIT(alphabet, list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")) +GLOBAL_LIST_INIT(binary, list("0","1")) /proc/random_string(length, list/characters) . = "" for(var/i=1, i<=length, i++) @@ -349,10 +349,10 @@ var/list/binary = list("0","1") . += string /proc/random_short_color() - return random_string(3, hex_characters) + return random_string(3, GLOB.hex_characters) /proc/random_color() - return random_string(6, hex_characters) + return random_string(6, GLOB.hex_characters) /proc/add_zero2(t, u) var/temp1 diff --git a/code/__HELPERS/text_vr.dm b/code/__HELPERS/text_vr.dm index b9db3915d0..06aadb6708 100644 --- a/code/__HELPERS/text_vr.dm +++ b/code/__HELPERS/text_vr.dm @@ -17,9 +17,11 @@ proc/TextPreview(var/string,var/len=40) else return "[copytext(string, 1, 37)]..." -var/list/mentor_log = list ( ) -//var/list/admintickets = list() -var/global/list/whitelisted_species_list[0] +GLOBAL_LIST_EMPTY(mentor_log) +GLOBAL_PROTECT(mentor_log) + +GLOBAL_LIST_EMPTY(whitelisted_species_list) + /proc/log_mentor(text) - mentor_log.Add(text) - diary << "\[[time_stamp()]]MENTOR: [text]" \ No newline at end of file + GLOB.mentor_log.Add(text) + GLOB.diary << "\[[time_stamp()]]MENTOR: [text]" \ No newline at end of file diff --git a/code/__HELPERS/time.dm b/code/__HELPERS/time.dm index 3770fedf6f..b042eb3736 100644 --- a/code/__HELPERS/time.dm +++ b/code/__HELPERS/time.dm @@ -1,13 +1,15 @@ //Returns the world time in english /proc/worldtime2text() - return gameTimestamp("hh:mm:ss") + return gameTimestamp("hh:mm:ss", world.time) /proc/time_stamp(format = "hh:mm:ss", show_ds) var/time_string = time2text(world.timeofday, format) return show_ds ? "[time_string]:[world.timeofday % 10]" : time_string -/proc/gameTimestamp(format = "hh:mm:ss") // Get the game time in text - return time2text(world.time - timezoneOffset + 432000 - round_start_time, format) +/proc/gameTimestamp(format = "hh:mm:ss", wtime=null) + if(!wtime) + wtime = world.time + return time2text(wtime - GLOB.timezoneOffset + SSticker.gametime_offset - SSticker.round_start_time, format) /* Returns 1 if it is the selected month and day */ /proc/isDay(month, day) @@ -28,10 +30,10 @@ return time2text(timevar, "YYYY-MM-DD hh:mm:ss") -/var/midnight_rollovers = 0 -/var/rollovercheck_last_timeofday = 0 +GLOBAL_VAR_INIT(midnight_rollovers, 0) +GLOBAL_VAR_INIT(rollovercheck_last_timeofday, 0) /proc/update_midnight_rollover() - if (world.timeofday < rollovercheck_last_timeofday) //TIME IS GOING BACKWARDS! - return midnight_rollovers++ - return midnight_rollovers + if (world.timeofday < GLOB.rollovercheck_last_timeofday) //TIME IS GOING BACKWARDS! + return GLOB.midnight_rollovers++ + return GLOB.midnight_rollovers diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index ff518e5bb0..b030494ed0 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -337,15 +337,6 @@ return "[year][seperator][((month < 10) ? "0[month]" : month)][seperator][((day < 10) ? "0[day]" : day)]" -/* -var/list/test_times = list("December" = 1323522004, "August" = 1123522004, "January" = 1011522004, - "Jan Leap" = 946684800, "Jan Normal" = 978307200, "New Years Eve" = 1009670400, - "New Years" = 1009836000, "New Years 2" = 1041372000, "New Years 3" = 1104530400, - "July Month End" = 744161003, "July Month End 12" = 1343777003, "End July" = 1091311200) -for(var/t in test_times) - world.log << "TEST: [t] is [unix2date(test_times[t])]" -*/ - /proc/isLeap(y) return ((y) % 4 == 0 && ((y) % 100 != 0 || (y) % 400 == 0)) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 9b98e7c1c1..e1c34dc0c9 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -200,17 +200,17 @@ Turf and target are seperate in case you want to teleport some distance from a t else switch(role) if("clown") - newname = pick(clown_names) + newname = pick(GLOB.clown_names) if("mime") - newname = pick(mime_names) + newname = pick(GLOB.mime_names) if("ai") - newname = pick(ai_names) + newname = pick(GLOB.ai_names) if("deity") - newname = pick(clown_names|ai_names|mime_names) //pick any old name + newname = pick(GLOB.clown_names|GLOB.ai_names|GLOB.mime_names) //pick any old name else return - for(var/mob/living/M in player_list) + for(var/mob/living/M in GLOB.player_list) if(M == src) continue if(!newname || M.real_name == newname) @@ -231,8 +231,8 @@ Turf and target are seperate in case you want to teleport some distance from a t //Returns a list of unslaved cyborgs /proc/active_free_borgs() . = list() - for(var/mob/living/silicon/robot/R in living_mob_list) - if(R.connected_ai) + for(var/mob/living/silicon/robot/R in GLOB.living_mob_list) + if(R.connected_ai || R.shell) continue if(R.stat == DEAD) continue @@ -243,7 +243,7 @@ Turf and target are seperate in case you want to teleport some distance from a t //Returns a list of AI's /proc/active_ais(check_mind=0) . = list() - for(var/mob/living/silicon/ai/A in living_mob_list) + for(var/mob/living/silicon/ai/A in GLOB.living_mob_list) if(A.stat == DEAD) continue if(A.control_disabled == 1) @@ -305,7 +305,7 @@ Turf and target are seperate in case you want to teleport some distance from a t pois[name] = M if(!mobs_only) - for(var/atom/A in poi_list) + for(var/atom/A in GLOB.poi_list) if(!A || !A.loc) continue pois[avoid_assoc_duplicate_keys(A.name, namecounts)] = A @@ -314,7 +314,7 @@ Turf and target are seperate in case you want to teleport some distance from a t //Orders mobs by type then by name /proc/sortmobs() var/list/moblist = list() - var/list/sortmob = sortNames(mob_list) + var/list/sortmob = sortNames(GLOB.mob_list) for(var/mob/living/silicon/ai/M in sortmob) moblist.Add(M) for(var/mob/camera/M in sortmob) @@ -378,7 +378,7 @@ Turf and target are seperate in case you want to teleport some distance from a t else if(istext(whom)) key = whom ckey = ckey(whom) - C = directory[ckey] + C = GLOB.directory[ckey] if(C) M = C.mob else @@ -583,16 +583,16 @@ Turf and target are seperate in case you want to teleport some distance from a t //Repopulates sortedAreas list /proc/SortAreas() - sortedAreas = list() + GLOB.sortedAreas = list() for(var/area/A in world) - sortedAreas.Add(A) + GLOB.sortedAreas.Add(A) - sortTim(sortedAreas, /proc/cmp_name_asc) + sortTim(GLOB.sortedAreas, /proc/cmp_name_asc) /area/proc/addSorted() - sortedAreas.Add(src) - sortTim(sortedAreas, /proc/cmp_name_asc) + GLOB.sortedAreas.Add(src) + sortTim(GLOB.sortedAreas, /proc/cmp_name_asc) //Takes: Area type as text string or as typepath OR an instance of the area. //Returns: A list of all areas of that type in the world. @@ -608,12 +608,12 @@ Turf and target are seperate in case you want to teleport some distance from a t var/list/areas = list() if(subtypes) var/list/cache = typecacheof(areatype) - for(var/V in sortedAreas) + for(var/V in GLOB.sortedAreas) var/area/A = V if(cache[A.type]) areas += V else - for(var/V in sortedAreas) + for(var/V in GLOB.sortedAreas) var/area/A = V if(A.type == areatype) areas += V @@ -633,7 +633,7 @@ Turf and target are seperate in case you want to teleport some distance from a t var/list/turfs = list() if(subtypes) var/list/cache = typecacheof(areatype) - for(var/V in sortedAreas) + for(var/V in GLOB.sortedAreas) var/area/A = V if(!cache[A.type]) continue @@ -641,7 +641,7 @@ Turf and target are seperate in case you want to teleport some distance from a t if(target_z == 0 || target_z == T.z) turfs += T else - for(var/V in sortedAreas) + for(var/V in GLOB.sortedAreas) var/area/A = V if(A.type != areatype) continue @@ -763,9 +763,9 @@ Turf and target are seperate in case you want to teleport some distance from a t //For objects that should embed, but make no sense being is_sharp or is_pointed() //e.g: rods -var/list/can_embed_types = typecacheof(list( +GLOBAL_LIST_INIT(can_embed_types, typecacheof(list( /obj/item/stack/rods, - /obj/item/pipe)) + /obj/item/pipe))) /proc/can_embed(obj/item/W) if(W.is_sharp()) @@ -773,14 +773,14 @@ var/list/can_embed_types = typecacheof(list( if(is_pointed(W)) return 1 - if(is_type_in_typecache(W, can_embed_types)) + if(is_type_in_typecache(W, GLOB.can_embed_types)) return 1 /* Checks if that loc and dir has a item on the wall */ -var/list/WALLITEMS = typecacheof(list( +GLOBAL_LIST_INIT(WALLITEMS, typecacheof(list( /obj/machinery/power/apc, /obj/machinery/airalarm, /obj/item/device/radio/intercom, /obj/structure/extinguisher_cabinet, /obj/structure/reagent_dispensers/peppertank, /obj/machinery/status_display, /obj/machinery/requests_console, /obj/machinery/light_switch, /obj/structure/sign, @@ -788,22 +788,22 @@ var/list/WALLITEMS = typecacheof(list( /obj/machinery/computer/security/telescreen, /obj/machinery/embedded_controller/radio/simple_vent_controller, /obj/item/weapon/storage/secure/safe, /obj/machinery/door_timer, /obj/machinery/flasher, /obj/machinery/keycard_auth, /obj/structure/mirror, /obj/structure/fireaxecabinet, /obj/machinery/computer/security/telescreen/entertainment - )) + ))) -var/list/WALLITEMS_EXTERNAL = typecacheof(list( +GLOBAL_LIST_INIT(WALLITEMS_EXTERNAL, typecacheof(list( /obj/machinery/camera, /obj/structure/camera_assembly, - /obj/structure/light_construct, /obj/machinery/light)) + /obj/structure/light_construct, /obj/machinery/light))) -var/list/WALLITEMS_INVERSE = typecacheof(list( - /obj/structure/light_construct, /obj/machinery/light)) +GLOBAL_LIST_INIT(WALLITEMS_INVERSE, typecacheof(list( + /obj/structure/light_construct, /obj/machinery/light))) /proc/gotwallitem(loc, dir, var/check_external = 0) var/locdir = get_step(loc, dir) for(var/obj/O in loc) - if(is_type_in_typecache(O, WALLITEMS) && check_external != 2) + if(is_type_in_typecache(O, GLOB.WALLITEMS) && check_external != 2) //Direction works sometimes - if(is_type_in_typecache(O, WALLITEMS_INVERSE)) + if(is_type_in_typecache(O, GLOB.WALLITEMS_INVERSE)) if(O.dir == turn(dir, 180)) return 1 else if(O.dir == dir) @@ -814,8 +814,8 @@ var/list/WALLITEMS_INVERSE = typecacheof(list( if(get_turf_pixel(O) == locdir) return 1 - if(is_type_in_typecache(O, WALLITEMS_EXTERNAL) && check_external) - if(is_type_in_typecache(O, WALLITEMS_INVERSE)) + if(is_type_in_typecache(O, GLOB.WALLITEMS_EXTERNAL) && check_external) + if(is_type_in_typecache(O, GLOB.WALLITEMS_INVERSE)) if(O.dir == turn(dir, 180)) return 1 else if(O.dir == dir) @@ -823,7 +823,7 @@ var/list/WALLITEMS_INVERSE = typecacheof(list( //Some stuff is placed directly on the wallturf (signs) for(var/obj/O in locdir) - if(is_type_in_typecache(O, WALLITEMS) && check_external != 2) + if(is_type_in_typecache(O, GLOB.WALLITEMS) && check_external != 2) if(O.pixel_x == 0 && O.pixel_y == 0) return 1 return 0 @@ -845,7 +845,7 @@ var/list/WALLITEMS_INVERSE = typecacheof(list( for(var/id in cached_gases) var/gas_concentration = cached_gases[id][MOLES]/total_moles - if(id in hardcoded_gases || gas_concentration > 0.001) //ensures the four primary gases are always shown. + if((id in GLOB.hardcoded_gases) || gas_concentration > 0.001) //ensures the four primary gases are always shown. to_chat(user, "[cached_gases[id][GAS_META][META_GAS_NAME]]: [round(gas_concentration*100, 0.01)] %") to_chat(user, "Temperature: [round(air_contents.temperature-T0C)] °C") @@ -871,14 +871,14 @@ var/list/WALLITEMS_INVERSE = typecacheof(list( var/initial_chance = chance while(steps > 0) if(prob(chance)) - step(AM, pick(alldirs)) + step(AM, pick(GLOB.alldirs)) chance = max(chance - (initial_chance / steps), 0) steps-- /proc/living_player_count() var/living_player_count = 0 - for(var/mob in player_list) - if(mob in living_mob_list) + for(var/mob in GLOB.player_list) + if(mob in GLOB.living_mob_list) living_player_count += 1 return living_player_count @@ -1188,7 +1188,7 @@ B --><-- A /proc/get_areas_in_z(zlevel) . = list() var/validarea = FALSE - for(var/V in sortedAreas) + for(var/V in GLOB.sortedAreas) var/area/A = V validarea = TRUE for(var/turf/T in A) @@ -1254,7 +1254,7 @@ proc/pick_closest_path(value, list/matches = get_fancy_list_of_atom_types()) . += round(i*DELTA_CALC) sleep(i*world.tick_lag*DELTA_CALC) i *= 2 - while (world.tick_usage > min(TICK_LIMIT_TO_RUN, CURRENT_TICKLIMIT)) + while (world.tick_usage > min(TICK_LIMIT_TO_RUN, GLOB.CURRENT_TICKLIMIT)) #undef DELTA_CALC @@ -1313,41 +1313,44 @@ proc/pick_closest_path(value, list/matches = get_fancy_list_of_atom_types()) else . = "" -/var/mob/dview/dview_mob = new +GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) //Version of view() which ignores darkness, because BYOND doesn't have it (I actually suggested it but it was tagged redundant, BUT HEARERS IS A T- /rant). /proc/dview(var/range = world.view, var/center, var/invis_flags = 0) if(!center) return - dview_mob.loc = center + GLOB.dview_mob.loc = center - dview_mob.see_invisible = invis_flags + GLOB.dview_mob.see_invisible = invis_flags - . = view(range, dview_mob) - dview_mob.loc = null + . = view(range, GLOB.dview_mob) + GLOB.dview_mob.loc = null /mob/dview + name = "INTERNAL DVIEW MOB" invisibility = 101 - density = 0 + density = FALSE see_in_dark = 1e6 - anchored = 1 + anchored = TRUE + var/ready_to_die = FALSE -/mob/dview/Destroy(force=0) - stack_trace("ALRIGHT WHICH FUCKER TRIED TO DELETE *MY* DVIEW?") +/mob/dview/Destroy(force = FALSE) + if(!ready_to_die) + stack_trace("ALRIGHT WHICH FUCKER TRIED TO DELETE *MY* DVIEW?") - if (!force) - return QDEL_HINT_LETMELIVE + if (!force) + return QDEL_HINT_LETMELIVE - world.log << "EVACUATE THE SHITCODE IS TRYING TO STEAL MUH JOBS" - global.dview_mob = new - return QDEL_HINT_QUEUE + log_world("EVACUATE THE SHITCODE IS TRYING TO STEAL MUH JOBS") + GLOB.dview_mob = new + return ..() #define FOR_DVIEW(type, range, center, invis_flags) \ - dview_mob.loc = center; \ - dview_mob.see_invisible = invis_flags; \ - for(type in view(range, dview_mob)) + GLOB.dview_mob.loc = center; \ + GLOB.dview_mob.see_invisible = invis_flags; \ + for(type in view(range, GLOB.dview_mob)) //can a window be here, or is there a window blocking it? /proc/valid_window_location(turf/T, dir_to_check) @@ -1372,17 +1375,17 @@ proc/pick_closest_path(value, list/matches = get_fancy_list_of_atom_types()) //Set this to TRUE before calling //This prevents RCEs from badmins //kevinz000 if you touch this I will hunt you down -var/valid_HTTPSGet = FALSE +GLOBAL_VAR_INIT(valid_HTTPSGet, FALSE) /proc/HTTPSGet(url) if(findtext(url, "\"")) - valid_HTTPSGet = FALSE + GLOB.valid_HTTPSGet = FALSE - if(!valid_HTTPSGet) + if(!GLOB.valid_HTTPSGet) if(usr) CRASH("[usr.ckey]([usr]) just attempted an invalid HTTPSGet on: [url]!") else CRASH("Invalid HTTPSGet call on: [url]") - valid_HTTPSGet = FALSE + GLOB.valid_HTTPSGet = FALSE //"This has got to be the ugliest hack I have ever done" //warning, here be dragons @@ -1407,15 +1410,15 @@ var/valid_HTTPSGet = FALSE else CRASH("Invalid world.system_type ([world.system_type])? Yell at Lummox.") - world.log << "HTTPSGet: [url]" + log_world("HTTPSGet: [url]") var/result = shell(command) if(result != 0) - world.log << "Download failed: shell exited with code: [result]" + log_world("Download failed: shell exited with code: [result]") return var/f = file(temp_file) if(!f) - world.log << "Download failed: Temp file not found" + log_world("Download failed: Temp file not found") return . = file2text(f) @@ -1426,3 +1429,6 @@ var/valid_HTTPSGet = FALSE /proc/to_chat(target, message) target << message + +/proc/pass() + return diff --git a/code/__PATH_COMPATIBILITY/path_compatibility.dm b/code/__PATH_COMPATIBILITY/path_compatibility.dm deleted file mode 100644 index 2d50b3ec3a..0000000000 --- a/code/__PATH_COMPATIBILITY/path_compatibility.dm +++ /dev/null @@ -1,21 +0,0 @@ -/* - - This is a smart+stupid method of maintaining paths during refactors. - At this point in time we have more maps than ever, and our tools just aren't that great. - So instead of repathing all the maps... - - Keep the old path defined, just as an empty type with that path, and then define it's - parent_type as the new path, effectively maintaining the object/mob w/e without having - to touch all the maps, avoiding all those nasty conflicts! - - Ideally the old paths would be cleaned out as mappers go about their usual routine of - updating old maps. - - tl;dr TYPEFUCKERY, because fuck updating all these maps - - Example: - - /obj/structure/bed/chair/janicart/secway - parent_type = /obj/vehicle/secway - -*/ diff --git a/code/_compile_options.dm b/code/_compile_options.dm index 55808fd3ac..ec06a6221c 100644 --- a/code/_compile_options.dm +++ b/code/_compile_options.dm @@ -7,6 +7,8 @@ //#define GC_FAILURE_HARD_LOOKUP //makes paths that fail to GC call find_references before del'ing. //Also allows for recursive reference searching of datums. //Sets world.loop_checks to false and prevents find references from sleeping + +//#define VISUALIZE_ACTIVE_TURFS //Highlights atmos active turfs in green #endif #define PRELOAD_RSC 1 /*set to: diff --git a/code/_globalvars/configuration.dm b/code/_globalvars/configuration.dm index a83a1bd80d..e8833f77aa 100644 --- a/code/_globalvars/configuration.dm +++ b/code/_globalvars/configuration.dm @@ -1,40 +1,47 @@ -var/datum/configuration/config = null +GLOBAL_REAL(config, /datum/configuration) -var/host = null -var/join_motd = null -var/station_name = null -var/game_version = "/tg/ Station 13" -var/changelog_hash = "" +GLOBAL_DATUM_INIT(revdata, /datum/getrev, new) -var/ooc_allowed = 1 // used with admin verbs to disable ooc - not a config option apparently -var/dooc_allowed = 1 -var/abandon_allowed = 1 -var/enter_allowed = 1 -var/guests_allowed = 1 -var/shuttle_frozen = 0 -var/shuttle_left = 0 -var/tinted_weldhelh = 1 +GLOBAL_VAR(host) +GLOBAL_VAR(join_motd) +GLOBAL_VAR(station_name) +GLOBAL_VAR_INIT(game_version, "/tg/ Station 13") +GLOBAL_VAR_INIT(changelog_hash, "") + +GLOBAL_VAR_INIT(ooc_allowed, TRUE) // used with admin verbs to disable ooc - not a config option apparently +GLOBAL_VAR_INIT(dooc_allowed, TRUE) +GLOBAL_VAR_INIT(abandon_allowed, TRUE) +GLOBAL_VAR_INIT(enter_allowed, TRUE) +GLOBAL_VAR_INIT(guests_allowed, TRUE) +GLOBAL_VAR_INIT(shuttle_frozen, FALSE) +GLOBAL_VAR_INIT(shuttle_left, FALSE) +GLOBAL_VAR_INIT(tinted_weldhelh, TRUE) // Debug is used exactly once (in living.dm) but is commented out in a lot of places. It is not set anywhere and only checked. // Debug2 is used in conjunction with a lot of admin verbs and therefore is actually legit. -var/Debug = 0 // global debug switch -var/Debug2 = 0 +GLOBAL_VAR_INIT(Debug, FALSE) // global debug switch +GLOBAL_VAR_INIT(Debug2, FALSE) //Server API key -var/global/comms_key = "default_pwd" -var/global/comms_allowed = 0 //By default, the server does not allow messages to be sent to it, unless the key is strong enough (this is to prevent misconfigured servers from becoming vulnerable) +GLOBAL_VAR_INIT(comms_key, "default_pwd") +GLOBAL_PROTECT(comms_key) +GLOBAL_VAR_INIT(comms_allowed, FALSE) //By default, the server does not allow messages to be sent to it, unless the key is strong enough (this is to prevent misconfigured servers from becoming vulnerable) +GLOBAL_PROTECT(comms_allowed) -var/global/medal_hub = null -var/global/medal_pass = " " -var/global/medals_enabled = TRUE //will be auto set to false if the game fails contacting the medal hub to prevent unneeded calls. +GLOBAL_VAR(medal_hub) +GLOBAL_PROTECT(medal_hub) +GLOBAL_VAR_INIT(medal_pass, " ") +GLOBAL_PROTECT(medal_pass) +GLOBAL_VAR_INIT(medals_enabled, TRUE) //will be auto set to false if the game fails contacting the medal hub to prevent unneeded calls. +GLOBAL_PROTECT(medals_enabled) //This was a define, but I changed it to a variable so it can be changed in-game.(kept the all-caps definition because... code...) -Errorage -var/MAX_EX_DEVESTATION_RANGE = 3 -var/MAX_EX_HEAVY_RANGE = 7 -var/MAX_EX_LIGHT_RANGE = 14 -var/MAX_EX_FLASH_RANGE = 14 -var/MAX_EX_FLAME_RANGE = 14 -var/DYN_EX_SCALE = 0.5 +GLOBAL_VAR_INIT(MAX_EX_DEVESTATION_RANGE, 3) +GLOBAL_VAR_INIT(MAX_EX_HEAVY_RANGE, 7) +GLOBAL_VAR_INIT(MAX_EX_LIGHT_RANGE, 14) +GLOBAL_VAR_INIT(MAX_EX_FLASH_RANGE, 14) +GLOBAL_VAR_INIT(MAX_EX_FLAME_RANGE, 14) +GLOBAL_VAR_INIT(DYN_EX_SCALE, 0.5) diff --git a/code/_globalvars/database.dm b/code/_globalvars/database.dm index c07251dc66..8ba72517ce 100644 --- a/code/_globalvars/database.dm +++ b/code/_globalvars/database.dm @@ -1,12 +1,19 @@ // MySQL configuration -var/sqladdress = "localhost" -var/sqlport = "3306" -var/sqlfdbkdb = "test" -var/sqlfdbklogin = "root" -var/sqlfdbkpass = "" -var/sqlfdbktableprefix = "erro_" //backwords compatibility with downstream server hosts +GLOBAL_VAR_INIT(sqladdress, "localhost") +GLOBAL_PROTECT(sqladdress) +GLOBAL_VAR_INIT(sqlport, "3306") +GLOBAL_PROTECT(sqlport) +GLOBAL_VAR_INIT(sqlfdbkdb, "test") +GLOBAL_PROTECT(sqlfdbkdb) +GLOBAL_VAR_INIT(sqlfdbklogin, "root") +GLOBAL_PROTECT(sqlfdbklogin) +GLOBAL_VAR_INIT(sqlfdbkpass, "") +GLOBAL_PROTECT(sqlfdbkpass) +GLOBAL_VAR_INIT(sqlfdbktableprefix, "erro_") //backwords compatibility with downstream server hosts +GLOBAL_PROTECT(sqlfdbktableprefix) //Database connections //A connection is established on world creation. Ideally, the connection dies when the server restarts (After feedback logging.). -var/DBConnection/dbcon = new() //Feedback database (New database) +GLOBAL_DATUM_INIT(dbcon, /DBConnection, new) //Feedback database (New database) +GLOBAL_PROTECT(dbcon) diff --git a/code/_globalvars/game_modes.dm b/code/_globalvars/game_modes.dm index a8597af725..153ebbf089 100644 --- a/code/_globalvars/game_modes.dm +++ b/code/_globalvars/game_modes.dm @@ -1,5 +1,5 @@ -var/master_mode = "traitor"//"extended" -var/secret_force_mode = "secret" // if this is anything but "secret", the secret rotation will forceably choose this mode +GLOBAL_VAR_INIT(master_mode, "traitor") //"extended" +GLOBAL_VAR_INIT(secret_force_mode, "secret") // if this is anything but "secret", the secret rotation will forceably choose this mode -var/wavesecret = 0 // meteor mode, delays wave progression, terrible name -var/datum/station_state/start_state = null // Used in round-end report +GLOBAL_VAR_INIT(wavesecret, 0) // meteor mode, delays wave progression, terrible name +GLOBAL_DATUM(start_state, /datum/station_state) // Used in round-end report diff --git a/code/_globalvars/genetics.dm b/code/_globalvars/genetics.dm index 80c66db5e5..7016415d48 100644 --- a/code/_globalvars/genetics.dm +++ b/code/_globalvars/genetics.dm @@ -1,28 +1,28 @@ ////////////// -var/NEARSIGHTBLOCK = 0 -var/EPILEPSYBLOCK = 0 -var/COUGHBLOCK = 0 -var/TOURETTESBLOCK = 0 -var/NERVOUSBLOCK = 0 -var/BLINDBLOCK = 0 -var/DEAFBLOCK = 0 -var/HULKBLOCK = 0 -var/TELEBLOCK = 0 -var/FIREBLOCK = 0 -var/XRAYBLOCK = 0 -var/CLUMSYBLOCK = 0 -var/STRANGEBLOCK = 0 -var/RACEBLOCK = 0 +GLOBAL_VAR_INIT(NEARSIGHTBLOCK, 0) +GLOBAL_VAR_INIT(EPILEPSYBLOCK, 0) +GLOBAL_VAR_INIT(COUGHBLOCK, 0) +GLOBAL_VAR_INIT(TOURETTESBLOCK, 0) +GLOBAL_VAR_INIT(NERVOUSBLOCK, 0) +GLOBAL_VAR_INIT(BLINDBLOCK, 0) +GLOBAL_VAR_INIT(DEAFBLOCK, 0) +GLOBAL_VAR_INIT(HULKBLOCK, 0) +GLOBAL_VAR_INIT(TELEBLOCK, 0) +GLOBAL_VAR_INIT(FIREBLOCK, 0) +GLOBAL_VAR_INIT(XRAYBLOCK, 0) +GLOBAL_VAR_INIT(CLUMSYBLOCK, 0) +GLOBAL_VAR_INIT(STRANGEBLOCK, 0) +GLOBAL_VAR_INIT(RACEBLOCK, 0) -var/list/bad_se_blocks -var/list/good_se_blocks -var/list/op_se_blocks +GLOBAL_LIST(bad_se_blocks) +GLOBAL_LIST(good_se_blocks) +GLOBAL_LIST(op_se_blocks) -var/NULLED_SE -var/NULLED_UI +GLOBAL_VAR(NULLED_SE) +GLOBAL_VAR(NULLED_UI) -var/list/global_mutations = list() // list of hidden mutation things +GLOBAL_LIST_EMPTY(global_mutations) // list of hidden mutation things -var/list/bad_mutations = list() -var/list/good_mutations = list() -var/list/not_good_mutations = list() \ No newline at end of file +GLOBAL_LIST_EMPTY(bad_mutations) +GLOBAL_LIST_EMPTY(good_mutations) +GLOBAL_LIST_EMPTY(not_good_mutations) \ No newline at end of file diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index dc9a0a76de..1241708b5c 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -1,44 +1,44 @@ //Preferences stuff //Hairstyles -var/global/list/hair_styles_list = list() //stores /datum/sprite_accessory/hair indexed by name -var/global/list/hair_styles_male_list = list() //stores only hair names -var/global/list/hair_styles_female_list = list() //stores only hair names -var/global/list/facial_hair_styles_list = list() //stores /datum/sprite_accessory/facial_hair indexed by name -var/global/list/facial_hair_styles_male_list = list() //stores only hair names -var/global/list/facial_hair_styles_female_list = list() //stores only hair names +GLOBAL_LIST_EMPTY(hair_styles_list) //stores /datum/sprite_accessory/hair indexed by name +GLOBAL_LIST_EMPTY(hair_styles_male_list) //stores only hair names +GLOBAL_LIST_EMPTY(hair_styles_female_list) //stores only hair names +GLOBAL_LIST_EMPTY(facial_hair_styles_list) //stores /datum/sprite_accessory/facial_hair indexed by name +GLOBAL_LIST_EMPTY(facial_hair_styles_male_list) //stores only hair names +GLOBAL_LIST_EMPTY(facial_hair_styles_female_list) //stores only hair names //Underwear -var/global/list/underwear_list = list() //stores /datum/sprite_accessory/underwear indexed by name -var/global/list/underwear_m = list() //stores only underwear name -var/global/list/underwear_f = list() //stores only underwear name +GLOBAL_LIST_EMPTY(underwear_list) //stores /datum/sprite_accessory/underwear indexed by name +GLOBAL_LIST_EMPTY(underwear_m) //stores only underwear name +GLOBAL_LIST_EMPTY(underwear_f) //stores only underwear name //Undershirts -var/global/list/undershirt_list = list() //stores /datum/sprite_accessory/undershirt indexed by name -var/global/list/undershirt_m = list() //stores only undershirt name -var/global/list/undershirt_f = list() //stores only undershirt name +GLOBAL_LIST_EMPTY(undershirt_list) //stores /datum/sprite_accessory/undershirt indexed by name +GLOBAL_LIST_EMPTY(undershirt_m) //stores only undershirt name +GLOBAL_LIST_EMPTY(undershirt_f) //stores only undershirt name //Socks -var/global/list/socks_list = list() //stores /datum/sprite_accessory/socks indexed by name +GLOBAL_LIST_EMPTY(socks_list) //stores /datum/sprite_accessory/socks indexed by name //Lizard Bits (all datum lists indexed by name) -var/global/list/body_markings_list = list() -var/global/list/tails_list_lizard = list() -var/global/list/animated_tails_list_lizard = list() -var/global/list/snouts_list = list() -var/global/list/horns_list = list() -var/global/list/frills_list = list() -var/global/list/spines_list = list() -var/global/list/legs_list = list() -var/global/list/animated_spines_list = list() +GLOBAL_LIST_EMPTY(body_markings_list) +GLOBAL_LIST_EMPTY(tails_list_lizard) +GLOBAL_LIST_EMPTY(animated_tails_list_lizard) +GLOBAL_LIST_EMPTY(snouts_list) +GLOBAL_LIST_EMPTY(horns_list) +GLOBAL_LIST_EMPTY(frills_list) +GLOBAL_LIST_EMPTY(spines_list) +GLOBAL_LIST_EMPTY(legs_list) +GLOBAL_LIST_EMPTY(animated_spines_list) //Mutant Human bits -var/global/list/tails_list_human = list() -var/global/list/animated_tails_list_human = list() -var/global/list/ears_list = list() -var/global/list/wings_list = list() -var/global/list/wings_open_list = list() -var/global/list/r_wings_list = list() +GLOBAL_LIST_EMPTY(tails_list_human) +GLOBAL_LIST_EMPTY(animated_tails_list_human) +GLOBAL_LIST_EMPTY(ears_list) +GLOBAL_LIST_EMPTY(wings_list) +GLOBAL_LIST_EMPTY(wings_open_list) +GLOBAL_LIST_EMPTY(r_wings_list) -var/global/list/ghost_forms_with_directions_list = list("ghost") //stores the ghost forms that support directional sprites -var/global/list/ghost_forms_with_accessories_list = list("ghost") //stores the ghost forms that support hair and other such things +GLOBAL_LIST_INIT(ghost_forms_with_directions_list, list("ghost")) //stores the ghost forms that support directional sprites +GLOBAL_LIST_INIT(ghost_forms_with_accessories_list, list("ghost")) //stores the ghost forms that support hair and other such things -var/global/list/security_depts_prefs = list(SEC_DEPT_RANDOM, SEC_DEPT_NONE, SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, SEC_DEPT_SCIENCE, SEC_DEPT_SUPPLY) +GLOBAL_LIST_INIT(security_depts_prefs, list(SEC_DEPT_RANDOM, SEC_DEPT_NONE, SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, SEC_DEPT_SCIENCE, SEC_DEPT_SUPPLY)) //Backpacks #define GBACKPACK "Grey Backpack" @@ -48,21 +48,21 @@ var/global/list/security_depts_prefs = list(SEC_DEPT_RANDOM, SEC_DEPT_NONE, SEC_ #define DBACKPACK "Department Backpack" #define DSATCHEL "Department Satchel" #define DDUFFLEBAG "Department Dufflebag" -var/global/list/backbaglist = list(DBACKPACK, DSATCHEL, DDUFFLEBAG, GBACKPACK, GSATCHEL, GDUFFLEBAG, LSATCHEL) +GLOBAL_LIST_INIT(backbaglist, list(DBACKPACK, DSATCHEL, DDUFFLEBAG, GBACKPACK, GSATCHEL, GDUFFLEBAG, LSATCHEL)) //Uplink spawn loc #define UPLINK_PDA "PDA" #define UPLINK_RADIO "Radio" #define UPLINK_PEN "Pen" //like a real spy! -var/global/list/uplink_spawn_loc_list = list(UPLINK_PDA, UPLINK_RADIO, UPLINK_PEN) +GLOBAL_LIST_INIT(uplink_spawn_loc_list, list(UPLINK_PDA, UPLINK_RADIO, UPLINK_PEN)) //Female Uniforms -var/global/list/female_clothing_icons = list() +GLOBAL_LIST_EMPTY(female_clothing_icons) //radical shit -var/list/hit_appends = list("-OOF", "-ACK", "-UGH", "-HRNK", "-HURGH", "-GLORF") +GLOBAL_LIST_INIT(hit_appends, list("-OOF", "-ACK", "-UGH", "-HRNK", "-HURGH", "-GLORF")) -var/list/scarySounds = list('sound/weapons/thudswoosh.ogg','sound/weapons/Taser.ogg','sound/weapons/armbomb.ogg','sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg','sound/voice/hiss5.ogg','sound/voice/hiss6.ogg','sound/effects/Glassbr1.ogg','sound/effects/Glassbr2.ogg','sound/effects/Glassbr3.ogg','sound/items/Welder.ogg','sound/items/Welder2.ogg','sound/machines/airlock.ogg','sound/effects/clownstep1.ogg','sound/effects/clownstep2.ogg') +GLOBAL_LIST_INIT(scarySounds, list('sound/weapons/thudswoosh.ogg','sound/weapons/Taser.ogg','sound/weapons/armbomb.ogg','sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg','sound/voice/hiss5.ogg','sound/voice/hiss6.ogg','sound/effects/Glassbr1.ogg','sound/effects/Glassbr2.ogg','sound/effects/Glassbr3.ogg','sound/items/Welder.ogg','sound/items/Welder2.ogg','sound/machines/airlock.ogg','sound/effects/clownstep1.ogg','sound/effects/clownstep2.ogg')) // Reference list for disposal sort junctions. Set the sortType variable on disposal sort junctions to @@ -96,23 +96,23 @@ var/list/scarySounds = list('sound/weapons/thudswoosh.ogg','sound/weapons/Taser. 23 Genetics */ -var/list/TAGGERLOCATIONS = list("Disposals", +GLOBAL_LIST_INIT(TAGGERLOCATIONS, list("Disposals", "Cargo Bay", "QM Office", "Engineering", "CE Office", "Atmospherics", "Security", "HoS Office", "Medbay", "CMO Office", "Chemistry", "Research", "RD Office", "Robotics", "HoP Office", "Library", "Chapel", "Theatre", - "Bar", "Kitchen", "Hydroponics", "Janitor Closet","Genetics") + "Bar", "Kitchen", "Hydroponics", "Janitor Closet","Genetics")) -var/global/list/guitar_notes = flist("sound/guitar/") +GLOBAL_LIST_INIT(guitar_notes, flist("sound/guitar/")) -var/global/list/station_prefixes = list("", "Imperium", "Heretical", "Cuban", +GLOBAL_LIST_INIT(station_prefixes, list("", "Imperium", "Heretical", "Cuban", "Psychic", "Elegant", "Common", "Uncommon", "Rare", "Unique", "Houseruled", "Religious", "Atheist", "Traditional", "Houseruled", "Mad", "Super", "Ultra", "Secret", "Top Secret", "Deep", "Death", "Zybourne", "Central", "Main", "Government", "Uoi", "Fat", - "Automated", "Experimental", "Augmented") + "Automated", "Experimental", "Augmented")) -var/global/list/station_names = list("", "Stanford", "Dorf", "Alium", +GLOBAL_LIST_INIT(station_names, list("", "Stanford", "Dorf", "Alium", "Prefix", "Clowning", "Aegis", "Ishimura", "Scaredy", "Death-World", "Mime", "Honk", "Rogue", "MacRagge", "Ultrameens", "Safety", "Paranoia", "Explosive", "Neckbear", "Donk", "Muppet", "North", "West", "East", @@ -124,9 +124,9 @@ var/global/list/station_names = list("", "Stanford", "Dorf", "Alium", "System", "Mining", "Neckbeard", "Research", "Supply", "Military", "Orbital", "Battle", "Science", "Asteroid", "Home", "Production", "Transport", "Delivery", "Extraplanetary", "Orbital", "Correctional", - "Robot", "Hats", "Pizza") + "Robot", "Hats", "Pizza")) -var/global/list/station_suffixes = list("Station", "Frontier", +GLOBAL_LIST_INIT(station_suffixes, list("Station", "Frontier", "Suffix", "Death-trap", "Space-hulk", "Lab", "Hazard","Spess Junk", "Fishery", "No-Moon", "Tomb", "Crypt", "Hut", "Monkey", "Bomb", "Trade Post", "Fortress", "Village", "Town", "City", "Edition", "Hive", @@ -135,23 +135,23 @@ var/global/list/station_suffixes = list("Station", "Frontier", "Construct", "Hangar", "Prison", "Center", "Port", "Waystation", "Factory", "Waypoint", "Stopover", "Hub", "HQ", "Office", "Object", "Fortification", "Colony", "Planet-Cracker", "Roost", "Fat Camp", - "Airstrip") + "Airstrip")) -var/global/list/greek_letters = list("Alpha", "Beta", "Gamma", "Delta", +GLOBAL_LIST_INIT(greek_letters, list("Alpha", "Beta", "Gamma", "Delta", "Epsilon", "Zeta", "Eta", "Theta", "Iota", "Kappa", "Lambda", "Mu", "Nu", "Xi", "Omicron", "Pi", "Rho", "Sigma", "Tau", "Upsilon", "Phi", - "Chi", "Psi", "Omega") + "Chi", "Psi", "Omega")) -var/global/list/phonetic_alphabet = list("Alpha", "Bravo", "Charlie", +GLOBAL_LIST_INIT(phonetic_alphabet, list("Alpha", "Bravo", "Charlie", "Delta", "Echo", "Foxtrot", "Golf", "Hotel", "India", "Juliet", "Kilo", "Lima", "Mike", "November", "Oscar", "Papa", "Quebec", "Romeo", "Sierra", "Tango", "Uniform", "Victor", "Whiskey", "X-ray", - "Yankee", "Zulu") + "Yankee", "Zulu")) -var/global/list/numbers_as_words = list("One", "Two", "Three", "Four", +GLOBAL_LIST_INIT(numbers_as_words, list("One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", - "Eighteen", "Nineteen") + "Eighteen", "Nineteen")) /proc/generate_number_strings() var/list/L @@ -160,4 +160,4 @@ var/global/list/numbers_as_words = list("One", "Two", "Three", "Four", L += "\Roman[i]" return L -var/global/list/station_numerals = greek_letters + phonetic_alphabet + numbers_as_words + generate_number_strings() +GLOBAL_LIST_INIT(station_numerals, greek_letters + phonetic_alphabet + numbers_as_words + generate_number_strings()) diff --git a/code/_globalvars/lists/mapping.dm b/code/_globalvars/lists/mapping.dm index 61f2e16c04..090000fded 100644 --- a/code/_globalvars/lists/mapping.dm +++ b/code/_globalvars/lists/mapping.dm @@ -3,18 +3,18 @@ #define Z_SOUTH 3 #define Z_WEST 4 -var/list/cardinal = list( NORTH, SOUTH, EAST, WEST ) -var/list/alldirs = list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST) -var/list/diagonals = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST) +GLOBAL_LIST_INIT(cardinal, list( NORTH, SOUTH, EAST, WEST )) +GLOBAL_LIST_INIT(alldirs, list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)) +GLOBAL_LIST_INIT(diagonals, list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)) //This list contains the z-level numbers which can be accessed via space travel and the percentile chances to get there. //(Exceptions: extended, sandbox and nuke) -Errorage //Was list("3" = 30, "4" = 70). //Spacing should be a reliable method of getting rid of a body -- Urist. //Go away Urist, I'm restoring this to the longer list. ~Errorage -var/list/accessable_z_levels = list(1,3,4,5,6,7) //Keep this to six maps, repeating z-levels is ok if needed +GLOBAL_LIST_INIT(accessable_z_levels, list(1,3,4,5,6,7)) //Keep this to six maps, repeating z-levels is ok if needed -var/global/list/global_map = null +GLOBAL_LIST(global_map) //list/global_map = list(list(1,5),list(4,3))//an array of map Z levels. //Resulting sector map looks like //|_1_|_4_| @@ -25,34 +25,32 @@ var/global/list/global_map = null //3 - AI satellite //5 - empty space -var/list/landmarks_list = list() //list of all landmarks created -var/list/start_landmarks_list = list() //list of all spawn points created -var/list/department_security_spawns = list() //list of all department security spawns -var/list/generic_event_spawns = list() //list of all spawns for events +GLOBAL_LIST_EMPTY(landmarks_list) //list of all landmarks created +GLOBAL_LIST_EMPTY(start_landmarks_list) //list of all spawn points created +GLOBAL_LIST_EMPTY(department_security_spawns) //list of all department security spawns +GLOBAL_LIST_EMPTY(generic_event_spawns) //list of all spawns for events -var/list/monkeystart = list() -var/list/wizardstart = list() -var/list/newplayer_start = list() -var/list/latejoin = list() -var/list/prisonwarp = list() //prisoners go to these -var/list/holdingfacility = list() //captured people go here -var/list/xeno_spawn = list()//Aliens spawn at these. -var/list/tdome1 = list() -var/list/tdome2 = list() -var/list/tdomeobserve = list() -var/list/tdomeadmin = list() -var/list/prisonsecuritywarp = list() //prison security goes to these -var/list/prisonwarped = list() //list of players already warped -var/list/blobstart = list() -var/list/secequipment = list() -var/list/deathsquadspawn = list() -var/list/emergencyresponseteamspawn = list() -var/list/ruin_landmarks = list() +GLOBAL_LIST_EMPTY(wizardstart) +GLOBAL_LIST_EMPTY(newplayer_start) +GLOBAL_LIST_EMPTY(latejoin) +GLOBAL_LIST_EMPTY(prisonwarp) //prisoners go to these +GLOBAL_LIST_EMPTY(holdingfacility) //captured people go here +GLOBAL_LIST_EMPTY(xeno_spawn)//Aliens spawn at these. +GLOBAL_LIST_EMPTY(tdome1) +GLOBAL_LIST_EMPTY(tdome2) +GLOBAL_LIST_EMPTY(tdomeobserve) +GLOBAL_LIST_EMPTY(tdomeadmin) +GLOBAL_LIST_EMPTY(prisonwarped) //list of players already warped +GLOBAL_LIST_EMPTY(blobstart) +GLOBAL_LIST_EMPTY(secequipment) +GLOBAL_LIST_EMPTY(deathsquadspawn) +GLOBAL_LIST_EMPTY(emergencyresponseteamspawn) +GLOBAL_LIST_EMPTY(ruin_landmarks) //away missions -var/list/awaydestinations = list() //a list of landmarks that the warpgate can take you to +GLOBAL_LIST_EMPTY(awaydestinations) //a list of landmarks that the warpgate can take you to //used by jump-to-area etc. Updated by area/updateName() -var/list/sortedAreas = list() +GLOBAL_LIST_EMPTY(sortedAreas) -var/list/transit_markers = list() +GLOBAL_LIST_EMPTY(transit_markers) diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm index 876a11a7a8..dab5da659e 100644 --- a/code/_globalvars/lists/mobs.dm +++ b/code/_globalvars/lists/mobs.dm @@ -1,16 +1,21 @@ -var/list/clients = list() //all clients -var/list/admins = list() //all clients whom are admins -var/list/deadmins = list() //all clients who have used the de-admin verb. -var/list/directory = list() //all ckeys with associated client -var/list/stealthminID = list() //reference list with IDs that store ckeys, for stealthmins +GLOBAL_LIST_EMPTY(clients) //all clients +GLOBAL_LIST_EMPTY(admins) //all clients whom are admins +GLOBAL_PROTECT(admins) +GLOBAL_LIST_EMPTY(deadmins) //all clients who have used the de-admin verb. +GLOBAL_PROTECT(deadmins) +GLOBAL_LIST_EMPTY(directory) //all ckeys with associated client +GLOBAL_LIST_EMPTY(stealthminID) //reference list with IDs that store ckeys, for stealthmins //Since it didn't really belong in any other category, I'm putting this here //This is for procs to replace all the goddamn 'in world's that are chilling around the code -var/global/list/player_list = list() //all mobs **with clients attached**. Excludes /mob/dead/new_player -var/global/list/mob_list = list() //all mobs, including clientless -var/global/list/living_mob_list = list() //all alive mobs, including clientless. Excludes /mob/dead/new_player -var/global/list/dead_mob_list = list() //all dead mobs, including clientless. Excludes /mob/dead/new_player -var/global/list/joined_player_list = list() //all clients that have joined the game at round-start or as a latejoin. -var/global/list/silicon_mobs = list() //all silicon mobs -var/global/list/pai_list = list() \ No newline at end of file +GLOBAL_LIST_EMPTY(player_list) //all mobs **with clients attached**. Excludes /mob/dead/new_player +GLOBAL_LIST_EMPTY(mob_list) //all mobs, including clientless +GLOBAL_LIST_EMPTY(living_mob_list) //all alive mobs, including clientless. Excludes /mob/dead/new_player +GLOBAL_LIST_EMPTY(dead_mob_list) //all dead mobs, including clientless. Excludes /mob/dead/new_player +GLOBAL_LIST_EMPTY(joined_player_list) //all clients that have joined the game at round-start or as a latejoin. +GLOBAL_LIST_EMPTY(silicon_mobs) //all silicon mobs +GLOBAL_LIST_EMPTY(ai_list) +GLOBAL_LIST_EMPTY(pai_list) +GLOBAL_LIST_EMPTY(available_ai_shells) +GLOBAL_LIST_EMPTY(language_datums) \ No newline at end of file diff --git a/code/_globalvars/lists/names.dm b/code/_globalvars/lists/names.dm index 736419e4a0..5f189b8f94 100644 --- a/code/_globalvars/lists/names.dm +++ b/code/_globalvars/lists/names.dm @@ -1,22 +1,23 @@ -var/list/ai_names = file2list("config/names/ai.txt") -var/list/wizard_first = file2list("config/names/wizardfirst.txt") -var/list/wizard_second = file2list("config/names/wizardsecond.txt") -var/list/ninja_titles = file2list("config/names/ninjatitle.txt") -var/list/ninja_names = file2list("config/names/ninjaname.txt") -var/list/commando_names = file2list("config/names/death_commando.txt") -var/list/first_names_male = file2list("config/names/first_male.txt") -var/list/first_names_female = file2list("config/names/first_female.txt") -var/list/last_names = file2list("config/names/last.txt") -var/list/lizard_names_male = file2list("config/names/lizard_male.txt") -var/list/lizard_names_female = file2list("config/names/lizard_female.txt") -var/list/clown_names = file2list("config/names/clown.txt") -var/list/mime_names = file2list("config/names/mime.txt") -var/list/carp_names = file2list("config/names/carp.txt") -var/list/golem_names = file2list("config/names/golem.txt") -var/list/plasmaman_names = file2list("config/names/plasmaman.txt") +GLOBAL_LIST_INIT(ai_names, file2list("config/names/ai.txt")) +GLOBAL_LIST_INIT(wizard_first, file2list("config/names/wizardfirst.txt")) +GLOBAL_LIST_INIT(wizard_second, file2list("config/names/wizardsecond.txt")) +GLOBAL_LIST_INIT(ninja_titles, file2list("config/names/ninjatitle.txt")) +GLOBAL_LIST_INIT(ninja_names, file2list("config/names/ninjaname.txt")) +GLOBAL_LIST_INIT(commando_names, file2list("config/names/death_commando.txt")) +GLOBAL_LIST_INIT(first_names_male, file2list("config/names/first_male.txt")) +GLOBAL_LIST_INIT(first_names_female, file2list("config/names/first_female.txt")) +GLOBAL_LIST_INIT(last_names, file2list("config/names/last.txt")) +GLOBAL_LIST_INIT(lizard_names_male, file2list("config/names/lizard_male.txt")) +GLOBAL_LIST_INIT(lizard_names_female, file2list("config/names/lizard_female.txt")) +GLOBAL_LIST_INIT(clown_names, file2list("config/names/clown.txt")) +GLOBAL_LIST_INIT(mime_names, file2list("config/names/mime.txt")) +GLOBAL_LIST_INIT(carp_names, file2list("config/names/carp.txt")) +GLOBAL_LIST_INIT(golem_names, file2list("config/names/golem.txt")) +GLOBAL_LIST_INIT(plasmaman_names, file2list("config/names/plasmaman.txt")) +GLOBAL_LIST_INIT(posibrain_names, 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","JNLG","KOS","TKRG","XAL","STLP","CBOS","DUNC","FXMC","DRSD","COI")) -var/list/verbs = file2list("config/names/verbs.txt") -var/list/adjectives = file2list("config/names/adjectives.txt") +GLOBAL_LIST_INIT(verbs, file2list("config/names/verbs.txt")) +GLOBAL_LIST_INIT(adjectives, file2list("config/names/adjectives.txt")) //loaded on startup because of " //would include in rsc if ' was used diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index d16ada4f05..be771e0676 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -1,30 +1,34 @@ -var/global/list/cable_list = list() //Index for all cables, so that powernets don't have to look through the entire world all the time -var/global/list/portals = list() //list of all /obj/effect/portal -var/global/list/airlocks = list() //list of all airlocks -var/global/list/mechas_list = list() //list of all mechs. Used by hostile mobs target tracking. -var/global/list/shuttle_caller_list = list() //list of all communication consoles and AIs, for automatic shuttle calls when there are none. -var/global/list/machines = list() //NOTE: this is a list of ALL machines now. The processing machines list is SSmachine.processing ! -var/global/list/syndicate_shuttle_boards = list() //important to keep track of for managing nukeops war declarations. -var/global/list/navbeacons = list() //list of all bot nagivation beacons, used for patrolling. -var/global/list/teleportbeacons = list() //list of all tracking beacons used by teleporters -var/global/list/deliverybeacons = list() //list of all MULEbot delivery beacons. -var/global/list/deliverybeacontags = list() //list of all tags associated with delivery beacons. -var/global/list/nuke_list = list() -var/global/list/alarmdisplay = list() //list of all machines or programs that can display station alerts -var/global/list/singularities = list() //list of all singularities on the station (actually technically all engines) +GLOBAL_LIST_EMPTY(cable_list) //Index for all cables, so that powernets don't have to look through the entire world all the time +GLOBAL_LIST_EMPTY(portals) //list of all /obj/effect/portal +GLOBAL_LIST_EMPTY(airlocks) //list of all airlocks +GLOBAL_LIST_EMPTY(mechas_list) //list of all mechs. Used by hostile mobs target tracking. +GLOBAL_LIST_EMPTY(shuttle_caller_list) //list of all communication consoles and AIs, for automatic shuttle calls when there are none. +GLOBAL_LIST_EMPTY(machines) //NOTE: this is a list of ALL machines now. The processing machines list is SSmachine.processing ! +GLOBAL_LIST_EMPTY(syndicate_shuttle_boards) //important to keep track of for managing nukeops war declarations. +GLOBAL_LIST_EMPTY(navbeacons) //list of all bot nagivation beacons, used for patrolling. +GLOBAL_LIST_EMPTY(teleportbeacons) //list of all tracking beacons used by teleporters +GLOBAL_LIST_EMPTY(deliverybeacons) //list of all MULEbot delivery beacons. +GLOBAL_LIST_EMPTY(deliverybeacontags) //list of all tags associated with delivery beacons. +GLOBAL_LIST_EMPTY(nuke_list) +GLOBAL_LIST_EMPTY(alarmdisplay) //list of all machines or programs that can display station alerts +GLOBAL_LIST_EMPTY(singularities) //list of all singularities on the station (actually technically all engines) -var/global/list/chemical_reactions_list //list of all /datum/chemical_reaction datums. Used during chemical reactions -var/global/list/chemical_reagents_list //list of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff -var/global/list/materials_list = list() //list of all /datum/material datums indexed by material id. -var/global/list/tech_list = list() //list of all /datum/tech datums indexed by id. -var/global/list/surgeries_list = list() //list of all surgeries by name, associated with their path. -var/global/list/crafting_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/tracked_chem_implants = list() //list of implants the prisoner console can track and send inject commands too -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. -var/global/list/zombie_infection_list = list() // A list of all zombie_infection organs, for any mass "animation" -var/global/list/meteor_list = list() // List of all meteors. -var/global/list/active_jammers = list() // List of active radio jammers +GLOBAL_LIST(chemical_reactions_list) //list of all /datum/chemical_reaction datums. Used during chemical reactions +GLOBAL_LIST(chemical_reagents_list) //list of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff +GLOBAL_LIST_EMPTY(materials_list) //list of all /datum/material datums indexed by material id. +GLOBAL_LIST_EMPTY(tech_list) //list of all /datum/tech datums indexed by id. +GLOBAL_LIST_EMPTY(surgeries_list) //list of all surgeries by name, associated with their path. +GLOBAL_LIST_EMPTY(crafting_recipes) //list of all table craft recipes +GLOBAL_LIST_EMPTY(rcd_list) //list of Rapid Construction Devices. +GLOBAL_LIST_EMPTY(apcs_list) //list of all Area Power Controller machines, seperate from machines for powernet speeeeeeed. +GLOBAL_LIST_EMPTY(tracked_implants) //list of all current implants that are tracked to work out what sort of trek everyone is on. Sadly not on lavaworld not implemented... +GLOBAL_LIST_EMPTY(tracked_chem_implants) //list of implants the prisoner console can track and send inject commands too +GLOBAL_LIST_EMPTY(poi_list) //list of points of interest for observe/follow +GLOBAL_LIST_EMPTY(pinpointer_list) //list of all pinpointers. Used to change stuff they are pointing to all at once. +GLOBAL_LIST_EMPTY(zombie_infection_list) // A list of all zombie_infection organs, for any mass "animation" +GLOBAL_LIST_EMPTY(meteor_list) // List of all meteors. +GLOBAL_LIST_EMPTY(active_jammers) // List of active radio jammers +GLOBAL_LIST_EMPTY(ladders) + +GLOBAL_LIST_EMPTY(wire_color_directory) +GLOBAL_LIST_EMPTY(wire_name_directory) \ No newline at end of file diff --git a/code/_globalvars/lists/poll_ignore.dm b/code/_globalvars/lists/poll_ignore.dm index 23db4f6ae6..ff6a4edd40 100644 --- a/code/_globalvars/lists/poll_ignore.dm +++ b/code/_globalvars/lists/poll_ignore.dm @@ -4,5 +4,6 @@ #define POLL_IGNORE_SENTIENCE_POTION "sentience_potion" #define POLL_IGNORE_POSSESSED_BLADE "possessed_blade" #define POLL_IGNORE_ALIEN_LARVA "alien_larva" +#define POLL_IGNORE_CLOCKWORK_MARAUDER "clockwork_marauder" -var/list/poll_ignore = list() +GLOBAL_LIST_EMPTY(poll_ignore) diff --git a/code/_globalvars/lists/typecache.dm b/code/_globalvars/lists/typecache.dm index 5d2565c7f2..d83c708131 100644 --- a/code/_globalvars/lists/typecache.dm +++ b/code/_globalvars/lists/typecache.dm @@ -3,7 +3,7 @@ //Note: typecache can only replace istype if you know for sure the thing is at least a datum. -var/list/typecache_mob = typecacheof(list(/mob)) +GLOBAL_LIST_INIT(typecache_mob, typecacheof(list(/mob))) diff --git a/code/_globalvars/logging.dm b/code/_globalvars/logging.dm index a673611d84..35adcef36c 100644 --- a/code/_globalvars/logging.dm +++ b/code/_globalvars/logging.dm @@ -1,17 +1,28 @@ -var/diary = null -var/runtime_diary = null -var/diaryofmeanpeople = null -var/href_logfile = null +GLOBAL_VAR(diary) +GLOBAL_PROTECT(diary) +GLOBAL_VAR(runtime_diary) +GLOBAL_PROTECT(runtime_diary) +GLOBAL_VAR(diaryofmeanpeople) +GLOBAL_PROTECT(diaryofmeanpeople) +GLOBAL_VAR(href_logfile) +GLOBAL_PROTECT(href_logfile) -var/list/bombers = list( ) -var/list/admin_log = list ( ) -var/list/lastsignalers = list( ) //keeps last 100 signals here in format: "[src] used \ref[src] @ location [src.loc]: [freq]/[code]" -var/list/lawchanges = list( ) //Stores who uploaded laws to which silicon-based lifeform, and what the law was +GLOBAL_LIST_EMPTY(bombers) +GLOBAL_PROTECT(bombers) +GLOBAL_LIST_EMPTY(admin_log) +GLOBAL_PROTECT(admin_log) +GLOBAL_LIST_EMPTY(lastsignalers) //keeps last 100 signals here in format: "[src] used \ref[src] @ location [src.loc]: [freq]/[code]" +GLOBAL_PROTECT(lastsignalers) +GLOBAL_LIST_EMPTY(lawchanges) //Stores who uploaded laws to which silicon-based lifeform, and what the law was +GLOBAL_PROTECT(lawchanges) -var/list/combatlog = list() -var/list/IClog = list() -var/list/OOClog = list() -var/list/adminlog = list() -var/list/mentorlog = list () +GLOBAL_LIST_EMPTY(combatlog) +GLOBAL_PROTECT(combatlog) +GLOBAL_LIST_EMPTY(IClog) +GLOBAL_PROTECT(IClog) +GLOBAL_LIST_EMPTY(OOClog) +GLOBAL_PROTECT(OOClog) +GLOBAL_LIST_EMPTY(adminlog) +GLOBAL_PROTECT(adminlog) -var/list/active_turfs_startlist = list() +GLOBAL_LIST_EMPTY(active_turfs_startlist) \ No newline at end of file diff --git a/code/_globalvars/misc.dm b/code/_globalvars/misc.dm index 734f673588..ea89f3e4e7 100644 --- a/code/_globalvars/misc.dm +++ b/code/_globalvars/misc.dm @@ -1,9 +1,9 @@ -var/admin_notice = "" // Admin notice that all clients see when joining the server +GLOBAL_VAR_INIT(admin_notice, "") // Admin notice that all clients see when joining the server -var/timezoneOffset = 0 // The difference betwen midnight (of the host computer) and 0 world.ticks. +GLOBAL_VAR_INIT(timezoneOffset, 0) // The difference betwen midnight (of the host computer) and 0 world.ticks. // For FTP requests. (i.e. downloading runtime logs.) // However it'd be ok to use for accessing attack logs and such too, which are even laggier. -var/fileaccess_timer = 0 +GLOBAL_VAR_INIT(fileaccess_timer, 0) -var/TAB = "    " \ No newline at end of file +GLOBAL_VAR_INIT(TAB, "    ") \ No newline at end of file diff --git a/code/_globalvars/station.dm b/code/_globalvars/station.dm index ba0055b58d..7af03b7ce3 100644 --- a/code/_globalvars/station.dm +++ b/code/_globalvars/station.dm @@ -1,8 +1,6 @@ -var/global/datum/datacore/data_core = null -//var/global/defer_powernet_rebuild = 0 // true if net rebuild will be called manually after an event -//Noble idea, but doing this made GC fail. The gains from waiting on deffering are lost by using del() +GLOBAL_DATUM(data_core, /datum/datacore) -var/CELLRATE = 0.002 // multiplier for watts per tick <> cell storage (eg: .002 means if there is a load of 1000 watts, 20 units will be taken from a cell per second) -var/CHARGELEVEL = 0.001 // Cap for how fast cells charge, as a percentage-per-tick (.001 means cellcharge is capped to 1% per second) +GLOBAL_VAR_INIT(CELLRATE, 0.002) // multiplier for watts per tick <> cell storage (eg: .002 means if there is a load of 1000 watts, 20 units will be taken from a cell per second) +GLOBAL_VAR_INIT(CHARGELEVEL, 0.001) // Cap for how fast cells charge, as a percentage-per-tick (.001 means cellcharge is capped to 1% per second) -var/list/powernets = list() \ No newline at end of file +GLOBAL_LIST_EMPTY(powernets) \ No newline at end of file diff --git a/code/js/byjax.dm b/code/_js/byjax.dm similarity index 98% rename from code/js/byjax.dm rename to code/_js/byjax.dm index 18b8180214..895cfc91d9 100644 --- a/code/js/byjax.dm +++ b/code/_js/byjax.dm @@ -1,5 +1,5 @@ //this function places received data into element with specified id. -var/const/js_byjax = {" +#define js_byjax {" function replaceContent() { var args = Array.prototype.slice.call(arguments); diff --git a/code/js/menus.dm b/code/_js/menus.dm similarity index 97% rename from code/js/menus.dm rename to code/_js/menus.dm index 01137ce963..9b2fc40e68 100644 --- a/code/js/menus.dm +++ b/code/_js/menus.dm @@ -1,4 +1,4 @@ -var/const/js_dropdowns = {" +#define js_dropdowns {" function dropdowns() { var divs = document.getElementsByTagName('div'); var headers = new Array(); diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index 232fe649e6..6b4d9aad1c 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -37,7 +37,7 @@ var/turf/pixel_turf = get_turf_pixel(A) var/turf_visible if(pixel_turf) - turf_visible = cameranet.checkTurfVis(pixel_turf) + turf_visible = GLOB.cameranet.checkTurfVis(pixel_turf) if(!turf_visible) if(istype(loc, /obj/item/device/aicard) && (pixel_turf in view(client.view, loc))) turf_visible = TRUE @@ -45,7 +45,9 @@ if (pixel_turf.obscured) log_admin("[key_name_admin(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([COORD(pixel_turf)])") message_admins("[key_name_admin(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([ADMIN_COORDJMP(pixel_turf)]))") - send2irc_adminless_only("NOCHEAT", "[key_name(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([COORD(pixel_turf)]))") + if(REALTIMEOFDAY >= chnotify + 9000) + chnotify = REALTIMEOFDAY + send2irc_adminless_only("NOCHEAT", "[key_name(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([COORD(pixel_turf)]))") return var/list/modifiers = params2list(params) @@ -188,4 +190,4 @@ // /mob/living/silicon/ai/TurfAdjacent(var/turf/T) - return (cameranet && cameranet.checkTurfVis(T)) + return (GLOB.cameranet && GLOB.cameranet.checkTurfVis(T)) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 0f17f1775a..0fe37a9286 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -31,13 +31,16 @@ Note that this proc can be overridden, and is in the case of screen objects. */ /atom/Click(location,control,params) - usr.ClickOn(src, params) + if(initialized) + usr.ClickOn(src, params) /atom/DblClick(location,control,params) - usr.DblClickOn(src,params) + if(initialized) + usr.DblClickOn(src,params) /atom/MouseWheel(delta_x,delta_y,location,control,params) - usr.MouseWheelOn(src, delta_x, delta_y, params) + if(initialized) + usr.MouseWheelOn(src, delta_x, delta_y, params) /* Standard mob ClickOn() @@ -114,10 +117,7 @@ if(A.ClickAccessible(src, depth=INVENTORY_DEPTH)) // No adjacency needed if(W) - if(W.pre_attackby(A,src,params)) - var/resolved = A.attackby(W,src) - if(!resolved && A && W) - W.afterattack(A,src,1,params) // 1 indicates adjacency + melee_item_attack_chain(src, W, A, params) else if(ismob(A)) changeNext_move(CLICK_CD_MELEE) @@ -131,11 +131,7 @@ if(isturf(A) || isturf(A.loc) || (A.loc && isturf(A.loc.loc))) if(Adjacent(A) || (W && CheckReach(src, A, W.reach))) //Adjacent or reaching attacks if(W) - if(W.pre_attackby(A,src,params)) - // Return 1 in attackby() to prevent afterattack() effects (when safely moving items for example) - var/resolved = A.attackby(W,src,params) - if(!resolved && A && W) - W.afterattack(A,src,1,params) // 1: clicking something Adjacent + melee_item_attack_chain(src, W, A, params) else if(ismob(A)) changeNext_move(CLICK_CD_MELEE) @@ -163,7 +159,7 @@ if(dummy.loc == there.loc) qdel(dummy) return 1 - if(there.density && dummy in range(1, there)) //For windows and + if(there.density && dummy in range(1, there)) //For windows and suchlike qdel(dummy) return 1 if(!dummy.Move(T)) //we're blocked! diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index fdb98af512..578e6cd378 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -68,11 +68,7 @@ // cyborgs are prohibited from using storage items so we can I think safely remove (A.loc in contents) if(A == loc || (A in loc) || (A in contents)) - // No adjacency checks - if(W.pre_attackby(A,src,params)) - var/resolved = A.attackby(W,src, params) - if(!resolved && A && W) - W.afterattack(A,src,1,params) + melee_item_attack_chain(src, W, A, params) return if(!isturf(loc)) @@ -81,10 +77,7 @@ // cyborgs are prohibited from using storage items so we can I think safely remove (A.loc && isturf(A.loc.loc)) if(isturf(A) || isturf(A.loc)) if(A.Adjacent(src)) // see adjacent.dm - if(W.pre_attackby(A,src,params)) - var/resolved = A.attackby(W, src, params) - if(!resolved && A && W) - W.afterattack(A, src, 1, params) + melee_item_attack_chain(src, W, A, params) return else W.afterattack(A, src, 0, params) diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index c621458533..90c953a110 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -25,6 +25,7 @@ #define ui_lingstingdisplay "WEST:6,CENTER-3:11" #define ui_crafting "12:-10,1:5" #define ui_building "12:-10,1:21" +#define ui_language_menu "11:6,2:-11" #define ui_devilsouldisplay "WEST:6,CENTER-1:15" @@ -61,16 +62,16 @@ #define ui_borg_store "CENTER+2:16,SOUTH:5" //borgs #define ui_borg_camera "CENTER+3:21,SOUTH:5" //borgs #define ui_borg_album "CENTER+4:21,SOUTH:5" //borgs -#define ui_borg_talk_wheel "CENTER+4:21,SOUTH+1:5" //borgs +#define ui_borg_language_menu "CENTER+4:21,SOUTH+1:5" //borgs -#define ui_monkey_head "CENTER-4:13,SOUTH:5" //monkey -#define ui_monkey_mask "CENTER-3:14,SOUTH:5" //monkey -#define ui_monkey_neck "CENTER-2:15,SOUTH:5" //monkey -#define ui_monkey_back "CENTER-1:16,SOUTH:5" //monkey +#define ui_monkey_head "CENTER-5:13,SOUTH:5" //monkey +#define ui_monkey_mask "CENTER-4:14,SOUTH:5" //monkey +#define ui_monkey_neck "CENTER-3:15,SOUTH:5" //monkey +#define ui_monkey_back "CENTER-2:16,SOUTH:5" //monkey #define ui_alien_storage_l "CENTER-2:14,SOUTH:5"//alien #define ui_alien_storage_r "CENTER+1:18,SOUTH:5"//alien -#define ui_alien_talk_wheel "EAST-3:26,SOUTH:5" //alien +#define ui_alien_language_menu "EAST-3:26,SOUTH:5" //alien #define ui_drone_drop "CENTER+1:18,SOUTH:5" //maintenance drones #define ui_drone_pull "CENTER+2:2,SOUTH:5" //maintenance drones diff --git a/code/_onclick/hud/ai.dm b/code/_onclick/hud/ai.dm index c26e54eae9..a5bc86dabe 100644 --- a/code/_onclick/hud/ai.dm +++ b/code/_onclick/hud/ai.dm @@ -53,7 +53,7 @@ if(..()) return var/mob/living/silicon/ai/AI = usr - crewmonitor.show(AI) + GLOB.crewmonitor.show(AI) /obj/screen/ai/crew_manifest name = "Crew Manifest" @@ -167,6 +167,11 @@ ..() var/obj/screen/using +// Language menu + using = new /obj/screen/language_menu + using.screen_loc = ui_borg_language_menu + static_inventory += using + //AI core using = new /obj/screen/ai/aicore() using.screen_loc = ui_ai_core diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index 636675c8ac..e83cfadedf 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -276,7 +276,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." return ..() /obj/screen/alert/clockwork/scripture_reqs/process() - if(clockwork_gateway_activated) + if(GLOB.clockwork_gateway_activated) qdel(src) return var/current_state @@ -288,7 +288,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." icon_state = "no" if(!current_state) name = "Current Objective" - for(var/obj/structure/destructible/clockwork/massive/celestial_gateway/G in all_clockwork_objects) + for(var/obj/structure/destructible/clockwork/massive/celestial_gateway/G in GLOB.all_clockwork_objects) var/area/gate_area = get_area(G) desc = "Protect the Ark at [gate_area.map_name]!" return @@ -298,7 +298,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." name = "Next Tier Requirements" var/validservants = 0 var/unconverted_ais_exist = get_unconverted_ais() - for(var/mob/living/L in living_mob_list) + for(var/mob/living/L in GLOB.living_mob_list) if(is_servant_of_ratvar(L) && (ishuman(L) || issilicon(L))) validservants++ var/req_servants = 0 @@ -328,14 +328,14 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." icon_state += "-servants" //in this manner, generate an icon key based on what we're missing else textlist += ": \[CHECK\]" - textlist += "
[clockwork_caches]/[req_caches] Tinkerer's Caches" - if(clockwork_caches < req_caches) + textlist += "
[GLOB.clockwork_caches]/[req_caches] Tinkerer's Caches" + if(GLOB.clockwork_caches < req_caches) icon_state += "-caches" else textlist += ": \[CHECK\]" if(req_cv) //cv only shows up if the tier requires it - textlist += "
[clockwork_construction_value]/[req_cv] Construction Value" - if(clockwork_construction_value < req_cv) + textlist += "
[GLOB.clockwork_construction_value]/[req_cv] Construction Value" + if(GLOB.clockwork_construction_value < req_cv) icon_state += "-cv" else textlist += ": \[CHECK\]" @@ -356,7 +356,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." icon_state = "clockinfo" /obj/screen/alert/clockwork/infodump/MouseEntered(location,control,params) - if(ratvar_awakens) + if(GLOB.ratvar_awakens) desc = "CHETR
NYY
HAGEHUGF-NAQ-UBABE
RATVAR.
" else var/servants = 0 @@ -364,7 +364,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." var/unconverted_ais_exist = get_unconverted_ais() var/list/scripture_states = scripture_unlock_check() var/list/textlist - for(var/mob/living/L in living_mob_list) + for(var/mob/living/L in GLOB.living_mob_list) if(is_servant_of_ratvar(L)) servants++ if(ishuman(L) || issilicon(L)) @@ -376,13 +376,13 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." textlist = list("[servants] Servants, [validservants ? "[validservants] of which counts":"none of which count"] towards scripture.
") else textlist = list("[servants] Servant, who [validservants ? "counts":"does not count"] towards scripture.
") - textlist += "[clockwork_caches ? "[clockwork_caches] Tinkerer's Caches.":"No Tinkerer's Caches, construct one!"]
\ - [clockwork_construction_value] Construction Value.
" - if(clockwork_daemons) - textlist += "[clockwork_daemons] Tinkerer's Daemons: [servants * 0.2 < clockwork_daemons ? "DISABLED":"ACTIVE"]
" + textlist += "[GLOB.clockwork_caches ? "[GLOB.clockwork_caches] Tinkerer's Caches.":"No Tinkerer's Caches, construct one!"]
\ + [GLOB.clockwork_construction_value] Construction Value.
" + if(GLOB.clockwork_daemons) + textlist += "[GLOB.clockwork_daemons] Tinkerer's Daemons: [servants * 0.2 < GLOB.clockwork_daemons ? "DISABLED":"ACTIVE"]
" else textlist += "No Tinkerer's Daemons.
" - for(var/obj/structure/destructible/clockwork/massive/celestial_gateway/G in all_clockwork_objects) + for(var/obj/structure/destructible/clockwork/massive/celestial_gateway/G in GLOB.all_clockwork_objects) var/area/gate_area = get_area(G) textlist += "Ark Location: [uppertext(gate_area.map_name)]
" if(G.still_needs_components()) @@ -392,20 +392,17 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." textlist += "[G.required_components[i]] " textlist += "
" else - if(G.ratvar_portal) - textlist += "Seconds until Ratvar's arrival: [G.get_arrival_text(TRUE)]
" - else - textlist += "Seconds until Proselytization: [G.get_arrival_text(TRUE)]
" + textlist += "Seconds until Ratvar's arrival: [G.get_arrival_text(TRUE)]
" if(unconverted_ais_exist) if(unconverted_ais_exist > 1) textlist += "[unconverted_ais_exist] unconverted AIs exist!
" else textlist += "An unconverted AI exists!
" if(scripture_states[SCRIPTURE_REVENANT]) - var/inathneq_available = clockwork_generals_invoked["inath-neq"] <= world.time - var/sevtug_available = clockwork_generals_invoked["sevtug"] <= world.time - var/nezbere_available = clockwork_generals_invoked["nezbere"] <= world.time - var/nezcrentr_available = clockwork_generals_invoked["nzcrentr"] <= world.time + var/inathneq_available = GLOB.clockwork_generals_invoked["inath-neq"] <= world.time + var/sevtug_available = GLOB.clockwork_generals_invoked["sevtug"] <= world.time + var/nezbere_available = GLOB.clockwork_generals_invoked["nezbere"] <= world.time + var/nezcrentr_available = GLOB.clockwork_generals_invoked["nzcrentr"] <= world.time if(inathneq_available || sevtug_available || nezbere_available || nezcrentr_available) textlist += "Generals available:[inathneq_available ? "
INATH-NEQ":""][sevtug_available ? "
SEVTUG":""]\ [nezbere_available ? "
NEZBERE":""][nezcrentr_available ? "
NZCRENTR":""]

" diff --git a/code/_onclick/hud/alien.dm b/code/_onclick/hud/alien.dm index 0c5ca7782c..56f97a3f28 100644 --- a/code/_onclick/hud/alien.dm +++ b/code/_onclick/hud/alien.dm @@ -63,9 +63,8 @@ H.leap_icon.screen_loc = ui_alien_storage_r static_inventory += H.leap_icon - using = new/obj/screen/wheel/talk - using.screen_loc = ui_alien_talk_wheel - wheels += using + using = new/obj/screen/language_menu + using.screen_loc = ui_alien_language_menu static_inventory += using using = new /obj/screen/drop() diff --git a/code/_onclick/hud/alien_larva.dm b/code/_onclick/hud/alien_larva.dm index 34d64b1bc7..0f044a2bc7 100644 --- a/code/_onclick/hud/alien_larva.dm +++ b/code/_onclick/hud/alien_larva.dm @@ -18,9 +18,8 @@ pull_icon.screen_loc = ui_pull_resist hotkeybuttons += pull_icon - using = new/obj/screen/wheel/talk - using.screen_loc = ui_alien_talk_wheel - wheels += using + using = new/obj/screen/language_menu + using.screen_loc = ui_alien_language_menu static_inventory += using zone_select = new /obj/screen/zone_sel/alien() diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 8e02b2cbf7..b1b4a1cbb3 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -33,8 +33,6 @@ var/obj/screen/throw_icon var/obj/screen/module_store_icon - var/list/wheels = list() //list of the wheel screen objects - var/list/static_inventory = list() //the screen objects which are static var/list/toggleable_inventory = list() //the screen objects which can be hidden var/list/obj/screen/hotkeybuttons = list() //the buttons that can be used via hotkeys @@ -78,8 +76,6 @@ qdel(module_store_icon) module_store_icon = null - wheels = null //all wheels are also in static_inventory - if(static_inventory.len) for(var/thing in static_inventory) qdel(thing) @@ -136,15 +132,15 @@ /mob/proc/create_mob_hud() if(client && !hud_used) hud_used = new /datum/hud(src) + update_sight() //Version denotes which style should be displayed. blank or 0 means "next version" /datum/hud/proc/show_hud(version = 0,mob/viewmob) if(!ismob(mymob)) return 0 - if(!mymob.client) - return 0 - var/mob/screenmob = viewmob || mymob + if(!screenmob.client) + return 0 screenmob.client.screen = list() @@ -166,7 +162,7 @@ if(infodisplay.len) screenmob.client.screen += infodisplay - mymob.client.screen += hide_actions_toggle + screenmob.client.screen += hide_actions_toggle if(action_intent) action_intent.screen_loc = initial(action_intent.screen_loc) //Restore intent selection to the original position @@ -210,7 +206,7 @@ mymob.update_action_buttons(1) reorganize_alerts() mymob.reload_fullscreen() - create_parallax() + update_parallax_pref(screenmob) /datum/hud/human/show_hud(version = 0,mob/viewmob) @@ -227,16 +223,6 @@ /datum/hud/proc/persistent_inventory_update(mob/viewer) if(!mymob) return - var/mob/living/L = mymob - - var/mob/screenmob = viewer || L - - for(var/X in wheels) - var/obj/screen/wheel/W = X - if(W.toggled) - screenmob.client.screen |= W.buttons_list - else - screenmob.client.screen -= W.buttons_list //Triggered when F12 is pressed (Unless someone changed something in the DMF) /mob/verb/button_pressed_F12() diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 2654e9308e..f35579c16b 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -96,9 +96,8 @@ using.icon = ui_style static_inventory += using - using = new/obj/screen/wheel/talk + using = new/obj/screen/language_menu using.icon = ui_style - wheels += using static_inventory += using using = new /obj/screen/area_creator diff --git a/code/_onclick/hud/monkey.dm b/code/_onclick/hud/monkey.dm index 281ca46544..06dbf15cd7 100644 --- a/code/_onclick/hud/monkey.dm +++ b/code/_onclick/hud/monkey.dm @@ -15,9 +15,8 @@ using.screen_loc = ui_movi static_inventory += using - using = new/obj/screen/wheel/talk + using = new/obj/screen/language_menu using.icon = ui_style - wheels += using static_inventory += using using = new /obj/screen/drop() @@ -70,8 +69,7 @@ inv_box.name = "back" inv_box.icon = ui_style inv_box.icon_state = "back" - inv_box.icon_full = "template_small" - inv_box.screen_loc = ui_back + inv_box.screen_loc = ui_monkey_back inv_box.slot_id = slot_back static_inventory += inv_box @@ -124,7 +122,7 @@ if(hud_shown) if(M.back) - M.back.screen_loc = ui_back + M.back.screen_loc = ui_monkey_back M.client.screen += M.back if(M.wear_mask) M.wear_mask.screen_loc = ui_monkey_mask diff --git a/code/_onclick/hud/parallax.dm b/code/_onclick/hud/parallax.dm index 37266be949..df0894403c 100644 --- a/code/_onclick/hud/parallax.dm +++ b/code/_onclick/hud/parallax.dm @@ -11,9 +11,10 @@ var/parallax_layers_max = 3 var/parallax_animate_timer -/datum/hud/proc/create_parallax() - var/client/C = mymob.client - if (!apply_parallax_pref()) +/datum/hud/proc/create_parallax(mob/viewmob) + var/mob/screenmob = viewmob || mymob + var/client/C = screenmob.client + if (!apply_parallax_pref(viewmob)) //don't want shit computers to crash when specing someone with insane parallax, so use the viewer's pref return if(!length(C.parallax_layers_cached)) @@ -27,7 +28,10 @@ C.parallax_layers.len = C.parallax_layers_max C.screen |= (C.parallax_layers) - var/obj/screen/plane_master/PM = plane_masters["[PLANE_SPACE]"] + var/obj/screen/plane_master/PM = screenmob.hud_used.plane_masters["[PLANE_SPACE]"] + if(screenmob != mymob) + C.screen -= locate(/obj/screen/plane_master/parallax_white) in C.screen + C.screen += PM PM.color = list( 0, 0, 0, 0, 0, 0, 0, 0, @@ -37,15 +41,20 @@ ) -/datum/hud/proc/remove_parallax() - var/client/C = mymob.client +/datum/hud/proc/remove_parallax(mob/viewmob) + var/mob/screenmob = viewmob || mymob + var/client/C = screenmob.client C.screen -= (C.parallax_layers_cached) - var/obj/screen/plane_master/PM = plane_masters["[PLANE_SPACE]"] + var/obj/screen/plane_master/PM = screenmob.hud_used.plane_masters["[PLANE_SPACE]"] + if(screenmob != mymob) + C.screen -= locate(/obj/screen/plane_master/parallax_white) in C.screen + C.screen += PM PM.color = initial(PM.color) C.parallax_layers = null -/datum/hud/proc/apply_parallax_pref() - var/client/C = mymob.client +/datum/hud/proc/apply_parallax_pref(mob/viewmob) + var/mob/screenmob = viewmob || mymob + var/client/C = screenmob.client if(C.prefs) var/pref = C.prefs.parallax if (isnull(pref)) @@ -75,9 +84,9 @@ C.parallax_layers_max = 3 return TRUE -/datum/hud/proc/update_parallax_pref() - remove_parallax() - create_parallax() +/datum/hud/proc/update_parallax_pref(mob/viewmob) + remove_parallax(viewmob) + create_parallax(viewmob) // This sets which way the current shuttle is moving (returns true if the shuttle has stopped moving so the caller can append their animation) /datum/hud/proc/set_parallax_movedir(new_parallax_movedir, skip_windups) diff --git a/code/_onclick/hud/plane_master.dm b/code/_onclick/hud/plane_master.dm index 1a7450eb17..3db20f2099 100644 --- a/code/_onclick/hud/plane_master.dm +++ b/code/_onclick/hud/plane_master.dm @@ -3,6 +3,14 @@ icon_state = "blank" appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR blend_mode = BLEND_OVERLAY + var/show_alpha = 255 + var/hide_alpha = 0 + +/obj/screen/plane_master/proc/Show(override) + alpha = override || show_alpha + +/obj/screen/plane_master/proc/Hide(override) + alpha = override || hide_alpha //Why do plane masters need a backdrop sometimes? Read http://www.byond.com/forum/?post=2141928 //Trust me, you need one. Period. If you don't think you do, you're doing something extremely wrong. @@ -19,11 +27,6 @@ blend_mode = BLEND_MULTIPLY mouse_opacity = 0 -/obj/screen/plane_master/lighting/proc/params2color(params) - color = params2list(params) -/obj/screen/plane_master/lighting/proc/basecolor() - color = LIGHTING_BASE_MATRIX - /obj/screen/plane_master/parallax name = "parallax plane master" plane = PLANE_SPACE_PARALLAX diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index 8ac02fbe23..60df60b380 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -96,9 +96,8 @@ var/mob/living/silicon/robot/mymobR = mymob var/obj/screen/using - using = new/obj/screen/wheel/talk - using.screen_loc = ui_borg_talk_wheel - wheels += using + using = new/obj/screen/language_menu + using.screen_loc = ui_borg_language_menu static_inventory += using //Radio diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 4c5b0705ef..b9c791a168 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -84,6 +84,18 @@ return 1 create_area(usr) +/obj/screen/language_menu + name = "language menu" + icon = 'icons/mob/screen_midnight.dmi' + icon_state = "talk_wheel" + screen_loc = ui_language_menu + +/obj/screen/language_menu/Click() + var/mob/living/L = usr + if(!istype(L)) + return + L.open_language_menu(usr) + /obj/screen/inventory var/slot_id // The indentifier for the slot. It has nothing to do with ID cards. var/icon_empty // Icon when empty. For now used only by humans. @@ -529,145 +541,8 @@ name = "health doll" screen_loc = ui_healthdoll - - -/obj/screen/wheel - name = "wheel" - layer = HUD_LAYER - plane = HUD_PLANE - icon_state = "" - screen_loc = null //if you make a new wheel, remember to give it a screen_loc - var/list/buttons_names = list() //list of the names for each button, its length is the amount of buttons. - var/toggled = 0 //wheel is hidden/shown - var/wheel_buttons_type //the type of buttons used with this wheel. - var/list/buttons_list = list() - -/obj/screen/wheel/New() - ..() - build_options() - - -//we create the buttons for the wheel and place them in a square spiral fashion. -/obj/screen/wheel/proc/build_options() - var/obj/screen/wheel_button/close_wheel/CW = new () - buttons_list += CW //the close option - CW.wheel = src - - var/list/offset_x_list = list() - var/list/offset_y_list = list() - var/num = 1 - var/N = 1 - var/M = 0 - var/sign = -1 - my_loop: - while(offset_y_list.len < buttons_names.len) - for(var/i=1, i<=num, i++) - offset_y_list += N - offset_x_list += M - if(offset_y_list.len == buttons_names.len) - break my_loop - if(N != 0) - N = 0 - M = -sign - else - N = sign - M = 0 - sign = -sign - num++ - - var/screenx = 8 - var/screeny = 8 - for(var/i = 1, i <= buttons_names.len, i++) - var/obj/screen/wheel_button/WB = new wheel_buttons_type() - WB.wheel = src - buttons_list += WB - screenx += offset_x_list[i] - screeny += offset_y_list[i] - WB.screen_loc = "[screenx], [screeny]" - set_button(WB, i) - -/obj/screen/wheel/proc/set_button(obj/screen/wheel_button/WB, button_number) - WB.name = buttons_names[button_number] - return - -/obj/screen/wheel/Destroy() - for(var/obj/screen/S in buttons_list) - qdel(S) - return ..() - -/obj/screen/wheel/Click() - if(world.time <= usr.next_move) - return - if(usr.stat) - return - if(isliving(usr)) - var/mob/living/L = usr - if(toggled) - L.client.screen -= buttons_list - else - L.client.screen |= buttons_list - toggled = !toggled - - -/obj/screen/wheel/talk - name = "talk wheel" - icon_state = "talk_wheel" - screen_loc = "11:6,2:-11" - wheel_buttons_type = /obj/screen/wheel_button/talk - buttons_names = list("help","hello","bye","stop","thanks","come","out", "yes", "no") - var/list/word_messages = list(list("Help!","Help me!"), list("Hello.", "Hi."), list("Bye.", "Goodbye."),\ - list("Stop!", "Halt!"), list("Thanks.", "Thanks!", "Thank you."), \ - list("Come.", "Follow me."), list("Out!", "Go away!", "Get out!"), \ - list("Yes.", "Affirmative."), list("No.", "Negative")) - -/obj/screen/wheel/talk/set_button(obj/screen/wheel_button/WB, button_number) - ..() - var/obj/screen/wheel_button/talk/T = WB //we already know what type the button is exactly. - T.icon_state = "talk_[T.name]" - T.word_messages = word_messages[button_number] - - -/obj/screen/wheel_button - name = "default wheel button" - screen_loc = "8,8" - layer = HUD_LAYER - plane = HUD_PLANE - mouse_opacity = 2 - var/obj/screen/wheel/wheel - -/obj/screen/wheel_button/Destroy() - wheel = null - return ..() - -/obj/screen/wheel_button/close_wheel - name = "close wheel" - icon_state = "x3" - -/obj/screen/wheel_button/close_wheel/Click() - if(isliving(usr)) - var/mob/living/L = usr - L.client.screen -= wheel.buttons_list - wheel.toggled = !wheel.toggled - - -/obj/screen/wheel_button/talk - name = "talk option" - icon_state = "talk_help" - var/talk_cooldown = 0 - var/list/word_messages = list() - -/obj/screen/wheel_button/talk/Click(location, control,params) - if(isliving(usr)) - var/mob/living/L = usr - if(L.stat) - return - - if(word_messages.len && talk_cooldown < world.time) - talk_cooldown = world.time + 10 - L.say(pick(word_messages)) - /obj/screen/splash - icon = 'config/title_screens/images/title1.dmi' + icon = 'config/title_screens/images/blank.png' icon_state = "" screen_loc = "1,1" layer = SPLASHSCREEN_LAYER @@ -679,16 +554,23 @@ if(!visible) alpha = 0 - if(SStitle.title_screen) - icon = SStitle.title_screen.icon + + if(!use_previous_title) + if(SStitle.icon) + icon = SStitle.icon + else + if(!SStitle.previous_icon) + qdel(src) + return + icon = SStitle.previous_icon holder.screen += src - if(use_previous_title && !SSmapping.previous_map_config.defaulted) - holder.screen -= src //Yell at Cyberboss to finish this ..() /obj/screen/splash/proc/Fade(out, qdel_after = TRUE) + if(QDELETED(src)) + return if(out) animate(src, alpha = 0, time = 30) else @@ -701,4 +583,4 @@ if(holder) holder.screen -= src holder = null - return ..() \ No newline at end of file + return ..() diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index da72609cb0..9754901d96 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -1,4 +1,12 @@ +/proc/melee_item_attack_chain(mob/user, obj/item/I, atom/target, params) + if(I.pre_attackby(target, user, params)) + // Return 1 in attackby() to prevent afterattack() effects (when safely moving items for example) + var/resolved = target.attackby(I,user,params) + if(!resolved && target && I) + I.afterattack(target, user, 1, params) // 1: clicking something Adjacent + + // Called when the item is in the active hand, and clicked; alternately, there is an 'activate held object' verb or you can hit pagedown. /obj/item/proc/attack_self(mob/user) return diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm index a0e4dff6bf..f9b0038918 100644 --- a/code/_onclick/observer.dm +++ b/code/_onclick/observer.dm @@ -26,6 +26,9 @@ if(modifiers["shift"] && modifiers["middle"]) ShiftMiddleClickOn(A) return + if(modifiers["shift"] && modifiers["ctrl"]) + CtrlShiftClickOn(A) + return if(modifiers["middle"]) MiddleClickOn(A) return diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index 21ebcdbded..b9df144ace 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -87,22 +87,23 @@ if(is_muzzled()) return var/mob/living/carbon/ML = A - var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg") - var/obj/item/bodypart/affecting = null - if(ishuman(ML)) - var/mob/living/carbon/human/H = ML - affecting = H.get_bodypart(ran_zone(dam_zone)) - var/armor = ML.run_armor_check(affecting, "melee") - if(prob(75)) - ML.apply_damage(rand(1,3), BRUTE, affecting, armor) - ML.visible_message("[name] bites [ML]!", \ - "[name] bites [ML]!") - if(armor >= 2) - return - for(var/datum/disease/D in viruses) - ML.ForceContractDisease(D) - else - ML.visible_message("[src] has attempted to bite [ML]!") + if(istype(ML)) + var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg") + var/obj/item/bodypart/affecting = null + if(ishuman(ML)) + var/mob/living/carbon/human/H = ML + affecting = H.get_bodypart(ran_zone(dam_zone)) + var/armor = ML.run_armor_check(affecting, "melee") + if(prob(75)) + ML.apply_damage(rand(1,3), BRUTE, affecting, armor) + ML.visible_message("[name] bites [ML]!", \ + "[name] bites [ML]!") + if(armor >= 2) + return + for(var/datum/disease/D in viruses) + ML.ForceContractDisease(D) + else + ML.visible_message("[src] has attempted to bite [ML]!") /* Aliens diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index e2b4ab398a..90b3983d82 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -3,19 +3,35 @@ This needs more thinking out, but I might as well. */ -var/const/tk_maxrange = 15 /* Telekinetic attack: By default, emulate the user's unarmed attack */ + /atom/proc/attack_tk(mob/user) if(user.stat) return + new /obj/effect/overlay/temp/telekinesis(loc) user.UnarmedAttack(src,0) // attack_hand, attack_paw, etc return +/obj/attack_tk(mob/user) + if(user.stat) + return + + var/obj/item/tk_grab/O = new(src) + O.tk_user = user + if(O.focus_object(src)) + user.put_in_active_hand(O) + else + qdel(O) + ..() + +/mob/attack_tk(mob/user) + return + /* This is similar to item attack_self, but applies to anything that you can grab with a telekinetic grab. @@ -23,37 +39,13 @@ var/const/tk_maxrange = 15 It is used for manipulating things at range, for example, opening and closing closets. There are not a lot of defaults at this time, add more where appropriate. */ + /atom/proc/attack_self_tk(mob/user) return /obj/item/attack_self_tk(mob/user) attack_self(user) -/obj/attack_tk(mob/user) - if(user.stat) - return - if(anchored) - ..() - return - - var/obj/item/tk_grab/O = new(src) - user.put_in_active_hand(O) - O.host = user - O.focus_object(src) - return - -/obj/item/attack_tk(mob/user) - if(user.stat) - return - var/obj/item/tk_grab/O = new(src) - user.put_in_active_hand(O) - O.host = user - O.focus_object(src) - return - - -/mob/attack_tk(mob/user) - return // needs more thinking about /* TK Grab Item (the workhorse of old TK) @@ -74,10 +66,20 @@ var/const/tk_maxrange = 15 layer = ABOVE_HUD_LAYER plane = ABOVE_HUD_PLANE - var/last_throw = 0 var/atom/movable/focus = null - var/mob/living/host = null + var/mob/living/carbon/tk_user = null +/obj/item/tk_grab/Initialize() + ..() + START_PROCESSING(SSfastprocess, src) + +/obj/item/tk_grab/Destroy() + STOP_PROCESSING(SSfastprocess, src) + return ..() + +/obj/item/tk_grab/process() + if(check_if_focusable(focus)) //if somebody grabs your thing, no waiting for them to put it down and hitting them again. + update_icon() /obj/item/tk_grab/dropped(mob/user) if(focus && user && loc != user && loc != user.loc) // drop_item() gets called when you tk-attack a table/closet with an item @@ -107,111 +109,73 @@ var/const/tk_maxrange = 15 /obj/item/tk_grab/afterattack(atom/target, mob/living/carbon/user, proximity, params)//TODO: go over this if(!target || !user) return - if(last_throw+3 > world.time) - return - if(!host || host != user) - qdel(src) - return - if(!(user.dna.check_mutation(TK))) - qdel(src) - return - if(isobj(target) && !isturf(target.loc)) - return - - if(!tkMaxRangeCheck(user, target, focus)) - return if(!focus) - focus_object(target, user) + focus_object(target) return - - if(focus.anchored || !isturf(focus.loc)) - qdel(src) + else if(!check_if_focusable(focus)) return if(target == focus) target.attack_self_tk(user) - return // todo: something like attack_self not laden with assumptions inherent to attack_self + update_icon() + return if(!isturf(target) && istype(focus,/obj/item) && target.Adjacent(focus)) - var/obj/item/I = focus - var/resolved = target.attackby(I, user, params) - if(!resolved && target && I) - I.afterattack(target,user,1) // for splashing with beakers - update_icon() + apply_focus_overlay() + melee_item_attack_chain(tk_user, focus, target, params) //isn't copying the attack chain fun. we should do it more often. + if(check_if_focusable(focus)) + focus.do_attack_animation(target, null, focus) else apply_focus_overlay() focus.throw_at(target, 10, 1,user) - last_throw = world.time - user.changeNext_move(CLICK_CD_MELEE) - update_icon() + user.changeNext_move(CLICK_CD_MELEE) + update_icon() -/proc/tkMaxRangeCheck(mob/user, atom/target, atom/focus) +/proc/tkMaxRangeCheck(mob/user, atom/target) var/d = get_dist(user, target) - if(focus) - d = max(d,get_dist(user,focus)) // whichever is further - if(d > tk_maxrange) + if(d > TK_MAXRANGE) to_chat(user, "Your mind won't reach that far.") - return 0 - return 1 + return + return TRUE /obj/item/tk_grab/attack(mob/living/M, mob/living/user, def_zone) return - -/obj/item/tk_grab/proc/focus_object(obj/target, mob/living/user) - if(!isobj(target)) - return//Cant throw non objects atm might let it do mobs later - if(target.anchored || !isturf(target.loc)) - qdel(src) +/obj/item/tk_grab/proc/focus_object(obj/target) + if(!check_if_focusable(target)) return focus = target update_icon() apply_focus_overlay() - return + return TRUE +/obj/item/tk_grab/proc/check_if_focusable(obj/target) + if(!tk_user || !istype(tk_user) || QDELETED(target) || !istype(target) || !tk_user.dna.check_mutation(TK)) + qdel(src) + return + if(!tkMaxRangeCheck(tk_user, target) || target.anchored || !isturf(target.loc)) + qdel(src) + return + return TRUE /obj/item/tk_grab/proc/apply_focus_overlay() if(!focus) return new /obj/effect/overlay/temp/telekinesis(get_turf(focus)) - /obj/item/tk_grab/update_icon() cut_overlays() - if(focus && focus.icon && focus.icon_state) - add_overlay(icon(focus.icon,focus.icon_state)) - return + if(focus) + var/old_layer = focus.layer + var/old_plane = focus.plane + focus.layer = layer+0.01 + focus.plane = ABOVE_HUD_PLANE + add_overlay(focus) //this is kind of ick, but it's better than using icon() + focus.layer = old_layer + focus.plane = old_plane /obj/item/tk_grab/suicide_act(mob/user) user.visible_message("[user] is using [user.p_their()] telekinesis to choke [user.p_them()]self! It looks like [user.p_theyre()] trying to commit suicide!") return (OXYLOSS) - -/*Not quite done likely needs to use something thats not get_step_to -/obj/item/tk_grab/proc/check_path() - var/turf/ref = get_turf(src.loc) - var/turf/target = get_turf(focus.loc) - if(!ref || !target) - return 0 - var/distance = get_dist(ref, target) - if(distance >= 10) - return 0 - for(var/i = 1 to distance) - ref = get_step_to(ref, target, 0) - if(ref != target) - return 0 - return 1 -*/ - -//equip_to_slot_or_del(obj/item/W, slot, qdel_on_fail = 1) -/* - if(istype(user, /mob/living/carbon)) - if(user:mutations & TK && get_dist(source, user) <= 7) - if(user:get_active_hand()) - return 0 - var/X = source:x - var/Y = source:y - var/Z = source:z - -*/ diff --git a/code/citadel/_cit_helpers.dm b/code/citadel/_cit_helpers.dm index 2aed219978..85bb754f06 100644 --- a/code/citadel/_cit_helpers.dm +++ b/code/citadel/_cit_helpers.dm @@ -25,45 +25,45 @@ proc/get_racelist(var/mob/user)//This proc returns a list of species that 'user' var/datum/species/S = new spath() var/list/wlist = S.whitelist if(S.whitelisted && (wlist.Find(user.ckey) || wlist.Find(user.key) || user.client.holder)) //If your ckey is on the species whitelist or you're an admin: - whitelisted_species_list[S.id] = S.type //Add the species to their available species list. + GLOB.whitelisted_species_list[S.id] = S.type //Add the species to their available species list. else if(!S.whitelisted && S.roundstart) //Normal roundstart species will be handled here. - whitelisted_species_list[S.id] = S.type + GLOB.whitelisted_species_list[S.id] = S.type - return whitelisted_species_list + return GLOB.whitelisted_species_list //Mammal Species -var/global/list/mam_body_markings_list = list() -var/global/list/mam_ears_list = list() -var/global/list/mam_tails_list = list() -var/global/list/mam_tails_animated_list = list() -var/global/list/taur_list = list() +GLOBAL_LIST_EMPTY(mam_body_markings_list) +GLOBAL_LIST_EMPTY(mam_ears_list) +GLOBAL_LIST_EMPTY(mam_tails_list) +GLOBAL_LIST_EMPTY(mam_tails_animated_list) +GLOBAL_LIST_EMPTY(taur_list) //Exotic Species -var/global/list/exotic_tails_list = list() -var/global/list/exotic_tails_animated_list = list() -var/global/list/exotic_ears_list = list() -var/global/list/exotic_head_list = list() -var/global/list/exotic_back_list = list() +GLOBAL_LIST_EMPTY(exotic_tails_list) +GLOBAL_LIST_EMPTY(exotic_tails_animated_list) +GLOBAL_LIST_EMPTY(exotic_ears_list) +GLOBAL_LIST_EMPTY(exotic_head_list) +GLOBAL_LIST_EMPTY(exotic_back_list) //Xenomorph Species -var/global/list/xeno_head_list = list() //I forgot the ' = list()' part for the longest time and couldn't figure out what was wrong. *facepalm -var/global/list/xeno_tail_list = list() -var/global/list/xeno_dorsal_list = list() +GLOBAL_LIST_EMPTY(xeno_head_list) +GLOBAL_LIST_EMPTY(xeno_tail_list) +GLOBAL_LIST_EMPTY(xeno_dorsal_list) //Genitals and Arousal Lists -var/global/list/cock_shapes_list = list()//global_lists.dm for the list initializations -var/global/list/breasts_size_list = list() -var/global/list/cum_into_containers_list = list(/obj/item/weapon/reagent_containers/food/snacks/pie) -var/global/list/dick_nouns = list("dick","cock","member","shaft") -var/global/list/cum_id_list = list("semen") -var/global/list/milk_id_list = list("milk") +GLOBAL_LIST_EMPTY(cock_shapes_list)//global_lists.dm for the list initializations //Now also _DATASTRUCTURES globals.dm +GLOBAL_LIST_EMPTY(breasts_size_list) +GLOBAL_LIST_INIT(cum_into_containers_list, /obj/item/weapon/reagent_containers/food/snacks/pie) //Yer fuggin snowflake name list jfc +GLOBAL_LIST_INIT(dick_nouns, list("dick","cock","member","shaft")) +GLOBAL_LIST_INIT(cum_id_list,"semen") +GLOBAL_LIST_INIT(milk_id_list,"milk") //mentor stuff -var/list/mentors = list() +GLOBAL_LIST_EMPTY(mentors) //Looc stuff -var/global/looc_allowed = 1 -var/global/dlooc_allowed = 1 +GLOBAL_VAR_INIT(looc_allowed, 1) +GLOBAL_VAR_INIT(dlooc_allowed, 1) /client/proc/reload_mentors() set name = "Reload Mentors" @@ -103,19 +103,19 @@ var/global/dlooc_allowed = 1 /proc/toggle_looc(toggle = null) if(toggle != null) //if we're specifically en/disabling ooc - if(toggle != looc_allowed) - looc_allowed = toggle + if(toggle != GLOB.looc_allowed) + GLOB.looc_allowed = toggle else return else //otherwise just toggle it - looc_allowed = !looc_allowed - world << "The LOOC channel has been globally [looc_allowed ? "enabled" : "disabled"]." + GLOB.looc_allowed = !GLOB.looc_allowed + world << "The LOOC channel has been globally [GLOB.looc_allowed ? "enabled" : "disabled"]." /datum/admins/proc/toggleloocdead() set category = "Server" set desc="Toggle dis bitch" set name="Toggle Dead LOOC" - dlooc_allowed = !( dlooc_allowed ) + GLOB.dlooc_allowed = !( GLOB.dlooc_allowed ) log_admin("[key_name(usr)] toggled Dead LOOC.") message_admins("[key_name_admin(usr)] toggled Dead LOOC.") @@ -185,7 +185,7 @@ var/global/dlooc_allowed = 1 log_admin("[src] gave everyone genitals.") message_admins("[src] gave everyone genitals.") - for(var/mob/living/carbon/human/H in mob_list) + for(var/mob/living/carbon/human/H in GLOB.mob_list) if(H.gender == MALE) H.give_penis() H.give_balls() @@ -201,7 +201,7 @@ var/global/dlooc_allowed = 1 log_admin("[src] turned everyone into mammals.") message_admins("[src] turned everyone into mammals.") - for(var/mob/living/carbon/human/H in mob_list) + for(var/mob/living/carbon/human/H in GLOB.mob_list) if(!H.dna) continue var/datum/dna/hdna = H.dna diff --git a/code/citadel/cit_arousal.dm b/code/citadel/cit_arousal.dm index dec4b4fd24..3d998d971c 100644 --- a/code/citadel/cit_arousal.dm +++ b/code/citadel/cit_arousal.dm @@ -36,7 +36,7 @@ if(canbearoused && dna) var/datum/species/S S = dna.species - if(S && SSmob.times_fired%36==2 && getArousalLoss() < max_arousal)//Totally stolen from breathing code. Do this every 36 ticks. + if(S && SSmobs.times_fired%36==2 && getArousalLoss() < max_arousal)//Totally stolen from breathing code. Do this every 36 ticks. adjustArousalLoss(arousal_rate * S.arousal_gain_rate) if(dna.features["exhibitionist"]) var/amt_nude = 0 @@ -255,8 +255,8 @@ finished = 1 else//not into a container - src.visible_message("[src] starts [pick("jerking off","stroking")] their [pick(dick_nouns)].", \ - "You start jerking off your [pick(dick_nouns)].", \ + src.visible_message("[src] starts [pick("jerking off","stroking")] their [pick(GLOB.dick_nouns)].", \ + "You start jerking off your [pick(GLOB.dick_nouns)].", \ "You start masturbating.") if(do_after(src, mb_time, target = src)) if(total_cum > 5) diff --git a/code/citadel/organs/genitals.dm b/code/citadel/organs/genitals.dm index d5d1e8c541..71078e382b 100644 --- a/code/citadel/organs/genitals.dm +++ b/code/citadel/organs/genitals.dm @@ -211,7 +211,7 @@ var/datum/sprite_accessory/S switch(G.type) if(/obj/item/organ/genital/penis) - S = cock_shapes_list[G.shape] + S = GLOB.cock_shapes_list[G.shape] size = G.size if(!S || S.icon_state == "none") diff --git a/code/controllers/admin.dm b/code/controllers/admin.dm index d859a62391..99f6a148a4 100644 --- a/code/controllers/admin.dm +++ b/code/controllers/admin.dm @@ -43,9 +43,9 @@ switch(controller) if("Master") Recreate_MC() - feedback_add_details("admin_verb","RMC") + feedback_add_details("admin_verb","Restart Master Controller") if("Failsafe") new /datum/controller/failsafe() - feedback_add_details("admin_verb","RFailsafe") + feedback_add_details("admin_verb","Restart Failsafe Controller") message_admins("Admin [key_name_admin(usr)] has restarted the [controller] controller.") diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 6df283d8d6..95fc6aa622 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -5,10 +5,10 @@ #define SECURITY_HAS_MAINT_ACCESS 2 #define EVERYONE_HAS_MAINT_ACCESS 4 -/datum/configuration/vv_get_var(var_name) - var/static/list/banned_views = list("autoadmin", "autoadmin_rank") - if(var_name in banned_views) - return debug_variable(var_name, "SECRET", 0, src) +/datum/configuration/can_vv_get(var_name) + var/static/list/banned_gets = list("autoadmin", "autoadmin_rank") + if (var_name in banned_gets) + return FALSE return ..() /datum/configuration/vv_edit_var(var_name, var_value) @@ -267,7 +267,7 @@ if(M.config_tag) if(!(M.config_tag in modes)) // ensure each mode is added only once - diary << "Adding game mode [M.name] ([M.config_tag]) to configuration." + GLOB.diary << "Adding game mode [M.name] ([M.config_tag]) to configuration." modes += M.config_tag mode_names[M.config_tag] = M.name probabilities[M.config_tag] = M.probability @@ -391,7 +391,7 @@ if("guest_jobban") config.guest_jobban = 1 if("guest_ban") - guests_allowed = 0 + GLOB.guests_allowed = 0 if("usewhitelist") config.usewhitelist = TRUE if("allow_metadata") @@ -421,9 +421,9 @@ if("automute_on") automute_on = 1 if("comms_key") - global.comms_key = value + GLOB.comms_key = value if(value != "default_pwd" && length(value) > 6) //It's the default value or less than 6 characters long, warn badmins - global.comms_allowed = 1 + GLOB.comms_allowed = 1 if("cross_server_address") cross_address = value if(value != "byond:\\address:port") @@ -437,9 +437,9 @@ if(value != "byond:\\address:port") allow_panic_bunker_bounce = 1 if("medal_hub_address") - global.medal_hub = value + GLOB.medal_hub = value if("medal_hub_password") - global.medal_pass = value + GLOB.medal_pass = value if("show_irc_name") config.showircname = 1 if("see_own_notes") @@ -480,9 +480,9 @@ if("log_runtimes") log_runtimes = TRUE var/newlog = file("data/logs/runtimes/runtime-[time2text(world.realtime, "YYYY-MM-DD")].log") - if(runtime_diary != newlog) + if(GLOB.runtime_diary != newlog) world.log << "Now logging runtimes to data/logs/runtimes/runtime-[time2text(world.realtime, "YYYY-MM-DD")].log" - runtime_diary = newlog + GLOB.runtime_diary = newlog if("autoconvert_notes") config.autoconvert_notes = 1 if("allow_webclient") @@ -526,7 +526,7 @@ if("error_msg_delay") error_msg_delay = text2num(value) else - diary << "Unknown setting in configuration: '[name]'" + GLOB.diary << "Unknown setting in configuration: '[name]'" else if(type == "game_options") switch(name) @@ -589,13 +589,13 @@ if(mode_name in config.modes) config.continuous[mode_name] = 1 else - diary << "Unknown continuous configuration definition: [mode_name]." + GLOB.diary << "Unknown continuous configuration definition: [mode_name]." if("midround_antag") var/mode_name = lowertext(value) if(mode_name in config.modes) config.midround_antag[mode_name] = 1 else - diary << "Unknown midround antagonist configuration definition: [mode_name]." + GLOB.diary << "Unknown midround antagonist configuration definition: [mode_name]." if("midround_antag_time_check") config.midround_antag_time_check = text2num(value) if("midround_antag_life_check") @@ -611,9 +611,9 @@ if(mode_name in config.modes) config.min_pop[mode_name] = text2num(mode_value) else - diary << "Unknown minimum population configuration definition: [mode_name]." + GLOB.diary << "Unknown minimum population configuration definition: [mode_name]." else - diary << "Incorrect minimum population configuration definition: [mode_name] [mode_value]." + GLOB.diary << "Incorrect minimum population configuration definition: [mode_name] [mode_value]." if("max_pop") var/pop_pos = findtext(value, " ") var/mode_name = null @@ -625,9 +625,9 @@ if(mode_name in config.modes) config.max_pop[mode_name] = text2num(mode_value) else - diary << "Unknown maximum population configuration definition: [mode_name]." + GLOB.diary << "Unknown maximum population configuration definition: [mode_name]." else - diary << "Incorrect maximum population configuration definition: [mode_name] [mode_value]." + GLOB.diary << "Incorrect maximum population configuration definition: [mode_name] [mode_value]." if("shuttle_refuel_delay") config.shuttle_refuel_delay = text2num(value) if("show_game_type_odds") @@ -655,9 +655,9 @@ if(prob_name in config.modes) config.probabilities[prob_name] = text2num(prob_value) else - diary << "Unknown game mode probability configuration definition: [prob_name]." + GLOB.diary << "Unknown game mode probability configuration definition: [prob_name]." else - diary << "Incorrect probability configuration definition: [prob_name] [prob_value]." + GLOB.diary << "Incorrect probability configuration definition: [prob_name] [prob_value]." if("protect_roles_from_antagonist") config.protect_roles_from_antagonist = 1 @@ -691,10 +691,6 @@ config.forbid_peaceborg = 1 if("silent_ai") config.silent_ai = 1 - if ("mentor_mobname_only") - config.mentors_mobname_only = 1 - if ("mentor_legacy_system") - config.mentor_legacy_system = 1 if("silent_borg") config.silent_borg = 1 if("sandbox_autoclose") @@ -708,7 +704,7 @@ // Value is in the form "LAWID,NUMBER" var/list/L = splittext(value, ",") if(L.len != 2) - diary << "Invalid LAW_WEIGHT: " + t + GLOB.diary << "Invalid LAW_WEIGHT: " + t continue var/lawid = L[1] var/weight = text2num(L[2]) @@ -720,10 +716,10 @@ config.mutant_races = 1 if("roundstart_races") var/race_id = lowertext(value) - for(var/species_id in species_list) + for(var/species_id in GLOB.species_list) if(species_id == race_id) - roundstart_races += species_list[species_id] - roundstart_species[species_id] = species_list[species_id] + roundstart_races += GLOB.species_list[species_id] + GLOB.roundstart_species[species_id] = GLOB.species_list[species_id] if("join_with_mutant_humans") config.mutant_humans = 1 if("assistant_cap") @@ -751,17 +747,21 @@ if (BombCap < 4) BombCap = 4 - MAX_EX_DEVESTATION_RANGE = round(BombCap/4) - MAX_EX_HEAVY_RANGE = round(BombCap/2) - MAX_EX_LIGHT_RANGE = BombCap - MAX_EX_FLASH_RANGE = BombCap - MAX_EX_FLAME_RANGE = BombCap + GLOB.MAX_EX_DEVESTATION_RANGE = round(BombCap/4) + GLOB.MAX_EX_HEAVY_RANGE = round(BombCap/2) + GLOB.MAX_EX_LIGHT_RANGE = BombCap + GLOB.MAX_EX_FLASH_RANGE = BombCap + GLOB.MAX_EX_FLAME_RANGE = BombCap if("arrivals_shuttle_dock_window") config.arrivals_shuttle_dock_window = max(PARALLAX_LOOP_TIME, text2num(value)) if("arrivals_shuttle_require_safe_latejoin") config.arrivals_shuttle_require_safe_latejoin = text2num(value) + if ("mentor_mobname_only") + config.mentors_mobname_only = 1 + if ("mentor_legacy_system") + config.mentor_legacy_system = 1 else - diary << "Unknown setting in configuration: '[name]'" + GLOB.diary << "Unknown setting in configuration: '[name]'" fps = round(fps) if(fps <= 0) @@ -815,7 +815,7 @@ config.maplist[currentmap.map_name] = currentmap currentmap = null else - diary << "Unknown command in map vote config: '[command]'" + GLOB.diary << "Unknown command in map vote config: '[command]'" /datum/configuration/proc/loadsql(filename) @@ -847,19 +847,19 @@ if("sql_enabled") config.sql_enabled = 1 if("address") - sqladdress = value + GLOB.sqladdress = value if("port") - sqlport = value + GLOB.sqlport = value if("feedback_database") - sqlfdbkdb = value + GLOB.sqlfdbkdb = value if("feedback_login") - sqlfdbklogin = value + GLOB.sqlfdbklogin = value if("feedback_password") - sqlfdbkpass = value + GLOB.sqlfdbkpass = value if("feedback_tableprefix") - sqlfdbktableprefix = value + GLOB.sqlfdbktableprefix = value else - diary << "Unknown setting in configuration: '[name]'" + GLOB.diary << "Unknown setting in configuration: '[name]'" /datum/configuration/proc/pick_mode(mode_name) // I wish I didn't have to instance the game modes in order to look up @@ -893,7 +893,7 @@ /datum/configuration/proc/get_runnable_midround_modes(crew) var/list/datum/game_mode/runnable_modes = new - for(var/T in (gamemode_cache - ticker.mode.type)) + for(var/T in (gamemode_cache - SSticker.mode.type)) var/datum/game_mode/M = new T() if(!(M.config_tag in modes)) qdel(M) diff --git a/code/controllers/failsafe.dm b/code/controllers/failsafe.dm index f2bbf212df..d5298f7dde 100644 --- a/code/controllers/failsafe.dm +++ b/code/controllers/failsafe.dm @@ -4,7 +4,7 @@ * Pretty much pokes the MC to make sure it's still alive. **/ -var/datum/controller/failsafe/Failsafe +GLOBAL_REAL(Failsafe, /datum/controller/failsafe) /datum/controller/failsafe // This thing pretty much just keeps poking the master controller name = "Failsafe" @@ -56,23 +56,23 @@ var/datum/controller/failsafe/Failsafe if(4,5) --defcon if(3) - to_chat(admins, "Notice: DEFCON [defcon_pretty()]. The Master Controller has not fired in the last [(5-defcon) * processing_interval] ticks.") + to_chat(GLOB.admins, "Notice: DEFCON [defcon_pretty()]. The Master Controller has not fired in the last [(5-defcon) * processing_interval] ticks.") --defcon if(2) - to_chat(admins, "Warning: DEFCON [defcon_pretty()]. The Master Controller has not fired in the last [(5-defcon) * processing_interval] ticks. Automatic restart in [processing_interval] ticks.") + to_chat(GLOB.admins, "Warning: DEFCON [defcon_pretty()]. The Master Controller has not fired in the last [(5-defcon) * processing_interval] ticks. Automatic restart in [processing_interval] ticks.") --defcon if(1) - to_chat(admins, "Warning: DEFCON [defcon_pretty()]. The Master Controller has still not fired within the last [(5-defcon) * processing_interval] ticks. Killing and restarting...") + to_chat(GLOB.admins, "Warning: DEFCON [defcon_pretty()]. The Master Controller has still not fired within the last [(5-defcon) * processing_interval] ticks. Killing and restarting...") --defcon var/rtn = Recreate_MC() if(rtn > 0) defcon = 4 master_iteration = 0 - to_chat(admins, "MC restarted successfully") + to_chat(GLOB.admins, "MC restarted successfully") else if(rtn < 0) log_game("FailSafe: Could not restart MC, runtime encountered. Entering defcon 0") - to_chat(admins, "ERROR: DEFCON [defcon_pretty()]. Could not restart MC, runtime encountered. I will silently keep retrying.") + to_chat(GLOB.admins, "ERROR: DEFCON [defcon_pretty()]. Could not restart MC, runtime encountered. I will silently keep retrying.") //if the return number was 0, it just means the mc was restarted too recently, and it just needs some time before we try again //no need to handle that specially when defcon 0 can handle it if(0) //DEFCON 0! (mc failed to restart) @@ -80,7 +80,7 @@ var/datum/controller/failsafe/Failsafe if(rtn > 0) defcon = 4 master_iteration = 0 - to_chat(admins, "MC restarted successfully") + to_chat(GLOB.admins, "MC restarted successfully") else defcon = min(defcon + 1,5) master_iteration = Master.iteration diff --git a/code/controllers/globals.dm b/code/controllers/globals.dm new file mode 100644 index 0000000000..a1a0a3f838 --- /dev/null +++ b/code/controllers/globals.dm @@ -0,0 +1,62 @@ +GLOBAL_REAL(GLOB, /datum/controller/global_vars) + +/datum/controller/global_vars + name = "Global Variables" + + var/list/gvars_datum_protected_varlist + var/list/gvars_datum_in_built_vars + var/list/gvars_datum_init_order + +/datum/controller/global_vars/New() + if(GLOB) + CRASH("Multiple instances of global variable controller created") + GLOB = src + + var/datum/controller/exclude_these = new + gvars_datum_in_built_vars = exclude_these.vars + list("gvars_datum_protected_varlist", "gvars_datum_in_built_vars", "gvars_datum_init_order") + qdel(exclude_these) + + Initialize() + +/datum/controller/global_vars/Destroy(force) + if(!force) + return QDEL_HINT_LETMELIVE + + stack_trace("Some fucker deleted the global holder!") + + QDEL_NULL(statclick) + gvars_datum_protected_varlist.Cut() + gvars_datum_in_built_vars.Cut() + + GLOB = null + + return ..() + +/datum/controller/global_vars/stat_entry() + if(!statclick) + statclick = new/obj/effect/statclick/debug(null, "Initializing...", src) + + var/static/num_globals + if(!num_globals) + num_globals = vars.len - gvars_datum_in_built_vars.len + stat("Globals:", statclick.update("Count: [num_globals]")) + +/datum/controller/global_vars/can_vv_get(var_name) + if(var_name in gvars_datum_protected_varlist) + return FALSE + return ..() + +/datum/controller/global_vars/vv_edit_var(var_name, var_value) + if((var_name in gvars_datum_protected_varlist)) + return FALSE + return ..() + +/datum/controller/global_vars/Initialize() + gvars_datum_init_order = list() + gvars_datum_protected_varlist = list("gvars_datum_protected_varlist") + for(var/I in vars - gvars_datum_in_built_vars) + var/start_tick = world.time + call(src, "InitGlobal[I]")() + var/end_tick = world.time + if(end_tick - start_tick) + warning("Global [I] slept during initialization!") diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 636e1d2f86..259524bb0c 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -6,15 +6,18 @@ * Odds are, there is a reason * **/ -var/datum/controller/master/Master = new() -var/MC_restart_clear = 0 -var/MC_restart_timeout = 0 -var/MC_restart_count = 0 + +//This is the ABSOLUTE ONLY THING that should init globally like this +GLOBAL_REAL(Master, /datum/controller/master) = new + +GLOBAL_VAR_INIT(MC_restart_clear, 0) +GLOBAL_VAR_INIT(MC_restart_timeout, 0) +GLOBAL_VAR_INIT(MC_restart_count, 0) //current tick limit, assigned by the queue controller before running a subsystem. //used by check_tick as well so that the procs subsystems call can obey that SS's tick limits -var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING +GLOBAL_VAR_INIT(CURRENT_TICKLIMIT, TICK_LIMIT_RUNNING) /datum/controller/master name = "Master" @@ -62,6 +65,9 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING else init_subtypes(/datum/controller/subsystem, subsystems) Master = src + + if(!GLOB) + new /datum/controller/global_vars /datum/controller/master/Destroy() ..() @@ -77,14 +83,14 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING // -1 if we encountered a runtime trying to recreate it /proc/Recreate_MC() . = -1 //so if we runtime, things know we failed - if (world.time < MC_restart_timeout) + if (world.time < GLOB.MC_restart_timeout) return 0 - if (world.time < MC_restart_clear) - MC_restart_count *= 0.5 + if (world.time < GLOB.MC_restart_clear) + GLOB.MC_restart_count *= 0.5 - var/delay = 50 * ++MC_restart_count - MC_restart_timeout = world.time + delay - MC_restart_clear = world.time + (delay * 2) + var/delay = 50 * ++GLOB.MC_restart_count + GLOB.MC_restart_timeout = world.time + delay + GLOB.MC_restart_clear = world.time + (delay * 2) Master.processing = 0 //stop ticking this one try new/datum/controller/master() @@ -107,7 +113,25 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING else msg += "\t [varname] = [varval]\n" log_world(msg) + + var/datum/controller/subsystem/BadBoy = Master.last_type_processed + var/FireHim = FALSE + if(istype(BadBoy)) + msg = null + switch(++BadBoy.failure_strikes) + if(2) + msg = "The [BadBoy.name] subsystem was the last to fire for 2 controller restarts. It will be recovered now and disabled if it happens again." + FireHim = TRUE + if(3) + msg = "The [BadBoy.name] subsystem seems to be destabilizing the MC and will be offlined." + BadBoy.flags |= SS_NO_FIRE + if(msg) + to_chat(GLOB.admins, "[msg]") + log_world(msg) + if (istype(Master.subsystems)) + if(FireHim) + Master.subsystems += new BadBoy.type //NEW_SS_GLOBAL will remove the old one subsystems = Master.subsystems StartProcessing(10) else @@ -133,13 +157,13 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING var/start_timeofday = REALTIMEOFDAY // Initialize subsystems. - CURRENT_TICKLIMIT = config.tick_limit_mc_init + GLOB.CURRENT_TICKLIMIT = config.tick_limit_mc_init for (var/datum/controller/subsystem/SS in subsystems) if (SS.flags & SS_NO_INIT) continue SS.Initialize(REALTIMEOFDAY) CHECK_TICK - CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING + GLOB.CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING var/time = (REALTIMEOFDAY - start_timeofday) / 10 var/msg = "Initializations complete within [time] second[time == 1 ? "" : "s"]!" @@ -242,7 +266,7 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING while (1) tickdrift = max(0, MC_AVERAGE_FAST(tickdrift, (((REALTIMEOFDAY - init_timeofday) - (world.time - init_time)) / world.tick_lag))) if (processing <= 0) - CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING + GLOB.CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING sleep(10) continue @@ -250,7 +274,7 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING // because sleeps are processed in the order received, so longer sleeps are more likely to run first if (world.tick_usage > TICK_LIMIT_MC) sleep_delta += 2 - CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING - (TICK_LIMIT_RUNNING * 0.5) + GLOB.CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING - (TICK_LIMIT_RUNNING * 0.5) sleep(world.tick_lag * (processing + sleep_delta)) continue @@ -279,7 +303,7 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING if (!error_level) iteration++ error_level++ - CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING + GLOB.CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING sleep(10) continue @@ -291,7 +315,7 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING if (!error_level) iteration++ error_level++ - CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING + GLOB.CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING sleep(10) continue error_level-- @@ -302,7 +326,7 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING iteration++ last_run = world.time src.sleep_delta = MC_AVERAGE_FAST(src.sleep_delta, sleep_delta) - CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING - (TICK_LIMIT_RUNNING * 0.25) //reserve the tail 1/4 of the next tick for the mc. + GLOB.CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING - (TICK_LIMIT_RUNNING * 0.25) //reserve the tail 1/4 of the next tick for the mc. sleep(world.tick_lag * (processing + sleep_delta)) @@ -391,7 +415,7 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING else tick_precentage = tick_remaining - CURRENT_TICKLIMIT = world.tick_usage + tick_precentage + GLOB.CURRENT_TICKLIMIT = world.tick_usage + tick_precentage if (!(queue_node_flags & SS_TICKER)) ran_non_ticker = TRUE diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm index 2078d88656..e4dc9f833e 100644 --- a/code/controllers/subsystem.dm +++ b/code/controllers/subsystem.dm @@ -1,5 +1,4 @@ - /datum/controller/subsystem // Metadata; you should define these. name = "fire coderbus" //name of the subsystem @@ -29,8 +28,17 @@ var/datum/controller/subsystem/queue_next var/datum/controller/subsystem/queue_prev -// Used to initialize the subsystem BEFORE the map has loaded + var/static/failure_strikes = 0 //How many times we suspect this subsystem has crashed the MC, 3 strikes and you're out! + +//Do not override /datum/controller/subsystem/New() + return + +// Used to initialize the subsystem BEFORE the map has loaded +// Called AFTER Recover if that is called +// Prefer to use Initialize if possible +/datum/controller/subsystem/proc/PreInit() + return //This is used so the mc knows when the subsystem sleeps. do not override. /datum/controller/subsystem/proc/ignite(resumed = 0) diff --git a/code/controllers/subsystem/acid.dm b/code/controllers/subsystem/acid.dm index 2dc2aa80a0..a0a506499f 100644 --- a/code/controllers/subsystem/acid.dm +++ b/code/controllers/subsystem/acid.dm @@ -1,6 +1,4 @@ -var/datum/controller/subsystem/acid/SSacid - -/datum/controller/subsystem/acid +SUBSYSTEM_DEF(acid) name = "Acid" priority = 40 flags = SS_NO_INIT|SS_BACKGROUND @@ -8,10 +6,6 @@ var/datum/controller/subsystem/acid/SSacid var/list/currentrun = list() var/list/processing = list() -/datum/controller/subsystem/acid/New() - NEW_SS_GLOBAL(SSacid) - - /datum/controller/subsystem/acid/stat_entry() ..("P:[processing.len]") @@ -34,7 +28,7 @@ var/datum/controller/subsystem/acid/SSacid if(O.acid_level && O.acid_processing()) else - O.cut_overlay(acid_overlay, TRUE) + O.cut_overlay(GLOB.acid_overlay, TRUE) processing -= O if (MC_TICK_CHECK) diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 6a004adef6..852e28077d 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -5,9 +5,8 @@ #define SSAIR_HIGHPRESSURE 5 #define SSAIR_HOTSPOTS 6 #define SSAIR_SUPERCONDUCTIVITY 7 -var/datum/controller/subsystem/air/SSair -/datum/controller/subsystem/air +SUBSYSTEM_DEF(air) name = "Air" init_order = -1 priority = 20 @@ -41,9 +40,6 @@ var/datum/controller/subsystem/air/SSair var/map_loading = TRUE var/list/queued_for_activation -/datum/controller/subsystem/air/New() - NEW_SS_GLOBAL(SSair) - /datum/controller/subsystem/air/stat_entry(msg) msg += "C:{" msg += "AT:[round(cost_turfs,1)]|" @@ -69,6 +65,7 @@ var/datum/controller/subsystem/air/SSair setup_allturfs() setup_atmos_machinery() setup_pipenets() + gas_reactions = init_gas_reactions() ..() @@ -244,6 +241,9 @@ var/datum/controller/subsystem/air/SSair active_turfs -= T if(currentpart == SSAIR_ACTIVETURFS) currentrun -= T + #ifdef VISUALIZE_ACTIVE_TURFS + T.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, "#00ff00") + #endif if(istype(T)) T.excited = 0 if(T.excited_group) @@ -251,6 +251,9 @@ var/datum/controller/subsystem/air/SSair /datum/controller/subsystem/air/proc/add_to_active(turf/open/T, blockchanges = 1) if(istype(T) && T.air) + #ifdef VISUALIZE_ACTIVE_TURFS + T.add_atom_colour("#00ff00", TEMPORARY_COLOUR_PRIORITY) + #endif T.excited = 1 active_turfs |= T if(currentpart == SSAIR_ACTIVETURFS) @@ -296,7 +299,7 @@ var/datum/controller/subsystem/air/SSair var/timer = world.timeofday warning("There are [starting_ats] active turfs at roundstart, this is a mapping error caused by a difference of the air between the adjacent turfs. You can see its coordinates using \"Mapping -> Show roundstart AT list\" verb (debug verbs required)") for(var/turf/T in active_turfs) - active_turfs_startlist += text("[T.x], [T.y], [T.z]\n") + GLOB.active_turfs_startlist += text("[T.x], [T.y], [T.z]\n") //now lets clear out these active turfs var/list/turfs_to_check = active_turfs.Copy() diff --git a/code/controllers/subsystem/assets.dm b/code/controllers/subsystem/assets.dm index 2ad4faa09a..ac8f51de0e 100644 --- a/code/controllers/subsystem/assets.dm +++ b/code/controllers/subsystem/assets.dm @@ -1,19 +1,14 @@ -var/datum/controller/subsystem/assets/SSasset - -/datum/controller/subsystem/assets +SUBSYSTEM_DEF(assets) name = "Assets" init_order = -3 flags = SS_NO_FIRE var/list/cache = list() -/datum/controller/subsystem/assets/New() - NEW_SS_GLOBAL(SSasset) - /datum/controller/subsystem/assets/Initialize(timeofday) for(var/type in typesof(/datum/asset) - list(/datum/asset, /datum/asset/simple)) var/datum/asset/A = new type() A.register() - for(var/client/C in clients) + for(var/client/C in GLOB.clients) addtimer(CALLBACK(GLOBAL_PROC, .proc/getFilesSlow, C, cache, FALSE), 10) ..() \ No newline at end of file diff --git a/code/controllers/subsystem/atoms.dm b/code/controllers/subsystem/atoms.dm index 499920bad8..e5cda98dd4 100644 --- a/code/controllers/subsystem/atoms.dm +++ b/code/controllers/subsystem/atoms.dm @@ -1,10 +1,8 @@ -var/datum/controller/subsystem/atoms/SSatoms - #define INITIALIZATION_INSSATOMS 0 //New should not call Initialize #define INITIALIZATION_INNEW_MAPLOAD 1 //New should call Initialize(TRUE) #define INITIALIZATION_INNEW_REGULAR 2 //New should call Initialize(FALSE) -/datum/controller/subsystem/atoms +SUBSYSTEM_DEF(atoms) name = "Atoms" init_order = 11 flags = SS_NO_FIRE @@ -12,11 +10,10 @@ var/datum/controller/subsystem/atoms/SSatoms var/initialized = INITIALIZATION_INSSATOMS var/old_initialized -/datum/controller/subsystem/atoms/New() - NEW_SS_GLOBAL(SSatoms) + var/list/late_loaders /datum/controller/subsystem/atoms/Initialize(timeofday) - fire_overlay.appearance_flags = RESET_COLOR + GLOB.fire_overlay.appearance_flags = RESET_COLOR setupGenetics() //to set the mutations' place in structural enzymes, so monkey.initialize() knows where to put the monkey mutation. initialized = INITIALIZATION_INNEW_MAPLOAD InitializeAtoms() @@ -26,8 +23,6 @@ var/datum/controller/subsystem/atoms/SSatoms if(initialized == INITIALIZATION_INSSATOMS) return - var/list/late_loaders - initialized = INITIALIZATION_INNEW_MAPLOAD var/static/list/NewQdelList = list() @@ -73,15 +68,15 @@ var/datum/controller/subsystem/atoms/SSatoms initialized = INITIALIZATION_INNEW_REGULAR - if(late_loaders) - for(var/I in late_loaders) - var/atom/A = I - var/start_tick = world.time - A.Initialize(FALSE) - if(start_tick != world.time) - WARNING("[A]: [A.type] slept during it's Initialize!") - CHECK_TICK - testing("Late-initialized [late_loaders.len] atoms") + for(var/I in late_loaders) + var/atom/A = I + var/start_tick = world.time + A.Initialize(FALSE) + if(start_tick != world.time) + WARNING("[A]: [A.type] slept during it's Initialize!") + CHECK_TICK + testing("Late-initialized [LAZYLEN(late_loaders)] atoms") + LAZYCLEARLIST(late_loaders) /datum/controller/subsystem/atoms/proc/map_loader_begin() old_initialized = initialized @@ -108,9 +103,9 @@ var/datum/controller/subsystem/atoms/SSatoms continue B.dna_block = pick_n_take(avnums) if(B.quality == POSITIVE) - good_mutations |= B + GLOB.good_mutations |= B else if(B.quality == NEGATIVE) - bad_mutations |= B + GLOB.bad_mutations |= B else if(B.quality == MINOR_NEGATIVE) - not_good_mutations |= B - CHECK_TICK \ No newline at end of file + GLOB.not_good_mutations |= B + CHECK_TICK diff --git a/code/controllers/subsystem/augury.dm b/code/controllers/subsystem/augury.dm index d1a9424a19..851234fde5 100644 --- a/code/controllers/subsystem/augury.dm +++ b/code/controllers/subsystem/augury.dm @@ -1,6 +1,4 @@ -var/datum/controller/subsystem/augury/SSaugury - -/datum/controller/subsystem/augury +SUBSYSTEM_DEF(augury) name = "Augury" flags = SS_NO_INIT @@ -9,9 +7,6 @@ var/datum/controller/subsystem/augury/SSaugury var/list/observers_given_action = list() -/datum/controller/subsystem/augury/New() - NEW_SS_GLOBAL(SSaugury) - /datum/controller/subsystem/augury/stat_entry(msg) ..("W:[watchers.len]|D:[doombringers.len]") @@ -33,7 +28,7 @@ var/datum/controller/subsystem/augury/SSaugury biggest_threat = threat if(doombringers.len) - for(var/i in player_list) + for(var/i in GLOB.player_list) if(isobserver(i) && (!(observers_given_action[i]))) var/datum/action/innate/augury/A = new A.Grant(i) diff --git a/code/controllers/subsystem/communications.dm b/code/controllers/subsystem/communications.dm index e17557a0fa..a7c60d3357 100644 --- a/code/controllers/subsystem/communications.dm +++ b/code/controllers/subsystem/communications.dm @@ -1,18 +1,13 @@ #define COMMUNICATION_COOLDOWN 600 #define COMMUNICATION_COOLDOWN_AI 600 -var/datum/controller/subsystem/communications/SScommunications - -/datum/controller/subsystem/communications +SUBSYSTEM_DEF(communications) name = "Communications" flags = SS_NO_INIT | SS_NO_FIRE var/silicon_message_cooldown var/nonsilicon_message_cooldown -/datum/controller/subsystem/communications/New() - NEW_SS_GLOBAL(SScommunications) - /datum/controller/subsystem/communications/proc/can_announce(mob/living/user, is_silicon) if(is_silicon && silicon_message_cooldown > world.time) . = FALSE diff --git a/code/controllers/subsystem/disease.dm b/code/controllers/subsystem/disease.dm new file mode 100644 index 0000000000..8b867146a6 --- /dev/null +++ b/code/controllers/subsystem/disease.dm @@ -0,0 +1,40 @@ +SUBSYSTEM_DEF(disease) + name = "Disease" + flags = SS_KEEP_TIMING|SS_NO_INIT + + var/list/currentrun = list() + var/list/processing = list() + + var/list/diseases + var/list/archive_diseases = list() + + var/static/list/list_symptoms = subtypesof(/datum/symptom) + +/datum/controller/subsystem/disease/PreInit() + if(!diseases) + diseases = subtypesof(/datum/disease) + +/datum/controller/subsystem/disease/Recover() + currentrun = SSdisease.currentrun + processing = SSdisease.processing + diseases = SSdisease.diseases + archive_diseases = SSdisease.archive_diseases + +/datum/controller/subsystem/disease/stat_entry(msg) + ..("P:[processing.len]") + +/datum/controller/subsystem/disease/fire(resumed = 0) + if(!resumed) + src.currentrun = processing.Copy() + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + + while(currentrun.len) + var/datum/thing = currentrun[currentrun.len] + currentrun.len-- + if(thing) + thing.process() + else + processing.Remove(thing) + if (MC_TICK_CHECK) + return diff --git a/code/controllers/subsystem/diseases.dm b/code/controllers/subsystem/diseases.dm deleted file mode 100644 index 06a4961eb9..0000000000 --- a/code/controllers/subsystem/diseases.dm +++ /dev/null @@ -1,30 +0,0 @@ -var/datum/controller/subsystem/diseases/SSdisease - -/datum/controller/subsystem/diseases - name = "Diseases" - flags = SS_KEEP_TIMING|SS_NO_INIT - - var/list/currentrun = list() - var/list/processing = list() - -/datum/controller/subsystem/diseases/New() - NEW_SS_GLOBAL(SSdisease) - -/datum/controller/subsystem/diseases/stat_entry(msg) - ..("P:[processing.len]") - -/datum/controller/subsystem/diseases/fire(resumed = 0) - if(!resumed) - src.currentrun = processing.Copy() - //cache for sanic speed (lists are references anyways) - var/list/currentrun = src.currentrun - - while(currentrun.len) - var/datum/thing = currentrun[currentrun.len] - currentrun.len-- - if(thing) - thing.process() - else - processing.Remove(thing) - if (MC_TICK_CHECK) - return diff --git a/code/controllers/subsystem/events.dm b/code/controllers/subsystem/events.dm index b922ecc1ba..cae880485c 100644 --- a/code/controllers/subsystem/events.dm +++ b/code/controllers/subsystem/events.dm @@ -1,6 +1,4 @@ -var/datum/controller/subsystem/events/SSevent - -/datum/controller/subsystem/events +SUBSYSTEM_DEF(events) name = "Events" init_order = 6 @@ -15,11 +13,6 @@ var/datum/controller/subsystem/events/SSevent var/list/holidays //List of all holidays occuring today or null if no holidays var/wizardmode = 0 - -/datum/controller/subsystem/events/New() - NEW_SS_GLOBAL(SSevent) - - /datum/controller/subsystem/events/Initialize(time, zlevel) for(var/type in typesof(/datum/round_event_control)) var/datum/round_event_control/E = new type() @@ -67,7 +60,7 @@ var/datum/controller/subsystem/events/SSevent // if(E) E.runEvent() return - var/gamemode = ticker.mode.config_tag + var/gamemode = SSticker.mode.config_tag var/players_amt = get_active_player_count(alive_check = 1, afk_check = 1, human_check = 1) // Only alive, non-AFK human players count towards this. @@ -114,7 +107,7 @@ var/datum/controller/subsystem/events/SSevent /area/engine/chiefs_office) //Need to locate() as it's just a list of paths. - return locate(pick((the_station_areas - safe_areas) + danger_areas)) + return locate(pick((GLOB.the_station_areas - safe_areas) + danger_areas)) //allows a client to trigger an event @@ -133,7 +126,7 @@ var/datum/controller/subsystem/events/SSevent var/normal = "" var/magic = "" var/holiday = "" - for(var/datum/round_event_control/E in SSevent.control) + for(var/datum/round_event_control/E in SSevents.control) dat = "
[E]" if(E.holidayID) holiday += dat @@ -156,7 +149,7 @@ var/datum/controller/subsystem/events/SSevent //Uncommenting ALLOW_HOLIDAYS in config.txt will enable holidays //It's easy to add stuff. Just add a holiday datum in code/modules/holiday/holidays.dm -//You can then check if it's a special day in any code in the game by doing if(SSevent.holidays["Groundhog Day"]) +//You can then check if it's a special day in any code in the game by doing if(SSevents.holidays["Groundhog Day"]) //You can also make holiday random events easily thanks to Pete/Gia's system. //simply make a random event normally, then assign it a holidayID string which matches the holiday's name. @@ -193,7 +186,7 @@ var/datum/controller/subsystem/events/SSevent /datum/controller/subsystem/events/proc/toggleWizardmode() wizardmode = !wizardmode - message_admins("Summon Events has been [wizardmode ? "enabled, events will occur every [SSevent.frequency_lower / 600] to [SSevent.frequency_upper / 600] minutes" : "disabled"]!") + message_admins("Summon Events has been [wizardmode ? "enabled, events will occur every [SSevents.frequency_lower / 600] to [SSevents.frequency_upper / 600] minutes" : "disabled"]!") log_game("Summon Events was [wizardmode ? "enabled" : "disabled"]!") diff --git a/code/controllers/subsystem/fire_burning.dm b/code/controllers/subsystem/fire_burning.dm index d420cd5a12..af3cb3f6a1 100644 --- a/code/controllers/subsystem/fire_burning.dm +++ b/code/controllers/subsystem/fire_burning.dm @@ -1,6 +1,4 @@ -var/datum/controller/subsystem/fire_burning/SSfire_burning - -/datum/controller/subsystem/fire_burning +SUBSYSTEM_DEF(fire_burning) name = "Fire Burning" priority = 40 flags = SS_NO_INIT|SS_BACKGROUND @@ -8,10 +6,6 @@ var/datum/controller/subsystem/fire_burning/SSfire_burning var/list/currentrun = list() var/list/processing = list() -/datum/controller/subsystem/fire_burning/New() - NEW_SS_GLOBAL(SSfire_burning) - - /datum/controller/subsystem/fire_burning/stat_entry() ..("P:[processing.len]") diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm index dc28f4cb50..1fff5c6430 100644 --- a/code/controllers/subsystem/garbage.dm +++ b/code/controllers/subsystem/garbage.dm @@ -1,6 +1,4 @@ -var/datum/controller/subsystem/garbage_collector/SSgarbage - -/datum/controller/subsystem/garbage_collector +SUBSYSTEM_DEF(garbage) name = "Garbage" priority = 15 wait = 5 @@ -34,10 +32,7 @@ var/datum/controller/subsystem/garbage_collector/SSgarbage var/list/qdel_list = list() // list of all types that have been qdel()eted #endif -/datum/controller/subsystem/garbage_collector/New() - NEW_SS_GLOBAL(SSgarbage) - -/datum/controller/subsystem/garbage_collector/stat_entry(msg) +/datum/controller/subsystem/garbage/stat_entry(msg) msg += "Q:[queue.len]|D:[delslasttick]|G:[gcedlasttick]|" msg += "GR:" if (!(delslasttick+gcedlasttick)) @@ -52,14 +47,14 @@ var/datum/controller/subsystem/garbage_collector/SSgarbage msg += "TGR:[round((totalgcs/(totaldels+totalgcs))*100, 0.01)]%" ..(msg) -/datum/controller/subsystem/garbage_collector/fire() +/datum/controller/subsystem/garbage/fire() HandleToBeQueued() if(state == SS_RUNNING) HandleQueue() //If you see this proc high on the profile, what you are really seeing is the garbage collection/soft delete overhead in byond. //Don't attempt to optimize, not worth the effort. -/datum/controller/subsystem/garbage_collector/proc/HandleToBeQueued() +/datum/controller/subsystem/garbage/proc/HandleToBeQueued() var/list/tobequeued = src.tobequeued var/starttime = world.time var/starttimeofday = world.timeofday @@ -70,7 +65,7 @@ var/datum/controller/subsystem/garbage_collector/SSgarbage Queue(ref) tobequeued.Cut(1, 2) -/datum/controller/subsystem/garbage_collector/proc/HandleQueue() +/datum/controller/subsystem/garbage/proc/HandleQueue() delslasttick = 0 gcedlasttick = 0 var/time_to_kill = world.time - collection_timeout // Anything qdel() but not GC'd BEFORE this time needs to be manually del() @@ -124,12 +119,12 @@ var/datum/controller/subsystem/garbage_collector/SSgarbage ++gcedlasttick ++totalgcs -/datum/controller/subsystem/garbage_collector/proc/QueueForQueuing(datum/A) +/datum/controller/subsystem/garbage/proc/QueueForQueuing(datum/A) if (istype(A) && A.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) tobequeued += A A.gc_destroyed = GC_QUEUED_FOR_QUEUING -/datum/controller/subsystem/garbage_collector/proc/Queue(datum/A) +/datum/controller/subsystem/garbage/proc/Queue(datum/A) if (!istype(A) || (!isnull(A.gc_destroyed) && A.gc_destroyed >= 0)) return if (A.gc_destroyed == GC_QUEUED_FOR_HARD_DEL) @@ -145,12 +140,12 @@ var/datum/controller/subsystem/garbage_collector/SSgarbage queue[refid] = gctime -/datum/controller/subsystem/garbage_collector/proc/HardQueue(datum/A) +/datum/controller/subsystem/garbage/proc/HardQueue(datum/A) if (istype(A) && A.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) tobequeued += A A.gc_destroyed = GC_QUEUED_FOR_HARD_DEL -/datum/controller/subsystem/garbage_collector/Recover() +/datum/controller/subsystem/garbage/Recover() if (istype(SSgarbage.queue)) queue |= SSgarbage.queue if (istype(SSgarbage.tobequeued)) @@ -264,7 +259,7 @@ var/datum/controller/subsystem/garbage_collector/SSgarbage testing("Beginning search for references to a [type].") last_find_references = world.time - find_references_in_globals() + DoSearchVar(GLOB) for(var/datum/thing in world) DoSearchVar(thing, "WorldRef: [thing]") testing("Completed search for references to a [type].") @@ -314,8 +309,6 @@ var/datum/controller/subsystem/garbage_collector/SSgarbage usr << browse(dat, "window=qdeletedlog") -#define SearchVar(X) DoSearchVar(X, "Global: " + #X) - /datum/proc/DoSearchVar(X, Xname) if(usr && usr.client && !usr.client.running_find_references) return if(istype(X, /datum)) @@ -347,692 +340,4 @@ var/datum/controller/subsystem/garbage_collector/SSgarbage CHECK_TICK #endif -//if find_references isn't working for some datum -//update this list using tools/DMTreeToGlobalsList -/datum/proc/find_references_in_globals() - SearchVar(clockwork_construction_value) - SearchVar(clockwork_caches) - SearchVar(clockwork_daemons) - SearchVar(clockwork_generals_invoked) - SearchVar(all_clockwork_objects) - SearchVar(all_clockwork_mobs) - SearchVar(clockwork_component_cache) - SearchVar(ratvar_awakens) - SearchVar(clockwork_gateway_activated) - SearchVar(all_scripture) - SearchVar(pointed_types) - SearchVar(bloody_footprints_cache) - SearchVar(ghost_accs_options) - SearchVar(ghost_others_options) - SearchVar(special_roles) - SearchVar(string_cache) - SearchVar(string_filename_current_key) - SearchVar(cmp_field) - SearchVar(friendly_animal_types) - SearchVar(humanoid_icon_cache) - SearchVar(freeze_item_icons) - SearchVar(E) - SearchVar(Sqrt2) - SearchVar(sqrtTable) - SearchVar(gaussian_next) - SearchVar(skin_tones) - SearchVar(species_list) - SearchVar(roundstart_species) - SearchVar(church_name) - SearchVar(command_name) - SearchVar(religion_name) - SearchVar(syndicate_name) - SearchVar(syndicate_code_phrase) - SearchVar(syndicate_code_response) - SearchVar(zero_character_only) - SearchVar(hex_characters) - SearchVar(alphabet) - SearchVar(binary) - SearchVar(can_embed_types) - SearchVar(WALLITEMS) - SearchVar(WALLITEMS_EXTERNAL) - SearchVar(WALLITEMS_INVERSE) - SearchVar(sortInstance) - SearchVar(config) - SearchVar(host) - SearchVar(join_motd) - SearchVar(station_name) - SearchVar(game_version) - SearchVar(changelog_hash) - SearchVar(ooc_allowed) - SearchVar(dooc_allowed) - SearchVar(abandon_allowed) - SearchVar(enter_allowed) - SearchVar(guests_allowed) - SearchVar(shuttle_frozen) - SearchVar(shuttle_left) - SearchVar(tinted_weldhelh) - SearchVar(Debug) - SearchVar(Debug2) - SearchVar(comms_key) - SearchVar(comms_allowed) - SearchVar(medal_hub) - SearchVar(medal_pass) - SearchVar(medals_enabled) - SearchVar(MAX_EX_DEVESTATION_RANGE) - SearchVar(MAX_EX_HEAVY_RANGE) - SearchVar(MAX_EX_LIGHT_RANGE) - SearchVar(MAX_EX_FLASH_RANGE) - SearchVar(MAX_EX_FLAME_RANGE) - SearchVar(DYN_EX_SCALE) - SearchVar(sqladdress) - SearchVar(sqlport) - SearchVar(sqlfdbkdb) - SearchVar(sqlfdbklogin) - SearchVar(sqlfdbkpass) - SearchVar(sqlfdbktableprefix) - SearchVar(dbcon) - SearchVar(master_mode) - SearchVar(secret_force_mode) - SearchVar(wavesecret) - SearchVar(start_state) - SearchVar(NEARSIGHTBLOCK) - SearchVar(EPILEPSYBLOCK) - SearchVar(COUGHBLOCK) - SearchVar(TOURETTESBLOCK) - SearchVar(NERVOUSBLOCK) - SearchVar(BLINDBLOCK) - SearchVar(DEAFBLOCK) - SearchVar(HULKBLOCK) - SearchVar(TELEBLOCK) - SearchVar(FIREBLOCK) - SearchVar(XRAYBLOCK) - SearchVar(CLUMSYBLOCK) - SearchVar(STRANGEBLOCK) - SearchVar(RACEBLOCK) - SearchVar(bad_se_blocks) - SearchVar(good_se_blocks) - SearchVar(op_se_blocks) - SearchVar(NULLED_SE) - SearchVar(NULLED_UI) - SearchVar(global_mutations) - SearchVar(bad_mutations) - SearchVar(good_mutations) - SearchVar(not_good_mutations) - SearchVar(diary) - SearchVar(diaryofmeanpeople) - SearchVar(href_logfile) - SearchVar(bombers) - SearchVar(admin_log) - SearchVar(lastsignalers) - SearchVar(lawchanges) - SearchVar(combatlog) - SearchVar(IClog) - SearchVar(OOClog) - SearchVar(adminlog) - SearchVar(active_turfs_startlist) - SearchVar(admin_notice) - SearchVar(timezoneOffset) - SearchVar(fileaccess_timer) - SearchVar(TAB) - SearchVar(data_core) - SearchVar(CELLRATE) - SearchVar(CHARGELEVEL) - SearchVar(powernets) - SearchVar(hair_styles_list) - SearchVar(hair_styles_male_list) - SearchVar(hair_styles_female_list) - SearchVar(facial_hair_styles_list) - SearchVar(facial_hair_styles_male_list) - SearchVar(facial_hair_styles_female_list) - SearchVar(underwear_list) - SearchVar(underwear_m) - SearchVar(underwear_f) - SearchVar(undershirt_list) - SearchVar(undershirt_m) - SearchVar(undershirt_f) - SearchVar(socks_list) - SearchVar(body_markings_list) - SearchVar(tails_list_lizard) - SearchVar(animated_tails_list_lizard) - SearchVar(snouts_list) - SearchVar(horns_list) - SearchVar(frills_list) - SearchVar(spines_list) - SearchVar(legs_list) - SearchVar(animated_spines_list) - SearchVar(tails_list_human) - SearchVar(animated_tails_list_human) - SearchVar(ears_list) - SearchVar(wings_list) - SearchVar(wings_open_list) - SearchVar(r_wings_list) - SearchVar(ghost_forms_with_directions_list) - SearchVar(ghost_forms_with_accessories_list) - SearchVar(security_depts_prefs) - SearchVar(backbaglist) - SearchVar(uplink_spawn_loc_list) - SearchVar(female_clothing_icons) - SearchVar(hit_appends) - SearchVar(scarySounds) - SearchVar(TAGGERLOCATIONS) - SearchVar(guitar_notes) - SearchVar(station_prefixes) - SearchVar(station_names) - SearchVar(station_suffixes) - SearchVar(greek_letters) - SearchVar(phonetic_alphabet) - SearchVar(numbers_as_words) - SearchVar(station_numerals) - SearchVar(cardinal) - SearchVar(alldirs) - SearchVar(diagonals) - SearchVar(accessable_z_levels) - SearchVar(global_map) - SearchVar(landmarks_list) - SearchVar(start_landmarks_list) - SearchVar(department_security_spawns) - SearchVar(generic_event_spawns) - SearchVar(monkeystart) - SearchVar(wizardstart) - SearchVar(newplayer_start) - SearchVar(latejoin) - SearchVar(prisonwarp) - SearchVar(holdingfacility) - SearchVar(xeno_spawn) - SearchVar(tdome1) - SearchVar(tdome2) - SearchVar(tdomeobserve) - SearchVar(tdomeadmin) - SearchVar(prisonsecuritywarp) - SearchVar(prisonwarped) - SearchVar(blobstart) - SearchVar(secequipment) - SearchVar(deathsquadspawn) - SearchVar(emergencyresponseteamspawn) - SearchVar(ruin_landmarks) - SearchVar(awaydestinations) - SearchVar(sortedAreas) - SearchVar(transit_markers) - SearchVar(clients) - SearchVar(admins) - SearchVar(deadmins) - SearchVar(directory) - SearchVar(stealthminID) - SearchVar(player_list) - SearchVar(mob_list) - SearchVar(living_mob_list) - SearchVar(dead_mob_list) - SearchVar(joined_player_list) - SearchVar(silicon_mobs) - SearchVar(pai_list) - SearchVar(ai_names) - SearchVar(wizard_first) - SearchVar(wizard_second) - SearchVar(ninja_titles) - SearchVar(ninja_names) - SearchVar(commando_names) - SearchVar(first_names_male) - SearchVar(first_names_female) - SearchVar(last_names) - SearchVar(lizard_names_male) - SearchVar(lizard_names_female) - SearchVar(clown_names) - SearchVar(mime_names) - SearchVar(carp_names) - SearchVar(golem_names) - SearchVar(plasmaman_names) - SearchVar(verbs) - SearchVar(adjectives) - SearchVar(cable_list) - SearchVar(portals) - SearchVar(airlocks) - SearchVar(mechas_list) - SearchVar(shuttle_caller_list) - SearchVar(machines) - SearchVar(syndicate_shuttle_boards) - SearchVar(navbeacons) - SearchVar(teleportbeacons) - SearchVar(deliverybeacons) - SearchVar(deliverybeacontags) - SearchVar(nuke_list) - SearchVar(alarmdisplay) - SearchVar(chemical_reactions_list) - SearchVar(chemical_reagents_list) - SearchVar(materials_list) - SearchVar(tech_list) - SearchVar(surgeries_list) - SearchVar(crafting_recipes) - SearchVar(rcd_list) - SearchVar(apcs_list) - SearchVar(tracked_implants) - SearchVar(tracked_chem_implants) - SearchVar(poi_list) - SearchVar(pinpointer_list) - SearchVar(zombie_infection_list) - SearchVar(meteor_list) - SearchVar(poll_ignore) - SearchVar(typecache_mob) - SearchVar(tk_maxrange) - SearchVar(Failsafe) - SearchVar(Master) - SearchVar(MC_restart_clear) - SearchVar(MC_restart_timeout) - SearchVar(MC_restart_count) - SearchVar(CURRENT_TICKLIMIT) - SearchVar(SSacid) - SearchVar(SSair) - SearchVar(SSasset) - SearchVar(SSaugury) - SearchVar(SScommunications) - SearchVar(SSdisease) - SearchVar(SSevent) - SearchVar(SSfire_burning) - SearchVar(SSgarbage) - SearchVar(SSicon_smooth) - SearchVar(SSipintel) - SearchVar(SSjob) - SearchVar(SSlighting) - SearchVar(SSmachine) - SearchVar(SSmapping) - SearchVar(SSminimap) - SearchVar(SSmob) - SearchVar(SSnpc) - SearchVar(SSorbit) - SearchVar(SSpai) - SearchVar(pai_card_list) - SearchVar(SSparallax) - SearchVar(SSpersistence) - SearchVar(SSping) - SearchVar(SSradio) - SearchVar(SSreligion) - SearchVar(SSserver) - SearchVar(SSshuttle) - SearchVar(SSspacedrift) - SearchVar(SSsqueak) - SearchVar(SSstickyban) - SearchVar(SSsun) - SearchVar(SStgui) - SearchVar(SSthrowing) - SearchVar(round_start_time) - SearchVar(ticker) - SearchVar(SStimer) - SearchVar(SSvote) - SearchVar(SSweather) - SearchVar(SSfastprocess) - SearchVar(SSflightpacks) - SearchVar(SSobj) - SearchVar(SSprocessing) - SearchVar(record_id_num) - SearchVar(emote_list) - SearchVar(huds) - SearchVar(diseases) - SearchVar(archive_diseases) - SearchVar(advance_cures) - SearchVar(list_symptoms) - SearchVar(dictionary_symptoms) - SearchVar(SYMPTOM_ACTIVATION_PROB) - SearchVar(revdata) - SearchVar(all_status_effects) - SearchVar(wire_colors) - SearchVar(wire_color_directory) - SearchVar(wire_name_directory) - SearchVar(blood_splatter_icons) - SearchVar(all_radios) - SearchVar(radiochannels) - SearchVar(radiochannelsreverse) - SearchVar(SYND_FREQ) - SearchVar(SUPP_FREQ) - SearchVar(SERV_FREQ) - SearchVar(SCI_FREQ) - SearchVar(COMM_FREQ) - SearchVar(MED_FREQ) - SearchVar(ENG_FREQ) - SearchVar(SEC_FREQ) - SearchVar(CENTCOM_FREQ) - SearchVar(AIPRIV_FREQ) - SearchVar(RADIO_TO_AIRALARM) - SearchVar(RADIO_FROM_AIRALARM) - SearchVar(RADIO_CHAT) - SearchVar(RADIO_ATMOSIA) - SearchVar(RADIO_NAVBEACONS) - SearchVar(RADIO_AIRLOCK) - SearchVar(RADIO_MAGNETS) - SearchVar(pointers) - SearchVar(freqtospan) - SearchVar(teleportlocs) - SearchVar(the_station_areas) - SearchVar(possible_items) - SearchVar(possible_items_special) - SearchVar(blobs) - SearchVar(blob_cores) - SearchVar(overminds) - SearchVar(blob_nodes) - SearchVar(blobs_legit) - SearchVar(possible_changeling_IDs) - SearchVar(slots) - SearchVar(slot2slot) - SearchVar(slot2type) - SearchVar(hivemind_bank) - SearchVar(blacklisted_pylon_turfs) - SearchVar(non_revealed_runes) - SearchVar(teleport_runes) - SearchVar(wall_runes) - SearchVar(whiteness) - SearchVar(allDevils) - SearchVar(lawlorify) - SearchVar(gang_name_pool) - SearchVar(gang_colors_pool) - SearchVar(borers) - SearchVar(total_borer_hosts_needed) - SearchVar(bomb_set) - SearchVar(hsboxspawn) - SearchVar(multiverse) - SearchVar(announcement_systems) - SearchVar(doppler_arrays) - SearchVar(HOLOPAD_MODE) - SearchVar(holopads) - SearchVar(news_network) - SearchVar(allCasters) - SearchVar(SAFETY_COOLDOWN) - SearchVar(req_console_assistance) - SearchVar(req_console_supplies) - SearchVar(req_console_information) - SearchVar(allConsoles) - SearchVar(time_last_changed_position) - SearchVar(CALL_SHUTTLE_REASON_LENGTH) - SearchVar(crewmonitor) - SearchVar(possible_uplinker_IDs) - SearchVar(airlock_overlays) - SearchVar(pipeID2State) - SearchVar(telecomms_list) - SearchVar(recentmessages) - SearchVar(message_delay) - SearchVar(year) - SearchVar(year_integer) - SearchVar(explosionid) - SearchVar(fire_overlay) - SearchVar(acid_overlay) - SearchVar(BUMP_TELEPORTERS) - SearchVar(blacklisted_glowshroom_turfs) - SearchVar(PDAs) - SearchVar(rod_recipes) - SearchVar(glass_recipes) - SearchVar(reinforced_glass_recipes) - SearchVar(human_recipes) - SearchVar(corgi_recipes) - SearchVar(monkey_recipes) - SearchVar(xeno_recipes) - SearchVar(sinew_recipes) - SearchVar(sandstone_recipes) - SearchVar(sandbag_recipes) - SearchVar(diamond_recipes) - SearchVar(uranium_recipes) - SearchVar(plasma_recipes) - SearchVar(gold_recipes) - SearchVar(silver_recipes) - SearchVar(clown_recipes) - SearchVar(titanium_recipes) - SearchVar(plastitanium_recipes) - SearchVar(snow_recipes) - SearchVar(abductor_recipes) - SearchVar(metal_recipes) - SearchVar(plasteel_recipes) - SearchVar(wood_recipes) - SearchVar(cloth_recipes) - SearchVar(cardboard_recipes) - SearchVar(runed_metal_recipes) - SearchVar(brass_recipes) - SearchVar(disposalpipeID2State) - SearchVar(RPD_recipes) - SearchVar(biblenames) - SearchVar(biblestates) - SearchVar(bibleitemstates) - SearchVar(globalBlankCanvases) - SearchVar(crematoriums) - SearchVar(icons_to_ignore_at_floor_init) - SearchVar(js_byjax) - SearchVar(js_dropdowns) - SearchVar(BSACooldown) - SearchVar(admin_ranks) - SearchVar(admin_verbs_default) - SearchVar(admin_verbs_admin) - SearchVar(admin_verbs_ban) - SearchVar(admin_verbs_sounds) - SearchVar(admin_verbs_fun) - SearchVar(admin_verbs_spawn) - SearchVar(admin_verbs_server) - SearchVar(admin_verbs_debug) - SearchVar(admin_verbs_possess) - SearchVar(admin_verbs_permissions) - SearchVar(admin_verbs_rejuv) - SearchVar(admin_verbs_hideable) - SearchVar(create_object_html) - SearchVar(create_object_forms) - SearchVar(admin_datums) - SearchVar(CMinutes) - SearchVar(Banlist) - SearchVar(whitelist) - SearchVar(TYPES_SHORTCUTS) - SearchVar(intercom_range_display_status) - SearchVar(admin_verbs_debug_mapping) - SearchVar(say_disabled) - SearchVar(VVlocked) - SearchVar(VVicon_edit_lock) - SearchVar(VVckey_edit) - SearchVar(VVpixelmovement) - SearchVar(highlander) - SearchVar(admin_sound) - SearchVar(custom_outfits) - SearchVar(meta_gas_info) - SearchVar(gaslist_cache) - SearchVar(hardcoded_gases) - SearchVar(pipenetwarnings) - SearchVar(the_gateway) - SearchVar(potentialRandomZlevels) - SearchVar(use_preloader) - SearchVar(_preloader) - SearchVar(swapmaps_iconcache) - SearchVar(SWAPMAPS_SAV) - SearchVar(SWAPMAPS_TEXT) - SearchVar(swapmaps_mode) - SearchVar(swapmaps_compiled_maxx) - SearchVar(swapmaps_compiled_maxy) - SearchVar(swapmaps_compiled_maxz) - SearchVar(swapmaps_initialized) - SearchVar(swapmaps_loaded) - SearchVar(swapmaps_byname) - SearchVar(sc_safecode1) - SearchVar(sc_safecode2) - SearchVar(sc_safecode3) - SearchVar(sc_safecode4) - SearchVar(sc_safecode5) - SearchVar(exports_list) - SearchVar(clientmessages) - SearchVar(preferences_datums) - SearchVar(ghost_forms) - SearchVar(ghost_orbits) - SearchVar(normal_ooc_colour) - SearchVar(damaged_clothes_icons) - SearchVar(emojis) - SearchVar(non_fakeattack_weapons) - SearchVar(cards_against_space) - SearchVar(chem_t1_reagents) - SearchVar(chem_t2_reagents) - SearchVar(chem_t3_reagents) - SearchVar(chem_t4_reagents) - SearchVar(ENGSEC) - SearchVar(CAPTAIN) - SearchVar(HOS) - SearchVar(WARDEN) - SearchVar(DETECTIVE) - SearchVar(OFFICER) - SearchVar(CHIEF) - SearchVar(ENGINEER) - SearchVar(ATMOSTECH) - SearchVar(ROBOTICIST) - SearchVar(AI) - SearchVar(CYBORG) - SearchVar(MEDSCI) - SearchVar(RD) - SearchVar(SCIENTIST) - SearchVar(CHEMIST) - SearchVar(CMO) - SearchVar(DOCTOR) - SearchVar(GENETICIST) - SearchVar(VIROLOGIST) - SearchVar(CIVILIAN) - SearchVar(HOP) - SearchVar(BARTENDER) - SearchVar(BOTANIST) - SearchVar(COOK) - SearchVar(JANITOR) - SearchVar(LIBRARIAN) - SearchVar(QUARTERMASTER) - SearchVar(CARGOTECH) - SearchVar(MINER) - SearchVar(LAWYER) - SearchVar(CHAPLAIN) - SearchVar(CLOWN) - SearchVar(MIME) - SearchVar(ASSISTANT) - SearchVar(assistant_occupations) - SearchVar(command_positions) - SearchVar(engineering_positions) - SearchVar(medical_positions) - SearchVar(science_positions) - SearchVar(supply_positions) - SearchVar(civilian_positions) - SearchVar(security_positions) - SearchVar(nonhuman_positions) - SearchVar(cap_expand) - SearchVar(cmo_expand) - SearchVar(hos_expand) - SearchVar(hop_expand) - SearchVar(rd_expand) - SearchVar(ce_expand) - SearchVar(qm_expand) - SearchVar(sec_expand) - SearchVar(engi_expand) - SearchVar(atmos_expand) - SearchVar(doc_expand) - SearchVar(mine_expand) - SearchVar(chef_expand) - SearchVar(borg_expand) - SearchVar(available_depts) - SearchVar(cachedbooks) - SearchVar(total_extraction_beacons) - SearchVar(next_mob_id) - SearchVar(firstname) - SearchVar(ghost_darkness_images) - SearchVar(ghost_images_full) - SearchVar(ghost_images_default) - SearchVar(ghost_images_simple) - SearchVar(department_radio_keys) - SearchVar(crit_allowed_modes) - SearchVar(ventcrawl_machinery) - SearchVar(posibrain_notif_cooldown) - SearchVar(NO_SLIP_WHEN_WALKING) - SearchVar(SLIDE) - SearchVar(GALOSHES_DONT_HELP) - SearchVar(SLIDE_ICE) - SearchVar(limb_icon_cache) - SearchVar(MIN_IMPREGNATION_TIME) - SearchVar(MAX_IMPREGNATION_TIME) - SearchVar(MIN_ACTIVE_TIME) - SearchVar(MAX_ACTIVE_TIME) - SearchVar(default_martial_art) - SearchVar(plasmaman_on_fire) - SearchVar(ai_list) - SearchVar(announcing_vox) - SearchVar(VOX_CHANNEL) - SearchVar(VOX_DELAY) - SearchVar(vox_sounds) - SearchVar(CHUNK_SIZE) - SearchVar(cameranet) - SearchVar(mulebot_count) - SearchVar(MAX_CHICKENS) - SearchVar(chicken_count) - SearchVar(parasites) - SearchVar(protected_objects) - SearchVar(AISwarmers) - SearchVar(AISwarmersByType) - SearchVar(AISwarmerCapsByType) - SearchVar(slime_colours) - SearchVar(global_modular_computers) - SearchVar(file_uid) - SearchVar(nttransfer_uid) - SearchVar(ntnet_card_uid) - SearchVar(ntnet_global) - SearchVar(ntnrc_uid) - SearchVar(employmentCabinets) - SearchVar(cable_coil_recipes) - SearchVar(gravity_generators) - SearchVar(POWER_IDLE) - SearchVar(POWER_UP) - SearchVar(POWER_DOWN) - SearchVar(GRAV_NEEDS_SCREWDRIVER) - SearchVar(GRAV_NEEDS_WELDING) - SearchVar(GRAV_NEEDS_PLASTEEL) - SearchVar(GRAV_NEEDS_WRENCH) - SearchVar(rad_collectors) - SearchVar(blacklisted_tesla_types) - SearchVar(TOUCH) - SearchVar(INGEST) - SearchVar(VAPOR) - SearchVar(PATCH) - SearchVar(INJECT) - SearchVar(chemical_mob_spawn_meancritters) - SearchVar(chemical_mob_spawn_nicecritters) - SearchVar(message_servers) - SearchVar(blackbox) - SearchVar(keycard_events) - SearchVar(blacklisted_cargo_types) - SearchVar(z_levels_list) - SearchVar(spells) - SearchVar(non_simple_animals) - SearchVar(FrozenAccounts) - SearchVar(stockExchange) - SearchVar(stun_words) - SearchVar(weaken_words) - SearchVar(sleep_words) - SearchVar(vomit_words) - SearchVar(silence_words) - SearchVar(hallucinate_words) - SearchVar(wakeup_words) - SearchVar(heal_words) - SearchVar(hurt_words) - SearchVar(bleed_words) - SearchVar(burn_words) - SearchVar(hot_words) - SearchVar(cold_words) - SearchVar(repulse_words) - SearchVar(attract_words) - SearchVar(whoareyou_words) - SearchVar(saymyname_words) - SearchVar(knockknock_words) - SearchVar(statelaws_words) - SearchVar(move_words) - SearchVar(left_words) - SearchVar(right_words) - SearchVar(up_words) - SearchVar(down_words) - SearchVar(walk_words) - SearchVar(run_words) - SearchVar(helpintent_words) - SearchVar(disarmintent_words) - SearchVar(grabintent_words) - SearchVar(harmintent_words) - SearchVar(throwmode_words) - SearchVar(flip_words) - SearchVar(speak_words) - SearchVar(rest_words) - SearchVar(getup_words) - SearchVar(sit_words) - SearchVar(stand_words) - SearchVar(dance_words) - SearchVar(jump_words) - SearchVar(salute_words) - SearchVar(deathgasp_words) - SearchVar(clap_words) - SearchVar(honk_words) - SearchVar(multispin_words) - SearchVar(GPS_list) - SearchVar(uplinks) - SearchVar(uplink_items) #endif diff --git a/code/controllers/subsystem/icon_smooth.dm b/code/controllers/subsystem/icon_smooth.dm index a52089db2a..83c5895018 100644 --- a/code/controllers/subsystem/icon_smooth.dm +++ b/code/controllers/subsystem/icon_smooth.dm @@ -1,6 +1,4 @@ -var/datum/controller/subsystem/icon_smooth/SSicon_smooth - -/datum/controller/subsystem/icon_smooth +SUBSYSTEM_DEF(icon_smooth) name = "Icon Smoothing" init_order = -5 wait = 1 @@ -9,9 +7,6 @@ var/datum/controller/subsystem/icon_smooth/SSicon_smooth var/list/smooth_queue = list() -/datum/controller/subsystem/icon_smooth/New() - NEW_SS_GLOBAL(SSicon_smooth) - /datum/controller/subsystem/icon_smooth/fire() while(smooth_queue.len) var/atom/A = smooth_queue[smooth_queue.len] diff --git a/code/controllers/subsystem/inbounds.dm b/code/controllers/subsystem/inbounds.dm index 169b8a44b2..1ac9115982 100644 --- a/code/controllers/subsystem/inbounds.dm +++ b/code/controllers/subsystem/inbounds.dm @@ -1,5 +1,4 @@ -var/datum/controller/subsystem/inbounds/SSinbounds -/datum/controller/subsystem/inbounds +SUBSYSTEM_DEF(inbounds) name = "Inbounds" priority = 40 flags = SS_NO_INIT @@ -7,8 +6,6 @@ var/datum/controller/subsystem/inbounds/SSinbounds var/list/processing = list() var/list/currentrun = list() -/datum/controller/subsystem/inbounds/New() - NEW_SS_GLOBAL(SSinbounds) /datum/controller/subsystem/inbounds/stat_entry() ..("P:[processing.len]") diff --git a/code/controllers/subsystem/ipintel.dm b/code/controllers/subsystem/ipintel.dm index 07954f5476..0f351c8463 100644 --- a/code/controllers/subsystem/ipintel.dm +++ b/code/controllers/subsystem/ipintel.dm @@ -1,6 +1,4 @@ -var/datum/controller/subsystem/ipintel/SSipintel - -/datum/controller/subsystem/ipintel +SUBSYSTEM_DEF(ipintel) name = "XKeyScore" init_order = -10 flags = SS_NO_FIRE @@ -10,9 +8,6 @@ var/datum/controller/subsystem/ipintel/SSipintel var/list/cache = list() -/datum/controller/subsystem/ipintel/New() - NEW_SS_GLOBAL(SSipintel) - /datum/controller/subsystem/ipintel/Initialize(timeofday, zlevel) enabled = 1 . = ..() diff --git a/code/controllers/subsystem/jobs.dm b/code/controllers/subsystem/job.dm similarity index 94% rename from code/controllers/subsystem/jobs.dm rename to code/controllers/subsystem/job.dm index 35577889c4..517c72512c 100644 --- a/code/controllers/subsystem/jobs.dm +++ b/code/controllers/subsystem/job.dm @@ -1,6 +1,4 @@ -var/datum/controller/subsystem/job/SSjob - -/datum/controller/subsystem/job +SUBSYSTEM_DEF(job) name = "Jobs" init_order = 14 flags = SS_NO_FIRE @@ -14,10 +12,6 @@ var/datum/controller/subsystem/job/SSjob var/list/prioritized_jobs = list() -/datum/controller/subsystem/job/New() - NEW_SS_GLOBAL(SSjob) - - /datum/controller/subsystem/job/Initialize(timeofday) if(!occupations.len) SetupOccupations() @@ -52,7 +46,7 @@ var/datum/controller/subsystem/job/SSjob /datum/controller/subsystem/job/proc/Debug(text) - if(!Debug2) + if(!GLOB.Debug2) return 0 job_debug.Add(text) return 1 @@ -116,6 +110,7 @@ var/datum/controller/subsystem/job/SSjob /datum/controller/subsystem/job/proc/GiveRandomJob(mob/dead/new_player/player) Debug("GRJ Giving random job, Player: [player]") + . = FALSE for(var/datum/job/job in shuffle(occupations)) if(!job) continue @@ -123,7 +118,7 @@ var/datum/controller/subsystem/job/SSjob if(istype(job, GetJob("Assistant"))) // We don't want to give him assistant, that's boring! continue - if(job.title in command_positions) //If you want a command position, select it! + if(job.title in GLOB.command_positions) //If you want a command position, select it! continue if(jobban_isbanned(player, job.title)) @@ -145,12 +140,11 @@ var/datum/controller/subsystem/job/SSjob if((job.current_positions < job.spawn_positions) || job.spawn_positions == -1) Debug("GRJ Random job given, Player: [player], Job: [job]") - AssignRole(player, job.title) - unassigned -= player - break + if(AssignRole(player, job.title)) + return TRUE /datum/controller/subsystem/job/proc/ResetOccupations() - for(var/mob/dead/new_player/player in player_list) + for(var/mob/dead/new_player/player in GLOB.player_list) if((player) && (player.mind)) player.mind.assigned_role = null player.mind.special_role = null @@ -164,7 +158,7 @@ var/datum/controller/subsystem/job/SSjob //This is basically to ensure that there's atleast a few heads in the round /datum/controller/subsystem/job/proc/FillHeadPosition() for(var/level = 1 to 3) - for(var/command_position in command_positions) + for(var/command_position in GLOB.command_positions) var/datum/job/job = GetJob(command_position) if(!job) continue @@ -182,7 +176,7 @@ var/datum/controller/subsystem/job/SSjob //This proc is called at the start of the level loop of DivideOccupations() and will cause head jobs to be checked before any other jobs of the same level //This is also to ensure we get as many heads as possible /datum/controller/subsystem/job/proc/CheckHeadPositions(level) - for(var/command_position in command_positions) + for(var/command_position in GLOB.command_positions) var/datum/job/job = GetJob(command_position) if(!job) continue @@ -193,8 +187,6 @@ var/datum/controller/subsystem/job/SSjob continue var/mob/dead/new_player/candidate = pick(candidates) AssignRole(candidate, command_position) - return - /datum/controller/subsystem/job/proc/FillAIPosition() var/ai_selected = 0 @@ -223,14 +215,14 @@ var/datum/controller/subsystem/job/SSjob //Setup new player list and get the jobs list Debug("Running DO") - //Holder for Triumvirate is stored in the ticker, this just processes it - if(ticker) + //Holder for Triumvirate is stored in the SSticker, this just processes it + if(SSticker) for(var/datum/job/ai/A in occupations) - if(ticker.triai) + if(SSticker.triai) A.spawn_positions = 3 //Get the players who are ready - for(var/mob/dead/new_player/player in player_list) + for(var/mob/dead/new_player/player in GLOB.player_list) if(player.ready && player.mind && !player.mind.assigned_role) unassigned += player @@ -356,7 +348,8 @@ var/datum/controller/subsystem/job/SSjob RejectPlayer(player) for(var/mob/dead/new_player/player in unassigned) //Players that wanted to back out but couldn't because they're antags (can you feel the edge case?) - GiveRandomJob(player) + if(!GiveRandomJob(player)) + AssignRole(player, "Assistant") //If everything is already filled, make them an assistant return 1 @@ -377,7 +370,7 @@ var/datum/controller/subsystem/job/SSjob //If we joined at roundstart we should be positioned at our workstation if(!joined_late) var/obj/S = null - for(var/obj/effect/landmark/start/sloc in start_landmarks_list) + for(var/obj/effect/landmark/start/sloc in GLOB.start_landmarks_list) if(sloc.name != rank) S = sloc //so we can revert to spawning them on top of eachother if something goes wrong continue @@ -387,7 +380,7 @@ var/datum/controller/subsystem/job/SSjob break if(!S) //if there isn't a spawnpoint send them to latejoin, if there's no latejoin go yell at your mapper log_world("Couldn't find a round start spawn point for [rank]") - S = get_turf(pick(latejoin)) + S = get_turf(pick(GLOB.latejoin)) if(!S) //final attempt, lets find some area in the arrivals shuttle to spawn them in to. log_world("Couldn't find a round start latejoin spawn point.") for(var/turf/T in get_area_turfs(/area/shuttle/arrival)) @@ -446,10 +439,10 @@ var/datum/controller/subsystem/job/SSjob if(equip_needed < 0) // -1: infinite available slots equip_needed = 12 for(var/i=equip_needed-5, i>0, i--) - if(secequipment.len) - var/spawnloc = secequipment[1] + if(GLOB.secequipment.len) + var/spawnloc = GLOB.secequipment[1] new /obj/structure/closet/secure_closet/security/sec(spawnloc) - secequipment -= spawnloc + GLOB.secequipment -= spawnloc else //We ran out of spare locker spawns! break @@ -472,7 +465,7 @@ var/datum/controller/subsystem/job/SSjob var/level4 = 0 //never var/level5 = 0 //banned var/level6 = 0 //account too young - for(var/mob/dead/new_player/player in player_list) + for(var/mob/dead/new_player/player in GLOB.player_list) if(!(player.ready && player.mind && !player.mind.assigned_role)) continue //This player is not ready if(jobban_isbanned(player, job.title)) diff --git a/code/controllers/subsystem/lighting.dm b/code/controllers/subsystem/lighting.dm index 7d3d632544..a6547cd903 100644 --- a/code/controllers/subsystem/lighting.dm +++ b/code/controllers/subsystem/lighting.dm @@ -1,11 +1,8 @@ -var/datum/controller/subsystem/lighting/SSlighting +GLOBAL_LIST_EMPTY(lighting_update_lights) // List of lighting sources queued for update. +GLOBAL_LIST_EMPTY(lighting_update_corners) // List of lighting corners queued for update. +GLOBAL_LIST_EMPTY(lighting_update_objects) // List of lighting objects queued for update. -var/list/lighting_update_lights = list() // List of lighting sources queued for update. -var/list/lighting_update_corners = list() // List of lighting corners queued for update. -var/list/lighting_update_objects = list() // List of lighting objects queued for update. - - -/datum/controller/subsystem/lighting +SUBSYSTEM_DEF(lighting) name = "Lighting" wait = 2 init_order = -20 @@ -13,13 +10,8 @@ var/list/lighting_update_objects = list() // List of lighting objects queued fo var/initialized = FALSE - -/datum/controller/subsystem/lighting/New() - NEW_SS_GLOBAL(SSlighting) - - /datum/controller/subsystem/lighting/stat_entry() - ..("L:[lighting_update_lights.len]|C:[lighting_update_corners.len]|O:[lighting_update_objects.len]") + ..("L:[GLOB.lighting_update_lights.len]|C:[GLOB.lighting_update_corners.len]|O:[GLOB.lighting_update_objects.len]") /datum/controller/subsystem/lighting/Initialize(timeofday) @@ -30,7 +22,7 @@ var/list/lighting_update_objects = list() // List of lighting objects queued fo create_all_lighting_objects() initialized = TRUE - + fire(FALSE, TRUE) ..() @@ -38,11 +30,11 @@ var/list/lighting_update_objects = list() // List of lighting objects queued fo /datum/controller/subsystem/lighting/fire(resumed, init_tick_checks) var/real_tick_limit if(!init_tick_checks) - real_tick_limit = CURRENT_TICKLIMIT - CURRENT_TICKLIMIT = ((real_tick_limit - world.tick_usage) / 3) + world.tick_usage + real_tick_limit = GLOB.CURRENT_TICKLIMIT + GLOB.CURRENT_TICKLIMIT = ((real_tick_limit - world.tick_usage) / 3) + world.tick_usage var/i = 0 - for (i in 1 to lighting_update_lights.len) - var/datum/light_source/L = lighting_update_lights[i] + for (i in 1 to GLOB.lighting_update_lights.len) + var/datum/light_source/L = GLOB.lighting_update_lights[i] if (L.check() || L.destroyed || L.force_update) L.remove_lum() @@ -55,20 +47,20 @@ var/list/lighting_update_objects = list() // List of lighting objects queued fo L.vis_update = FALSE L.force_update = FALSE L.needs_update = FALSE - + if(init_tick_checks) CHECK_TICK else if (MC_TICK_CHECK) break if (i) - lighting_update_lights.Cut(1, i+1) + GLOB.lighting_update_lights.Cut(1, i+1) i = 0 if(!init_tick_checks) - CURRENT_TICKLIMIT = ((real_tick_limit - world.tick_usage)/2)+world.tick_usage + GLOB.CURRENT_TICKLIMIT = ((real_tick_limit - world.tick_usage)/2)+world.tick_usage - for (i in 1 to lighting_update_corners.len) - var/datum/lighting_corner/C = lighting_update_corners[i] + for (i in 1 to GLOB.lighting_update_corners.len) + var/datum/lighting_corner/C = GLOB.lighting_update_corners[i] C.update_objects() C.needs_update = FALSE @@ -77,15 +69,15 @@ var/list/lighting_update_objects = list() // List of lighting objects queued fo else if (MC_TICK_CHECK) break if (i) - lighting_update_corners.Cut(1, i+1) + GLOB.lighting_update_corners.Cut(1, i+1) i = 0 if(!init_tick_checks) - CURRENT_TICKLIMIT = real_tick_limit + GLOB.CURRENT_TICKLIMIT = real_tick_limit - for (i in 1 to lighting_update_objects.len) - var/atom/movable/lighting_object/O = lighting_update_objects[i] + for (i in 1 to GLOB.lighting_update_objects.len) + var/atom/movable/lighting_object/O = GLOB.lighting_update_objects[i] if (QDELETED(O)) continue @@ -97,9 +89,9 @@ var/list/lighting_update_objects = list() // List of lighting objects queued fo else if (MC_TICK_CHECK) break if (i) - lighting_update_objects.Cut(1, i+1) + GLOB.lighting_update_objects.Cut(1, i+1) /datum/controller/subsystem/lighting/Recover() initialized = SSlighting.initialized - ..() \ No newline at end of file + ..() diff --git a/code/controllers/subsystem/machines.dm b/code/controllers/subsystem/machines.dm index 0f2356a8f2..9852752081 100644 --- a/code/controllers/subsystem/machines.dm +++ b/code/controllers/subsystem/machines.dm @@ -1,6 +1,4 @@ -var/datum/controller/subsystem/machines/SSmachine - -/datum/controller/subsystem/machines +SUBSYSTEM_DEF(machines) name = "Machines" init_order = 9 flags = SS_KEEP_TIMING @@ -8,7 +6,6 @@ var/datum/controller/subsystem/machines/SSmachine var/list/currentrun = list() var/list/powernets = list() - /datum/controller/subsystem/machines/Initialize() makepowernets() fire() @@ -19,16 +16,12 @@ var/datum/controller/subsystem/machines/SSmachine qdel(PN) powernets.Cut() - for(var/obj/structure/cable/PC in cable_list) + for(var/obj/structure/cable/PC in GLOB.cable_list) if(!PC.powernet) var/datum/powernet/NewPN = new() NewPN.add_cable(PC) propagate_network(PC,PC.powernet) -/datum/controller/subsystem/machines/New() - NEW_SS_GLOBAL(SSmachine) - - /datum/controller/subsystem/machines/stat_entry() ..("M:[processing.len]|PN:[powernets.len]") @@ -65,7 +58,7 @@ var/datum/controller/subsystem/machines/SSmachine propagate_network(PC,PC.powernet) /datum/controller/subsystem/machines/Recover() - if (istype(SSmachine.processing)) - processing = SSmachine.processing - if (istype(SSmachine.powernets)) - powernets = SSmachine.powernets \ No newline at end of file + if (istype(SSmachines.processing)) + processing = SSmachines.processing + if (istype(SSmachines.powernets)) + powernets = SSmachines.powernets \ No newline at end of file diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index 3b46d8e719..bae759ac3a 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -1,6 +1,4 @@ -var/datum/controller/subsystem/mapping/SSmapping - -/datum/controller/subsystem/mapping +SUBSYSTEM_DEF(mapping) name = "Mapping" init_order = 12 flags = SS_NO_FIRE @@ -8,7 +6,6 @@ var/datum/controller/subsystem/mapping/SSmapping var/list/nuke_tiles = list() var/list/nuke_threats = list() - var/datum/map_config/previous_map_config var/datum/map_config/config var/datum/map_config/next_map_config @@ -21,12 +18,7 @@ var/datum/controller/subsystem/mapping/SSmapping var/list/shuttle_templates = list() var/list/shelter_templates = list() -/datum/controller/subsystem/mapping/New() - NEW_SS_GLOBAL(SSmapping) - if(!previous_map_config) - previous_map_config = new("data/previous_map.json", delete_after = TRUE) - if(previous_map_config.defaulted) - previous_map_config = null +/datum/controller/subsystem/mapping/PreInit() if(!config) #ifdef FORCE_MAP config = new(FORCE_MAP) @@ -97,7 +89,6 @@ var/datum/controller/subsystem/mapping/SSmapping shuttle_templates = SSmapping.shuttle_templates shelter_templates = SSmapping.shelter_templates - previous_map_config = SSmapping.previous_map_config config = SSmapping.config next_map_config = SSmapping.next_map_config @@ -119,12 +110,13 @@ var/datum/controller/subsystem/mapping/SSmapping /datum/controller/subsystem/mapping/proc/loadWorld() //if any of these fail, something has gone horribly, HORRIBLY, wrong var/list/FailedZs = list() - + var/start_time = REALTIMEOFDAY - + INIT_ANNOUNCE("Loading [config.map_name]...") TryLoadZ(config.GetFullMapPath(), FailedZs, ZLEVEL_STATION) INIT_ANNOUNCE("Loaded station in [(REALTIMEOFDAY - start_time)/10]s!") + feedback_add_details("map_name", config.map_name) if(config.minetype != "lavaland") INIT_ANNOUNCE("WARNING: A map without lavaland set as it's minetype was loaded! This is being ignored! Update the maploader code!") @@ -141,11 +133,11 @@ var/datum/controller/subsystem/mapping/SSmapping #undef INIT_ANNOUNCE /datum/controller/subsystem/mapping/proc/maprotate() - var/players = clients.len + var/players = GLOB.clients.len var/list/mapvotes = list() //count votes if(global.config.allow_map_voting) - for (var/client/c in clients) + for (var/client/c in GLOB.clients) var/vote = c.prefs.preferred_map if (!vote) if (global.config.defaultmap) @@ -194,10 +186,6 @@ var/datum/controller/subsystem/mapping/SSmapping next_map_config = VM return TRUE -/datum/controller/subsystem/mapping/Shutdown() - if(config) - config.MakePreviousMap() - /datum/controller/subsystem/mapping/proc/preloadTemplates(path = "_maps/templates/") //see master controller setup var/list/filelist = flist(path) for(var/map in filelist) diff --git a/code/controllers/subsystem/minimap.dm b/code/controllers/subsystem/minimap.dm index 8d8fd6fcec..6c3ce67dc2 100644 --- a/code/controllers/subsystem/minimap.dm +++ b/code/controllers/subsystem/minimap.dm @@ -1,6 +1,4 @@ -var/datum/controller/subsystem/minimap/SSminimap - -/datum/controller/subsystem/minimap +SUBSYSTEM_DEF(minimap) name = "Minimap" init_order = -2 flags = SS_NO_FIRE @@ -9,9 +7,6 @@ var/datum/controller/subsystem/minimap/SSminimap var/list/z_levels = list(ZLEVEL_STATION) -/datum/controller/subsystem/minimap/New() - NEW_SS_GLOBAL(SSminimap) - /datum/controller/subsystem/minimap/Initialize(timeofday) var/hash = md5(SSmapping.config.GetFullMapPath()) if(config.generate_minimaps) diff --git a/code/controllers/subsystem/mobs.dm b/code/controllers/subsystem/mobs.dm index 0ffab58567..44cd2e33b3 100644 --- a/code/controllers/subsystem/mobs.dm +++ b/code/controllers/subsystem/mobs.dm @@ -1,6 +1,4 @@ -var/datum/controller/subsystem/mobs/SSmob - -/datum/controller/subsystem/mobs +SUBSYSTEM_DEF(mobs) name = "Mobs" init_order = 4 priority = 100 @@ -8,18 +6,14 @@ var/datum/controller/subsystem/mobs/SSmob var/list/currentrun = list() -/datum/controller/subsystem/mobs/New() - NEW_SS_GLOBAL(SSmob) - - /datum/controller/subsystem/mobs/stat_entry() - ..("P:[mob_list.len]") + ..("P:[GLOB.mob_list.len]") /datum/controller/subsystem/mobs/fire(resumed = 0) var/seconds = wait * 0.1 if (!resumed) - src.currentrun = mob_list.Copy() + src.currentrun = GLOB.mob_list.Copy() //cache for sanic speed (lists are references anyways) var/list/currentrun = src.currentrun @@ -30,6 +24,6 @@ var/datum/controller/subsystem/mobs/SSmob if(M) M.Life(seconds) else - mob_list.Remove(M) + GLOB.mob_list.Remove(M) if (MC_TICK_CHECK) return \ No newline at end of file diff --git a/code/controllers/subsystem/npcpool.dm b/code/controllers/subsystem/npcpool.dm index ebaa5da06f..88f02b314a 100644 --- a/code/controllers/subsystem/npcpool.dm +++ b/code/controllers/subsystem/npcpool.dm @@ -1,39 +1,31 @@ -var/datum/controller/subsystem/npcpool/SSnpc +#define PROCESSING_NPCS 0 +#define PROCESSING_DELEGATES 1 +#define PROCESSING_ASSISTANTS 2 -/datum/controller/subsystem/npcpool +SUBSYSTEM_DEF(npcpool) name = "NPC Pool" - init_order = 17 - flags = SS_POST_FIRE_TIMING|SS_NO_INIT|SS_NO_TICK_CHECK - priority = 25 + flags = SS_POST_FIRE_TIMING|SS_NO_INIT|SS_BACKGROUND + priority = 20 var/list/canBeUsed = list() - var/list/canBeUsed_non = list() var/list/needsDelegate = list() var/list/needsAssistant = list() - var/list/needsHelp_non = list() - var/list/botPool_l = list() //list of all npcs using the pool - var/list/botPool_l_non = list() //list of all non SNPC mobs using the pool - -/datum/controller/subsystem/npcpool/proc/insertBot(toInsert) - if(istype(toInsert,/mob/living/carbon/human/interactive)) - botPool_l |= toInsert - -/datum/controller/subsystem/npcpool/New() - NEW_SS_GLOBAL(SSnpc) + + var/list/processing = list() + var/list/currentrun = list() + var/stage /datum/controller/subsystem/npcpool/stat_entry() - ..("T:[botPool_l.len + botPool_l_non.len]|D:[needsDelegate.len]|A:[needsAssistant.len + needsHelp_non.len]|U:[canBeUsed.len + canBeUsed_non.len]") + ..("NPCS:[processing.len]|D:[needsDelegate.len]|A:[needsAssistant.len]|U:[canBeUsed.len]") +/datum/controller/subsystem/npcpool/proc/stop_processing(mob/living/carbon/human/interactive/I) + processing -= I + currentrun -= I + needsDelegate -= I + canBeUsed -= I + needsAssistant -= I -/datum/controller/subsystem/npcpool/proc/cleanNull() - //cleanup nulled bots - listclearnulls(botPool_l) - listclearnulls(needsDelegate) - listclearnulls(canBeUsed) - listclearnulls(needsAssistant) - - -/datum/controller/subsystem/npcpool/fire() +/datum/controller/subsystem/npcpool/fire(resumed = FALSE) //bot delegation and coordination systems //General checklist/Tasks for delegating a task or coordinating it (for SNPCs) // 1. Bot proximity to task target: if too far, delegate, if close, coordinate @@ -41,87 +33,94 @@ var/datum/controller/subsystem/npcpool/SSnpc // 3. Process delegation: if a bot (or bots) has been delegated, assign them to the task. // 4. Process coordination: if a bot(or bots) has been asked to coordinate, assign them to help. // 5. Do all assignments: goes through the delegated/coordianted bots and assigns the right variables/tasks to them. - var/npcCount = 1 - cleanNull() + if (!resumed) + src.currentrun = processing.Copy() + stage = PROCESSING_NPCS + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + var/list/canBeUsed = src.canBeUsed - //SNPC handling - for(var/mob/living/carbon/human/interactive/check in botPool_l) - if(!check) - botPool_l.Cut(npcCount,npcCount+1) - continue - var/checkInRange = view(MAX_RANGE_FIND,check) - if(!(locate(check.TARGET) in checkInRange)) - needsDelegate |= check + if(stage == PROCESSING_NPCS) + while(currentrun.len) + var/mob/living/carbon/human/interactive/thing = currentrun[currentrun.len] + --currentrun.len - else if(check.IsDeadOrIncap(FALSE)) - needsDelegate |= check + thing.InteractiveProcess() - else if(check.doing & FIGHTING) - needsAssistant |= check + var/checkInRange = view(MAX_RANGE_FIND,thing) + if(thing.IsDeadOrIncap(FALSE) || !(locate(thing.TARGET) in checkInRange)) + needsDelegate += thing + else if(thing.doing & FIGHTING) + needsAssistant += thing + else + canBeUsed += thing - else - canBeUsed |= check - npcCount++ + if (MC_TICK_CHECK) + return + stage = PROCESSING_DELEGATES + currentrun = needsDelegate //localcache + src.currentrun = currentrun - if(needsDelegate.len) + if(stage == PROCESSING_DELEGATES) + while(currentrun.len && canBeUsed.len) + var/mob/living/carbon/human/interactive/check = currentrun[currentrun.len] + var/mob/living/carbon/human/interactive/candidate = canBeUsed[canBeUsed.len] + --currentrun.len - needsDelegate -= pick(needsDelegate) // cheapo way to make sure stuff doesn't pingpong around in the pool forever. delegation runs seperately to each loop so it will work much smoother + var/helpProb = 0 + var/list/chfac = check.faction + var/list/canfac = candidate.faction + var/facCount = LAZYLEN(chfac) * LAZYLEN(canfac) - npcCount = 1 //reset the count - for(var/mob/living/carbon/human/interactive/check in needsDelegate) - if(!check) - needsDelegate.Cut(npcCount,npcCount+1) - continue - if(canBeUsed.len) - var/mob/living/carbon/human/interactive/candidate = pick(canBeUsed) - var/facCount = 0 - var/helpProb = 0 - for(var/C in check.faction) - for(var/D in candidate.faction) - if(D == C) - helpProb = min(100,helpProb + 25) - facCount++ - if(facCount == 1 && helpProb > 0) - helpProb = 100 - if(prob(helpProb)) - if(candidate.takeDelegate(check)) - needsDelegate -= check - canBeUsed -= candidate - candidate.eye_color = "red" - candidate.update_icons() - npcCount++ + for(var/C in chfac) + if(C in canfac) + helpProb = min(100,helpProb + 25) + if(helpProb >= 100) + break - if(needsAssistant.len) + if(facCount == 1 && helpProb) + helpProb = 100 - needsAssistant -= pick(needsAssistant) + if(prob(helpProb) && candidate.takeDelegate(check)) + --canBeUsed.len + candidate.eye_color = "red" + candidate.update_icons() - npcCount = 1 //reset the count - for(var/mob/living/carbon/human/interactive/check in needsAssistant) - if(!check) - needsAssistant.Cut(npcCount,npcCount+1) - continue - if(canBeUsed.len) - var/mob/living/carbon/human/interactive/candidate = pick(canBeUsed) - var/facCount = 0 - var/helpProb = 0 - for(var/C in check.faction) - for(var/D in candidate.faction) - if(D == C) - helpProb = min(100,helpProb + 25) - facCount++ - if(facCount == 1 && helpProb > 0) - helpProb = 100 - if(prob(helpProb)) - if(candidate.takeDelegate(check,FALSE)) - needsAssistant -= check - canBeUsed -= candidate - candidate.eye_color = "yellow" - candidate.update_icons() - npcCount++ + if(MC_TICK_CHECK) + return + stage = PROCESSING_ASSISTANTS + currentrun = needsAssistant //localcache + src.currentrun = currentrun + + //no need for the stage check + + while(currentrun.len && canBeUsed.len) + var/mob/living/carbon/human/interactive/check = currentrun[currentrun.len] + var/mob/living/carbon/human/interactive/candidate = canBeUsed[canBeUsed.len] + --currentrun.len + + var/helpProb = 0 + var/list/chfac = check.faction + var/list/canfac = candidate.faction + var/facCount = LAZYLEN(chfac) * LAZYLEN(canfac) + + for(var/C in chfac) + if(C in canfac) + helpProb = min(100,helpProb + 25) + if(helpProb >= 100) + break + + if(facCount == 1 && helpProb) + helpProb = 100 + + if(prob(helpProb) && candidate.takeDelegate(check,FALSE)) + --canBeUsed.len + candidate.eye_color = "yellow" + candidate.update_icons() + + if(!currentrun.len || MC_TICK_CHECK) //don't change SS state if it isn't necessary + return /datum/controller/subsystem/npcpool/Recover() - if (istype(SSnpc.botPool_l)) - botPool_l = SSnpc.botPool_l - if (istype(SSnpc.botPool_l_non)) - botPool_l_non = SSnpc.botPool_l_non \ No newline at end of file + processing = SSnpcpool.processing diff --git a/code/controllers/subsystem/orbit.dm b/code/controllers/subsystem/orbit.dm index 90b1390713..6184bb005b 100644 --- a/code/controllers/subsystem/orbit.dm +++ b/code/controllers/subsystem/orbit.dm @@ -1,6 +1,4 @@ -var/datum/controller/subsystem/orbit/SSorbit - -/datum/controller/subsystem/orbit +SUBSYSTEM_DEF(orbit) name = "Orbits" priority = 35 wait = 2 @@ -9,10 +7,6 @@ var/datum/controller/subsystem/orbit/SSorbit var/list/currentrun = list() var/list/processing = list() -/datum/controller/subsystem/orbit/New() - NEW_SS_GLOBAL(SSorbit) - - /datum/controller/subsystem/orbit/stat_entry() ..("P:[processing.len]") diff --git a/code/controllers/subsystem/pai.dm b/code/controllers/subsystem/pai.dm index 15c3a8307f..dfb41c8905 100644 --- a/code/controllers/subsystem/pai.dm +++ b/code/controllers/subsystem/pai.dm @@ -1,7 +1,4 @@ -var/datum/controller/subsystem/pai/SSpai -var/list/obj/item/device/paicard/pai_card_list = list() - -/datum/controller/subsystem/pai +SUBSYSTEM_DEF(pai) name = "pAI" flags = SS_NO_INIT|SS_NO_FIRE @@ -9,9 +6,7 @@ var/list/obj/item/device/paicard/pai_card_list = list() var/list/candidates = list() var/ghost_spam = FALSE var/spam_delay = 100 - -/datum/controller/subsystem/pai/New() - NEW_SS_GLOBAL(SSpai) + var/list/pai_card_list = list() /datum/controller/subsystem/pai/Topic(href, href_list[]) if(href_list["download"]) @@ -24,7 +19,7 @@ var/list/obj/item/device/paicard/pai_card_list = list() return FALSE var/mob/living/silicon/pai/pai = new(card) if(!candidate.name) - pai.name = pick(ninja_names) + pai.name = pick(GLOB.ninja_names) else pai.name = candidate.name pai.real_name = pai.name @@ -32,8 +27,8 @@ var/list/obj/item/device/paicard/pai_card_list = list() card.setPersonality(pai) - ticker.mode.update_cult_icons_removed(card.pai.mind) - ticker.mode.update_rev_icons_removed(card.pai.mind) + SSticker.mode.update_cult_icons_removed(card.pai.mind) + SSticker.mode.update_rev_icons_removed(card.pai.mind) candidates -= candidate usr << browse(null, "window=findPai") @@ -141,7 +136,7 @@ var/list/obj/item/device/paicard/pai_card_list = list() /datum/controller/subsystem/pai/proc/check_ready(var/datum/paiCandidate/C) if(!C.ready) return FALSE - for(var/mob/dead/observer/O in player_list) + for(var/mob/dead/observer/O in GLOB.player_list) if(O.key == C.key) return C return FALSE @@ -149,7 +144,7 @@ var/list/obj/item/device/paicard/pai_card_list = list() /datum/controller/subsystem/pai/proc/findPAI(obj/item/device/paicard/p, mob/user) if(!ghost_spam) ghost_spam = TRUE - for(var/mob/dead/observer/G in player_list) + for(var/mob/dead/observer/G in GLOB.player_list) if(!G.key || !G.client) continue if(!(ROLE_PAI in G.client.prefs.be_special)) diff --git a/code/controllers/subsystem/parallax.dm b/code/controllers/subsystem/parallax.dm index fb8e317086..6ce2928f89 100644 --- a/code/controllers/subsystem/parallax.dm +++ b/code/controllers/subsystem/parallax.dm @@ -1,19 +1,13 @@ -var/datum/controller/subsystem/parallax/SSparallax - -/datum/controller/subsystem/parallax +SUBSYSTEM_DEF(parallax) name = "Parallax" wait = 2 flags = SS_POST_FIRE_TIMING | SS_FIRE_IN_LOBBY | SS_BACKGROUND | SS_NO_INIT priority = 65 var/list/currentrun -/datum/controller/subsystem/parallax/New() - NEW_SS_GLOBAL(SSparallax) - return ..() - /datum/controller/subsystem/parallax/fire(resumed = 0) if (!resumed) - src.currentrun = clients.Copy() + src.currentrun = GLOB.clients.Copy() //cache for sanic speed (lists are references anyways) var/list/currentrun = src.currentrun diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm index 818e64940a..80517d1e3a 100644 --- a/code/controllers/subsystem/persistence.dm +++ b/code/controllers/subsystem/persistence.dm @@ -1,6 +1,4 @@ -var/datum/controller/subsystem/persistence/SSpersistence - -/datum/controller/subsystem/persistence +SUBSYSTEM_DEF(persistence) name = "Persistence" init_order = -100 flags = SS_NO_FIRE @@ -13,9 +11,6 @@ var/datum/controller/subsystem/persistence/SSpersistence var/list/saved_messages = list() var/savefile/chisel_messages_sav -/datum/controller/subsystem/persistence/New() - NEW_SS_GLOBAL(SSpersistence) - /datum/controller/subsystem/persistence/Initialize() LoadSatchels() LoadPoly() @@ -71,7 +66,7 @@ var/datum/controller/subsystem/persistence/SSpersistence return 1 /datum/controller/subsystem/persistence/proc/LoadPoly() - for(var/mob/living/simple_animal/parrot/Poly/P in living_mob_list) + for(var/mob/living/simple_animal/parrot/Poly/P in GLOB.living_mob_list) twitterize(P.speech_buffer, "polytalk") break //Who's been duping the bird?! @@ -86,12 +81,25 @@ var/datum/controller/subsystem/persistence/SSpersistence var/saved_messages = json_decode(saved_json) for(var/item in saved_messages) - var/turf/T = locate(item["x"], item["y"], ZLEVEL_STATION) + if(!islist(item)) + continue + + var/xvar = item["x"] + var/yvar = item["y"] + var/zvar = item["z"] + + if(!xvar || !yvar || !zvar) + continue + + var/turf/T = locate(xvar, yvar, zvar) if(!isturf(T)) continue + if(locate(/obj/structure/chisel_message) in T) continue + var/obj/structure/chisel_message/M = new(T) + M.unpack(item) if(!M.loc) M.persists = FALSE diff --git a/code/controllers/subsystem/ping.dm b/code/controllers/subsystem/ping.dm index d1297c692c..0829766174 100644 --- a/code/controllers/subsystem/ping.dm +++ b/code/controllers/subsystem/ping.dm @@ -1,20 +1,15 @@ #define PING_BUFFER_TIME 25 -var/datum/controller/subsystem/ping/SSping - -/datum/controller/subsystem/ping +SUBSYSTEM_DEF(ping) name = "Ping" wait = 6 flags = SS_NO_INIT|SS_POST_FIRE_TIMING|SS_FIRE_IN_LOBBY priority = 10 var/list/currentrun -/datum/controller/subsystem/ping/New() - NEW_SS_GLOBAL(SSping) - /datum/controller/subsystem/ping/fire(resumed = FALSE) if (!resumed) - src.currentrun = clients.Copy() + src.currentrun = GLOB.clients.Copy() var/list/currentrun = src.currentrun while (length(currentrun)) diff --git a/code/controllers/subsystem/processing/fastprocess.dm b/code/controllers/subsystem/processing/fastprocess.dm index 53898e142e..9622e02146 100644 --- a/code/controllers/subsystem/processing/fastprocess.dm +++ b/code/controllers/subsystem/processing/fastprocess.dm @@ -1,10 +1,6 @@ //Fires five times every second. -var/datum/controller/subsystem/processing/fastprocess/SSfastprocess -/datum/controller/subsystem/processing/fastprocess +PROCESSING_SUBSYSTEM_DEF(fastprocess) name = "Fast Processing" wait = 2 stat_tag = "FP" - -/datum/controller/subsystem/processing/fastprocess/New() - NEW_SS_GLOBAL(SSfastprocess) diff --git a/code/controllers/subsystem/processing/flightpacks.dm b/code/controllers/subsystem/processing/flightpacks.dm index fee475d730..1d85811878 100644 --- a/code/controllers/subsystem/processing/flightpacks.dm +++ b/code/controllers/subsystem/processing/flightpacks.dm @@ -1,11 +1,25 @@ - -var/datum/controller/subsystem/processing/flightpacks/SSflightpacks -/datum/controller/subsystem/processing/flightpacks +PROCESSING_SUBSYSTEM_DEF(flightpacks) name = "Flightpack Movement" priority = 30 wait = 2 stat_tag = "FM" flags = SS_NO_INIT|SS_TICKER|SS_KEEP_TIMING -/datum/controller/subsystem/processing/flightpacks/New() - NEW_SS_GLOBAL(SSflightpacks) + var/flightsuit_processing = FLIGHTSUIT_PROCESSING_FULL + +/datum/controller/subsystem/processing/flightpacks/Initialize() + sync_flightsuit_processing() + +/datum/controller/subsystem/processing/flightpacks/vv_edit_var(var_name, var_value) + ..() + switch(var_name) + if("flightsuit_processing") + sync_flightsuit_processing() + +/datum/controller/subsystem/processing/flightpacks/proc/sync_flightsuit_processing() + for(var/obj/item/device/flightpack/FP in processing) + FP.sync_processing(src) + if(flightsuit_processing == FLIGHTSUIT_PROCESSING_NONE) //Don't even bother firing. + can_fire = FALSE + else + can_fire = TRUE diff --git a/code/controllers/subsystem/processing/objects.dm b/code/controllers/subsystem/processing/obj.dm similarity index 63% rename from code/controllers/subsystem/processing/objects.dm rename to code/controllers/subsystem/processing/obj.dm index ee15dc0603..29fe277232 100644 --- a/code/controllers/subsystem/processing/objects.dm +++ b/code/controllers/subsystem/processing/obj.dm @@ -1,5 +1,4 @@ -var/datum/controller/subsystem/objects/SSobj -/datum/controller/subsystem/objects +SUBSYSTEM_DEF(obj) name = "Objects" priority = 40 flags = SS_NO_INIT @@ -7,12 +6,10 @@ var/datum/controller/subsystem/objects/SSobj var/list/processing = list() var/list/currentrun = list() -/datum/controller/subsystem/objects/New() - NEW_SS_GLOBAL(SSobj) -/datum/controller/subsystem/objects/stat_entry() +/datum/controller/subsystem/obj/stat_entry() ..("P:[processing.len]") -/datum/controller/subsystem/objects/fire(resumed = 0) +/datum/controller/subsystem/obj/fire(resumed = 0) if (!resumed) src.currentrun = processing.Copy() //cache for sanic speed (lists are references anyways) @@ -28,5 +25,5 @@ var/datum/controller/subsystem/objects/SSobj if (MC_TICK_CHECK) return -/datum/controller/subsystem/objects/Recover() +/datum/controller/subsystem/obj/Recover() processing = SSobj.processing diff --git a/code/controllers/subsystem/processing/overlays.dm b/code/controllers/subsystem/processing/overlays.dm index 5cb6490982..c28dc245fa 100644 --- a/code/controllers/subsystem/processing/overlays.dm +++ b/code/controllers/subsystem/processing/overlays.dm @@ -1,6 +1,4 @@ -var/datum/controller/subsystem/processing/overlays/SSoverlays - -/datum/controller/subsystem/processing/overlays +PROCESSING_SUBSYSTEM_DEF(overlays) name = "Overlay" flags = SS_TICKER|SS_FIRE_IN_LOBBY wait = 1 @@ -13,8 +11,7 @@ var/datum/controller/subsystem/processing/overlays/SSoverlays var/list/overlay_icon_cache var/initialized = FALSE -/datum/controller/subsystem/processing/overlays/New() - NEW_SS_GLOBAL(SSoverlays) +/datum/controller/subsystem/processing/overlays/PreInit() LAZYINITLIST(overlay_icon_state_caches) LAZYINITLIST(overlay_icon_cache) @@ -171,7 +168,7 @@ var/datum/controller/subsystem/processing/overlays/SSoverlays var/list/cached_other = other.our_overlays if(cached_other) - if(cut_old) + if(cut_old || !LAZYLEN(our_overlays)) our_overlays = cached_other.Copy() else our_overlays |= cached_other diff --git a/code/controllers/subsystem/processing/processing.dm b/code/controllers/subsystem/processing/processing.dm index ef03ce6db6..602455621b 100644 --- a/code/controllers/subsystem/processing/processing.dm +++ b/code/controllers/subsystem/processing/processing.dm @@ -1,7 +1,6 @@ //Used to process objects. Fires once every second. -var/datum/controller/subsystem/processing/SSprocessing -/datum/controller/subsystem/processing +SUBSYSTEM_DEF(processing) name = "Processing" priority = 25 flags = SS_BACKGROUND|SS_POST_FIRE_TIMING|SS_NO_INIT @@ -11,9 +10,6 @@ var/datum/controller/subsystem/processing/SSprocessing var/list/processing = list() var/list/currentrun = list() -/datum/controller/subsystem/processing/New() - NEW_SS_GLOBAL(SSprocessing) - /datum/controller/subsystem/processing/stat_entry() ..("[stat_tag]:[processing.len]") diff --git a/code/controllers/subsystem/radio.dm b/code/controllers/subsystem/radio.dm index 922b176428..d69575f60f 100644 --- a/code/controllers/subsystem/radio.dm +++ b/code/controllers/subsystem/radio.dm @@ -1,15 +1,10 @@ -var/datum/controller/subsystem/radio/SSradio - -/datum/controller/subsystem/radio +SUBSYSTEM_DEF(radio) name = "Radio" init_order = 18 flags = SS_NO_FIRE|SS_NO_INIT var/list/datum/radio_frequency/frequencies = list() -/datum/controller/subsystem/radio/New() - NEW_SS_GLOBAL(SSradio) - /datum/controller/subsystem/radio/proc/add_object(obj/device, new_frequency as num, filter = null as text|null) var/f_text = num2text(new_frequency) var/datum/radio_frequency/frequency = frequencies[f_text] diff --git a/code/controllers/subsystem/religion.dm b/code/controllers/subsystem/religion.dm index fe07d4e1ea..df772925d4 100644 --- a/code/controllers/subsystem/religion.dm +++ b/code/controllers/subsystem/religion.dm @@ -1,17 +1,11 @@ -var/datum/controller/subsystem/religion/SSreligion - -/datum/controller/subsystem/religion +SUBSYSTEM_DEF(religion) name = "Religion" init_order = 19 flags = SS_NO_FIRE|SS_NO_INIT - var/bible_deity_name - var/Bible_icon_state - var/Bible_item_state - var/Bible_name - var/Bible_deity_name - - var/holy_weapon - -/datum/controller/subsystem/religion/New() - NEW_SS_GLOBAL(SSreligion) + var/religion + var/deity + var/bible_name + var/bible_icon_state + var/bible_item_state + var/holy_weapon_type \ No newline at end of file diff --git a/code/controllers/subsystem/server_maintenance.dm b/code/controllers/subsystem/server_maint.dm similarity index 74% rename from code/controllers/subsystem/server_maintenance.dm rename to code/controllers/subsystem/server_maint.dm index c3a9aa64ad..84d0d333e4 100644 --- a/code/controllers/subsystem/server_maintenance.dm +++ b/code/controllers/subsystem/server_maint.dm @@ -1,13 +1,8 @@ -var/datum/controller/subsystem/server_maint/SSserver - -/datum/controller/subsystem/server_maint +SUBSYSTEM_DEF(server_maint) name = "Server Tasks" wait = 6000 flags = SS_NO_TICK_CHECK -/datum/controller/subsystem/server_maint/New() - NEW_SS_GLOBAL(SSserver) - /datum/controller/subsystem/server_maint/Initialize(timeofday) if (config.hub) world.visibility = 1 @@ -16,7 +11,7 @@ var/datum/controller/subsystem/server_maint/SSserver /datum/controller/subsystem/server_maint/fire() //handle kicking inactive players if(config.kick_inactive > 0) - for(var/client/C in clients) + for(var/client/C in GLOB.clients) if(C.is_afk(INACTIVITY_KICK)) if(!istype(C.mob, /mob/dead)) log_access("AFK: [key_name(C)]") diff --git a/code/controllers/subsystem/shuttles.dm b/code/controllers/subsystem/shuttle.dm similarity index 95% rename from code/controllers/subsystem/shuttles.dm rename to code/controllers/subsystem/shuttle.dm index 2be34c8f63..66d1bdca92 100644 --- a/code/controllers/subsystem/shuttles.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -1,9 +1,7 @@ #define HIGHLIGHT_DYNAMIC_TRANSIT 1 -var/datum/controller/subsystem/shuttle/SSshuttle - -/datum/controller/subsystem/shuttle - name = "Shuttles" +SUBSYSTEM_DEF(shuttle) + name = "Shuttle" wait = 10 init_order = 3 flags = SS_KEEP_TIMING|SS_NO_TICK_CHECK @@ -49,9 +47,6 @@ var/datum/controller/subsystem/shuttle/SSshuttle var/auto_call = 72000 //time before in deciseconds in which the shuttle is auto called. Default is 2 hours. -/datum/controller/subsystem/shuttle/New() - NEW_SS_GLOBAL(SSshuttle) - /datum/controller/subsystem/shuttle/Initialize(timeofday) if(!emergency) WARNING("No /obj/docking_port/mobile/arrivals placed on the map!") @@ -78,12 +73,12 @@ var/datum/controller/subsystem/shuttle/SSshuttle ..() /datum/controller/subsystem/shuttle/proc/setup_transit_zone() - if(transit_markers.len == 0) + if(GLOB.transit_markers.len == 0) WARNING("No /obj/effect/landmark/transit placed on the map!") return // transit zone - var/turf/A = get_turf(transit_markers[1]) - var/turf/B = get_turf(transit_markers[2]) + var/turf/A = get_turf(GLOB.transit_markers[1]) + var/turf/B = get_turf(GLOB.transit_markers[2]) for(var/i in block(A, B)) var/turf/T = i T.ChangeTurf(/turf/open/space) @@ -92,11 +87,11 @@ var/datum/controller/subsystem/shuttle/SSshuttle #ifdef HIGHLIGHT_DYNAMIC_TRANSIT /datum/controller/subsystem/shuttle/proc/color_space() - if(transit_markers.len == 0) + if(GLOB.transit_markers.len == 0) WARNING("No /obj/effect/landmark/transit placed on the map!") return - var/turf/A = get_turf(transit_markers[1]) - var/turf/B = get_turf(transit_markers[2]) + var/turf/A = get_turf(GLOB.transit_markers[1]) + var/turf/B = get_turf(GLOB.transit_markers[2]) for(var/i in block(A, B)) var/turf/T = i // Only dying the "pure" space, not the transit tiles @@ -181,8 +176,8 @@ var/datum/controller/subsystem/shuttle/SSshuttle return emergency = backup_shuttle - if(world.time - round_start_time < config.shuttle_refuel_delay) - to_chat(user, "The emergency shuttle is refueling. Please wait another [abs(round(((world.time - round_start_time) - config.shuttle_refuel_delay)/600))] minutes before trying again.") + if(world.time - SSticker.round_start_time < config.shuttle_refuel_delay) + to_chat(user, "The emergency shuttle is refueling. Please wait another [abs(round(((world.time - SSticker.round_start_time) - config.shuttle_refuel_delay)/600))] minutes before trying again.") return switch(emergency.mode) @@ -242,7 +237,7 @@ var/datum/controller/subsystem/shuttle/SSshuttle /datum/controller/subsystem/shuttle/proc/canRecall() if(!emergency || emergency.mode != SHUTTLE_CALL) return - if(ticker.mode.name == "meteor") + if(SSticker.mode.name == "meteor") return var/security_num = seclevel2num(get_security_level()) switch(security_num) @@ -260,9 +255,11 @@ var/datum/controller/subsystem/shuttle/SSshuttle /datum/controller/subsystem/shuttle/proc/autoEvac() var/callShuttle = 1 - for(var/thing in shuttle_caller_list) + for(var/thing in GLOB.shuttle_caller_list) if(isAI(thing)) var/mob/living/silicon/ai/AI = thing + if(AI.deployed_shell && !AI.deployed_shell.client) + continue if(AI.stat || !AI.client) continue else if(istype(thing, /obj/machinery/computer/communications)) @@ -281,8 +278,6 @@ var/datum/controller/subsystem/shuttle/SSshuttle log_game("There is no means of calling the shuttle anymore. Shuttle automatically called.") message_admins("All the communications consoles were destroyed and all AIs are inactive. Shuttle called.") - - /datum/controller/subsystem/shuttle/proc/registerHostileEnvironment(datum/bad) hostileEnvironments[bad] = TRUE checkHostileEnvironment() @@ -360,7 +355,6 @@ var/datum/controller/subsystem/shuttle/SSshuttle log_game("Round time limit reached. Shuttle has been auto-called.") message_admins("Round time limit reached. Shuttle called.") - /datum/controller/subsystem/shuttle/proc/generate_transit_dock(obj/docking_port/mobile/M) // First, determine the size of the needed zone // Because of shuttle rotation, the "width" of the shuttle is not @@ -469,6 +463,7 @@ var/datum/controller/subsystem/shuttle/SSshuttle //to_chat(world, "Making transit dock at [COORD(midpoint)]") var/area/shuttle/transit/A = new() A.parallax_movedir = travel_dir + A.contents = proposed_zone var/obj/docking_port/stationary/transit/new_transit_dock = new(midpoint) new_transit_dock.assigned_turfs = proposed_zone new_transit_dock.name = "Transit for [M.id]/[M.name]" @@ -484,7 +479,6 @@ var/datum/controller/subsystem/shuttle/SSshuttle var/turf/T = i T.ChangeTurf(transit_path) T.flags &= ~(UNUSED_TRANSIT_TURF) - A.contents += T M.assigned_transit = new_transit_dock return TRUE diff --git a/code/controllers/subsystem/spacedrift.dm b/code/controllers/subsystem/spacedrift.dm index d4b6d9143a..9b178a4e75 100644 --- a/code/controllers/subsystem/spacedrift.dm +++ b/code/controllers/subsystem/spacedrift.dm @@ -1,6 +1,4 @@ -var/datum/controller/subsystem/spacedrift/SSspacedrift - -/datum/controller/subsystem/spacedrift +SUBSYSTEM_DEF(spacedrift) name = "Space Drift" priority = 30 wait = 5 @@ -9,10 +7,6 @@ var/datum/controller/subsystem/spacedrift/SSspacedrift var/list/currentrun = list() var/list/processing = list() -/datum/controller/subsystem/spacedrift/New() - NEW_SS_GLOBAL(SSspacedrift) - - /datum/controller/subsystem/spacedrift/stat_entry() ..("P:[processing.len]") diff --git a/code/controllers/subsystem/squeak.dm b/code/controllers/subsystem/squeak.dm index 1bfef29a23..d7ee9c31c2 100644 --- a/code/controllers/subsystem/squeak.dm +++ b/code/controllers/subsystem/squeak.dm @@ -1,19 +1,14 @@ -var/datum/controller/subsystem/squeak/SSsqueak - // The Squeak // because this is about placement of mice mobs, and nothing to do with // mice - the computer peripheral -/datum/controller/subsystem/squeak +SUBSYSTEM_DEF(squeak) name = "Squeak" priority = 40 flags = SS_NO_FIRE var/list/exposed_wires = list() -/datum/controller/subsystem/squeak/New() - NEW_SS_GLOBAL(SSsqueak) - /datum/controller/subsystem/squeak/Initialize(timeofday) trigger_migration() diff --git a/code/controllers/subsystem/stickyban.dm b/code/controllers/subsystem/stickyban.dm index 23900adb4e..b5702455b8 100644 --- a/code/controllers/subsystem/stickyban.dm +++ b/code/controllers/subsystem/stickyban.dm @@ -1,15 +1,10 @@ -var/datum/controller/subsystem/stickyban/SSstickyban - -/datum/controller/subsystem/stickyban +SUBSYSTEM_DEF(stickyban) name = "Sticky Ban" init_order = -10 flags = SS_NO_FIRE var/list/cache = list() -/datum/controller/subsystem/stickyban/New() - NEW_SS_GLOBAL(SSstickyban) - /datum/controller/subsystem/stickyban/Initialize(timeofday) var/list/bannedkeys = world.GetConfig("ban") //sanitize the sticky ban list diff --git a/code/controllers/subsystem/sun.dm b/code/controllers/subsystem/sun.dm index 65dc87005f..7f443aadc0 100644 --- a/code/controllers/subsystem/sun.dm +++ b/code/controllers/subsystem/sun.dm @@ -1,6 +1,4 @@ -var/datum/controller/subsystem/sun/SSsun - -/datum/controller/subsystem/sun +SUBSYSTEM_DEF(sun) name = "Sun" wait = 600 init_order = 2 @@ -11,9 +9,7 @@ var/datum/controller/subsystem/sun/SSsun var/rate var/list/solars = list() -/datum/controller/subsystem/sun/New() - NEW_SS_GLOBAL(SSsun) - +/datum/controller/subsystem/sun/PreInit() angle = rand (0,360) // the station position to the sun is randomised at round start rate = rand(50,200)/100 // 50% - 200% of standard rotation if(prob(50)) // same chance to rotate clockwise than counter-clockwise diff --git a/code/controllers/subsystem/tgui.dm b/code/controllers/subsystem/tgui.dm index 04cf2cc38f..edec49bcbb 100644 --- a/code/controllers/subsystem/tgui.dm +++ b/code/controllers/subsystem/tgui.dm @@ -1,6 +1,4 @@ -var/datum/controller/subsystem/tgui/SStgui - -/datum/controller/subsystem/tgui +SUBSYSTEM_DEF(tgui) name = "tgui" wait = 9 init_order = 16 @@ -12,11 +10,9 @@ var/datum/controller/subsystem/tgui/SStgui var/list/processing_uis = list() // A list of processing UIs, ungrouped. var/basehtml // The HTML base used for all UIs. -/datum/controller/subsystem/tgui/New() +/datum/controller/subsystem/tgui/PreInit() basehtml = file2text('tgui/tgui.html') // Read the HTML from disk. - NEW_SS_GLOBAL(SStgui) - /datum/controller/subsystem/tgui/Shutdown() close_all_uis() diff --git a/code/controllers/subsystem/throwing.dm b/code/controllers/subsystem/throwing.dm index 260f5698ec..8d95d3fa29 100644 --- a/code/controllers/subsystem/throwing.dm +++ b/code/controllers/subsystem/throwing.dm @@ -1,20 +1,14 @@ #define MAX_THROWING_DIST 512 // 2 z-levels on default width #define MAX_TICKS_TO_MAKE_UP 3 //how many missed ticks will we attempt to make up for this run. -var/datum/controller/subsystem/throwing/SSthrowing -/datum/controller/subsystem/throwing +SUBSYSTEM_DEF(throwing) name = "Throwing" priority = 25 wait = 1 flags = SS_NO_INIT|SS_KEEP_TIMING|SS_TICKER var/list/currentrun - var/list/processing - -/datum/controller/subsystem/throwing/New() - NEW_SS_GLOBAL(SSthrowing) - processing = list() - + var/list/processing = list() /datum/controller/subsystem/throwing/stat_entry() ..("P:[processing.len]") @@ -76,7 +70,7 @@ var/datum/controller/subsystem/throwing/SSthrowing var/atom/step //calculate how many tiles to move, making up for any missed ticks. - var/tilestomove = round(min(((((world.time+world.tick_lag) - start_time) * speed) - (dist_travelled ? dist_travelled : -1)), speed*MAX_TICKS_TO_MAKE_UP) * (world.tick_lag * SSthrowing.wait)) + var/tilestomove = Ceiling(min(((((world.time+world.tick_lag) - start_time) * speed) - (dist_travelled ? dist_travelled : -1)), speed*MAX_TICKS_TO_MAKE_UP) * (world.tick_lag * SSthrowing.wait)) while (tilestomove-- > 0) if ((dist_travelled >= maxrange || AM.loc == target_turf) && AM.has_gravity(AM.loc)) finalize() diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 0e228b0f3c..8a2abe3158 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -1,10 +1,6 @@ #define ROUND_START_MUSIC_LIST "strings/round_start_sounds.txt" -var/round_start_time = 0 - -var/datum/controller/subsystem/ticker/ticker - -/datum/controller/subsystem/ticker +SUBSYSTEM_DEF(ticker) name = "Ticker" init_order = 13 @@ -44,6 +40,8 @@ var/datum/controller/subsystem/ticker/ticker var/timeLeft //pregame timer var/start_at + var/gametime_offset = 432000 // equal to 12 hours, making gametime at roundstart 12:00:00 + var/totalPlayers = 0 //used for pregame stats on statpanel var/totalPlayersReady = 0 //used for pregame stats on statpanel @@ -58,19 +56,19 @@ var/datum/controller/subsystem/ticker/ticker var/late_join_disabled - var/modevoted = FALSE //Have we sent a vote for the gamemode? + var/round_start_time = 0 + var/list/round_start_events -/datum/controller/subsystem/ticker/New() - NEW_SS_GLOBAL(ticker) + var/modevoted = FALSE //Have we sent a vote for the gamemode? /datum/controller/subsystem/ticker/Initialize(timeofday) var/list/music = file2list(ROUND_START_MUSIC_LIST, "\n") login_music = pick(music) - if(!syndicate_code_phrase) - syndicate_code_phrase = generate_code_phrase() - if(!syndicate_code_response) - syndicate_code_response = generate_code_phrase() + if(!GLOB.syndicate_code_phrase) + GLOB.syndicate_code_phrase = generate_code_phrase() + if(!GLOB.syndicate_code_response) + GLOB.syndicate_code_response = generate_code_phrase() ..() start_at = world.time + (config.lobby_countdown * 10) @@ -79,7 +77,7 @@ var/datum/controller/subsystem/ticker/ticker if(GAME_STATE_STARTUP) if(Master.initializations_finished_with_no_players_logged_in) start_at = world.time + (config.lobby_countdown * 10) - for(var/client/C in clients) + for(var/client/C in GLOB.clients) window_flash(C, ignorepref = TRUE) //let them know lobby has opened up. to_chat(world, "Welcome to [station_name()]!") current_state = GAME_STATE_PREGAME @@ -93,7 +91,7 @@ var/datum/controller/subsystem/ticker/ticker timeLeft = max(0,start_at - world.time) totalPlayers = 0 totalPlayersReady = 0 - for(var/mob/dead/new_player/player in player_list) + for(var/mob/dead/new_player/player in GLOB.player_list) ++totalPlayers if(player.ready) ++totalPlayersReady @@ -137,15 +135,15 @@ var/datum/controller/subsystem/ticker/ticker var/init_start = world.timeofday //Create and announce mode var/list/datum/game_mode/runnable_modes - if(master_mode == "random" || master_mode == "secret") + if(GLOB.master_mode == "random" || GLOB.master_mode == "secret") runnable_modes = config.get_runnable_modes() - if(master_mode == "secret") + if(GLOB.master_mode == "secret") hide_mode = 1 - if(secret_force_mode != "secret") - var/datum/game_mode/smode = config.pick_mode(secret_force_mode) + if(GLOB.secret_force_mode != "secret") + var/datum/game_mode/smode = config.pick_mode(GLOB.secret_force_mode) if(!smode.can_start()) - message_admins("\blue Unable to force secret [secret_force_mode]. [smode.required_players] players and [smode.required_enemies] eligible antagonists needed.") + message_admins("\blue Unable to force secret [GLOB.secret_force_mode]. [smode.required_players] players and [smode.required_enemies] eligible antagonists needed.") else mode = smode @@ -156,7 +154,7 @@ var/datum/controller/subsystem/ticker/ticker mode = pickweight(runnable_modes) else - mode = config.pick_mode(master_mode) + mode = config.pick_mode(GLOB.master_mode) if(!mode.can_start()) to_chat(world, "Unable to start [mode.name]. Not enough players, [mode.required_players] players and [mode.required_enemies] eligible antagonists needed. Reverting to pre-game lobby.") qdel(mode) @@ -172,11 +170,11 @@ var/datum/controller/subsystem/ticker/ticker SSjob.DivideOccupations() //Distribute jobs CHECK_TICK - if(!Debug2) + if(!GLOB.Debug2) if(!can_continue) qdel(mode) mode = null - to_chat(world, "Error setting up [master_mode]. Reverting to pre-game lobby.") + to_chat(world, "Error setting up [GLOB.master_mode]. Reverting to pre-game lobby.") SSjob.ResetOccupations() return 0 else @@ -196,19 +194,24 @@ var/datum/controller/subsystem/ticker/ticker toggle_ooc(0) // Turn it off CHECK_TICK - start_landmarks_list = shuffle(start_landmarks_list) //Shuffle the order of spawn points so they dont always predictably spawn bottom-up and right-to-left + GLOB.start_landmarks_list = shuffle(GLOB.start_landmarks_list) //Shuffle the order of spawn points so they dont always predictably spawn bottom-up and right-to-left create_characters() //Create player characters collect_minds() equip_characters() SSoverlays.Flush() //Flush the majority of the shit - data_core.manifest() + GLOB.data_core.manifest() transfer_characters() //transfer keys to the new mobs Master.RoundStart() //let the party begin... + for(var/I in round_start_events) + var/datum/callback/cb = I + cb.InvokeAsync() + LAZYCLEARLIST(round_start_events) + log_world("Game start took [(world.timeofday - init_start)/10]s") round_start_time = world.time @@ -217,10 +220,10 @@ var/datum/controller/subsystem/ticker/ticker current_state = GAME_STATE_PLAYING - if(SSevent.holidays) + if(SSevents.holidays) to_chat(world, "and...") - for(var/holidayname in SSevent.holidays) - var/datum/holiday/holiday = SSevent.holidays[holidayname] + for(var/holidayname in SSevents.holidays) + var/datum/holiday/holiday = SSevents.holidays[holidayname] to_chat(world, "

[holiday.greet()]

") PostSetup() @@ -231,7 +234,7 @@ var/datum/controller/subsystem/ticker/ticker set waitfor = 0 mode.post_setup() //Cleanup some stuff - for(var/obj/effect/landmark/start/S in landmarks_list) + for(var/obj/effect/landmark/start/S in GLOB.landmarks_list) //Deleting Startpoints but we need the ai point to AI-ize people later if(S.name != "AI") qdel(S) @@ -240,6 +243,12 @@ var/datum/controller/subsystem/ticker/ticker var/list/allmins = adm["present"] send2irc("Server", "Round of [hide_mode ? "secret":"[mode.name]"] has started[allmins.len ? ".":" with no active admins online!"]") +/datum/controller/subsystem/ticker/proc/OnRoundstart(datum/callback/cb) + if(current_state < GAME_STATE_PLAYING) + LAZYADD(round_start_events, cb) + else + cb.InvokeAsync() + /datum/controller/subsystem/ticker/proc/station_explosion_detonation(atom/bomb) if(bomb) //BOOM var/turf/epi = bomb.loc @@ -252,7 +261,7 @@ var/datum/controller/subsystem/ticker/ticker if( cinematic ) return //already a cinematic in progress! - for (var/datum/html_interface/hi in html_interfaces) + for (var/datum/html_interface/hi in GLOB.html_interfaces) hi.closeAll() SStgui.close_all_uis() @@ -264,7 +273,7 @@ var/datum/controller/subsystem/ticker/ticker //initialise our cinematic screen object cinematic = new /obj/screen{icon='icons/effects/station_explosion.dmi';icon_state="station_intact";layer=21;mouse_opacity=0;screen_loc="1,0";}(src) - for(var/mob/M in mob_list) + for(var/mob/M in GLOB.mob_list) M.notransform = TRUE //stop everything moving if(M.client) M.client.screen += cinematic //show every client the cinematic @@ -366,30 +375,30 @@ var/datum/controller/subsystem/ticker/ticker if(cinematic) qdel(cinematic) //end the cinematic cinematic = null - for(var/mob/M in mob_list) + for(var/mob/M in GLOB.mob_list) M.notransform = FALSE if(actually_blew_up && !isnull(killz) && M.stat != DEAD && M.z == killz) M.gib() /datum/controller/subsystem/ticker/proc/create_characters() - for(var/mob/dead/new_player/player in player_list) + for(var/mob/dead/new_player/player in GLOB.player_list) if(player.ready && player.mind) - joined_player_list += player.ckey + GLOB.joined_player_list += player.ckey player.create_character(FALSE) else player.new_player_panel() CHECK_TICK /datum/controller/subsystem/ticker/proc/collect_minds() - for(var/mob/dead/new_player/P in player_list) + for(var/mob/dead/new_player/P in GLOB.player_list) if(P.new_character && P.new_character.mind) - ticker.minds += P.new_character.mind + SSticker.minds += P.new_character.mind CHECK_TICK /datum/controller/subsystem/ticker/proc/equip_characters() var/captainless=1 - for(var/mob/dead/new_player/N in player_list) + for(var/mob/dead/new_player/N in GLOB.player_list) var/mob/living/carbon/human/player = N.new_character if(istype(player) && player.mind && player.mind.assigned_role) if(player.mind.assigned_role == "Captain") @@ -398,14 +407,14 @@ var/datum/controller/subsystem/ticker/ticker SSjob.EquipRank(N, player.mind.assigned_role, 0) CHECK_TICK if(captainless) - for(var/mob/dead/new_player/N in player_list) + for(var/mob/dead/new_player/N in GLOB.player_list) if(N.new_character) to_chat(N, "Captainship not forced on anyone.") CHECK_TICK /datum/controller/subsystem/ticker/proc/transfer_characters() var/list/livings = list() - for(var/mob/dead/new_player/player in player_list) + for(var/mob/dead/new_player/player in GLOB.player_list) var/mob/living = player.transfer_character() if(living) qdel(player) @@ -432,7 +441,7 @@ var/datum/controller/subsystem/ticker/ticker to_chat(world, "


The round has ended.") //Player status report - for(var/mob/Player in mob_list) + for(var/mob/Player in GLOB.mob_list) if(Player.mind && !isnewplayer(Player)) if(Player.stat != DEAD && !isbrain(Player)) num_survivors++ @@ -457,28 +466,28 @@ var/datum/controller/subsystem/ticker/ticker //Round statistics report var/datum/station_state/end_state = new /datum/station_state() end_state.count() - var/station_integrity = min(PERCENT(start_state.score(end_state)), 100) + var/station_integrity = min(PERCENT(GLOB.start_state.score(end_state)), 100) - to_chat(world, "
[TAB]Shift Duration: [round(world.time / 36000)]:[add_zero("[world.time / 600 % 60]", 2)]:[world.time / 100 % 6][world.time / 100 % 10]") - to_chat(world, "
[TAB]Station Integrity: [mode.station_was_nuked ? "Destroyed" : "[station_integrity]%"]") + to_chat(world, "
[GLOB.TAB]Shift Duration: [round(world.time / 36000)]:[add_zero("[world.time / 600 % 60]", 2)]:[world.time / 100 % 6][world.time / 100 % 10]") + to_chat(world, "
[GLOB.TAB]Station Integrity: [mode.station_was_nuked ? "Destroyed" : "[station_integrity]%"]") if(mode.station_was_nuked) - ticker.news_report = STATION_DESTROYED_NUKE - var/total_players = joined_player_list.len - if(joined_player_list.len) - to_chat(world, "
[TAB]Total Population: [total_players]") + SSticker.news_report = STATION_DESTROYED_NUKE + var/total_players = GLOB.joined_player_list.len + if(total_players) + to_chat(world, "
[GLOB.TAB]Total Population: [total_players]") if(station_evacuated) - to_chat(world, "
[TAB]Evacuation Rate: [num_escapees] ([PERCENT(num_escapees/total_players)]%)") - to_chat(world, "
[TAB](on emergency shuttle): [num_shuttle_escapees] ([PERCENT(num_shuttle_escapees/total_players)]%)") + to_chat(world, "
[GLOB.TAB]Evacuation Rate: [num_escapees] ([PERCENT(num_escapees/total_players)]%)") + to_chat(world, "
[GLOB.TAB](on emergency shuttle): [num_shuttle_escapees] ([PERCENT(num_shuttle_escapees/total_players)]%)") news_report = STATION_EVACUATED if(SSshuttle.emergency.is_hijacked()) news_report = SHUTTLE_HIJACK - to_chat(world, "
[TAB]Survival Rate: [num_survivors] ([PERCENT(num_survivors/total_players)]%)") + to_chat(world, "
[GLOB.TAB]Survival Rate: [num_survivors] ([PERCENT(num_survivors/total_players)]%)") to_chat(world, "
") CHECK_TICK //Silicon laws report - for (var/mob/living/silicon/ai/aiPlayer in mob_list) + for (var/mob/living/silicon/ai/aiPlayer in GLOB.mob_list) if (aiPlayer.stat != 2 && aiPlayer.mind) to_chat(world, "[aiPlayer.name] (Played by: [aiPlayer.mind.key])'s laws at the end of the round were:") aiPlayer.show_laws(1) @@ -497,7 +506,7 @@ var/datum/controller/subsystem/ticker/ticker CHECK_TICK - for (var/mob/living/silicon/robot/robo in mob_list) + for (var/mob/living/silicon/robot/robo in GLOB.mob_list) if (!robo.connected_ai && robo.mind) if (robo.stat != 2) to_chat(world, "[robo.name] (Played by: [robo.mind.key]) survived as an AI-less borg! Its laws were:") @@ -548,9 +557,9 @@ var/datum/controller/subsystem/ticker/ticker //Borers var/borerwin = FALSE - if(borers.len) + if(GLOB.borers.len) var/borertext = "
The borers were:" - for(var/mob/living/simple_animal/borer/B in borers) + for(var/mob/living/simple_animal/borer/B in GLOB.borers) if((B.key || B.controlling) && B.stat != DEAD) borertext += "
[B.controlling ? B.victim.key : B.key] was [B.truename] (" var/turf/location = get_turf(B) @@ -562,20 +571,20 @@ var/datum/controller/subsystem/ticker/ticker to_chat(world, borertext) var/total_borers = 0 - for(var/mob/living/simple_animal/borer/B in borers) + for(var/mob/living/simple_animal/borer/B in GLOB.borers) if((B.key || B.victim) && B.stat != DEAD) total_borers++ if(total_borers) var/total_borer_hosts = 0 - for(var/mob/living/carbon/C in mob_list) + for(var/mob/living/carbon/C in GLOB.mob_list) var/mob/living/simple_animal/borer/D = C.has_brain_worms() var/turf/location = get_turf(C) if(location.z == ZLEVEL_CENTCOM && D && D.stat != DEAD) total_borer_hosts++ - if(total_borer_hosts_needed <= total_borer_hosts) + if(GLOB.total_borer_hosts_needed <= total_borer_hosts) borerwin = TRUE to_chat(world, "There were [total_borers] borers alive at round end!") - to_chat(world, "A total of [total_borer_hosts] borers with hosts escaped on the shuttle alive. The borers needed [total_borer_hosts_needed] hosts to escape.") + to_chat(world, "A total of [total_borer_hosts] borers with hosts escaped on the shuttle alive. The borers needed [GLOB.total_borer_hosts_needed] hosts to escape.") if(borerwin) to_chat(world, "The borers were successful!") else @@ -668,43 +677,50 @@ var/datum/controller/subsystem/ticker/ticker SSvote.initiate_vote("roundtype","server") /world/proc/has_round_started() - if (ticker && ticker.current_state >= GAME_STATE_PLAYING) + if (SSticker && SSticker.current_state >= GAME_STATE_PLAYING) return TRUE return FALSE /datum/controller/subsystem/ticker/Recover() - current_state = ticker.current_state - force_ending = ticker.force_ending - hide_mode = ticker.hide_mode - mode = ticker.mode - event_time = ticker.event_time - event = ticker.event + current_state = SSticker.current_state + force_ending = SSticker.force_ending + hide_mode = SSticker.hide_mode + mode = SSticker.mode + event_time = SSticker.event_time + event = SSticker.event - login_music = ticker.login_music - round_end_sound = ticker.round_end_sound + login_music = SSticker.login_music + round_end_sound = SSticker.round_end_sound - minds = ticker.minds + minds = SSticker.minds - syndicate_coalition = ticker.syndicate_coalition - factions = ticker.factions - availablefactions = ticker.availablefactions + syndicate_coalition = SSticker.syndicate_coalition + factions = SSticker.factions + availablefactions = SSticker.availablefactions - delay_end = ticker.delay_end + delay_end = SSticker.delay_end - triai = ticker.triai - tipped = ticker.tipped - selected_tip = ticker.selected_tip + triai = SSticker.triai + tipped = SSticker.tipped + selected_tip = SSticker.selected_tip - timeLeft = ticker.timeLeft + timeLeft = SSticker.timeLeft - totalPlayers = ticker.totalPlayers - totalPlayersReady = ticker.totalPlayersReady + totalPlayers = SSticker.totalPlayers + totalPlayersReady = SSticker.totalPlayersReady - queue_delay = ticker.queue_delay - queued_players = ticker.queued_players - cinematic = ticker.cinematic - maprotatechecked = ticker.maprotatechecked - modevoted = ticker.modevoted + queue_delay = SSticker.queue_delay + queued_players = SSticker.queued_players + cinematic = SSticker.cinematic + maprotatechecked = SSticker.maprotatechecked + round_start_time = SSticker.round_start_time + + queue_delay = SSticker.queue_delay + queued_players = SSticker.queued_players + cinematic = SSticker.cinematic + maprotatechecked = SSticker.maprotatechecked + + modevoted = SSticker.modevoted /datum/controller/subsystem/ticker/proc/send_news_report() var/news_message @@ -759,7 +775,7 @@ var/datum/controller/subsystem/ticker/ticker send2otherserver(news_source, news_message,"News_Report") /datum/controller/subsystem/ticker/proc/GetTimeLeft() - if(isnull(ticker.timeLeft)) + if(isnull(SSticker.timeLeft)) return max(0, start_at - world.time) return timeLeft diff --git a/code/controllers/subsystem/time_tracking.dm b/code/controllers/subsystem/time_track.dm similarity index 83% rename from code/controllers/subsystem/time_tracking.dm rename to code/controllers/subsystem/time_track.dm index a24b803cf6..20230037c2 100644 --- a/code/controllers/subsystem/time_tracking.dm +++ b/code/controllers/subsystem/time_track.dm @@ -1,9 +1,7 @@ -var/datum/controller/subsystem/time_track/SStime_track - -/datum/controller/subsystem/time_track +SUBSYSTEM_DEF(time_track) name = "Time Tracking" wait = 600 - flags = SS_NO_INIT|SS_FIRE_IN_LOBBY + flags = SS_NO_INIT|SS_FIRE_IN_LOBBY|SS_NO_TICK_CHECK var/time_dilation_current = 0 @@ -17,9 +15,6 @@ var/datum/controller/subsystem/time_track/SStime_track var/last_tick_byond_time = 0 var/last_tick_tickcount = 0 -/datum/controller/subsystem/time_track/New() - NEW_SS_GLOBAL(SStime_track) - /datum/controller/subsystem/time_track/fire() var/current_realtime = REALTIMEOFDAY diff --git a/code/controllers/subsystem/timer.dm b/code/controllers/subsystem/timer.dm index c3bcb0e9b0..6a63f090e5 100644 --- a/code/controllers/subsystem/timer.dm +++ b/code/controllers/subsystem/timer.dm @@ -1,44 +1,69 @@ #define BUCKET_LEN (world.fps*1*60) //how many ticks should we keep in the bucket. (1 minutes worth) #define BUCKET_POS(timer) (round((timer.timeToRun - SStimer.head_offset) / world.tick_lag) + 1) -var/datum/controller/subsystem/timer/SStimer -/datum/controller/subsystem/timer +SUBSYSTEM_DEF(timer) name = "Timer" wait = 1 //SS_TICKER subsystem, so wait is in ticks init_order = 1 flags = SS_FIRE_IN_LOBBY|SS_TICKER|SS_NO_INIT - var/list/datum/timedevent/processing - var/list/hashes + var/list/datum/timedevent/processing = list() + var/list/hashes = list() var/head_offset = 0 //world.time of the first entry in the the bucket. var/practical_offset = 0 //index of the first non-empty item in the bucket. var/bucket_resolution = 0 //world.tick_lag the bucket was designed for var/bucket_count = 0 //how many timers are in the buckets - var/list/bucket_list //list of buckets, each bucket holds every timer that has to run that byond tick. + var/list/bucket_list = list() //list of buckets, each bucket holds every timer that has to run that byond tick. - var/list/timer_id_dict //list of all active timers assoicated to their timer id (for easy lookup) + var/list/timer_id_dict = list() //list of all active timers assoicated to their timer id (for easy lookup) - var/list/clienttime_timers //special snowflake timers that run on fancy pansy "client time" - - -/datum/controller/subsystem/timer/New() - processing = list() - hashes = list() - bucket_list = list() - timer_id_dict = list() - - clienttime_timers = list() - - NEW_SS_GLOBAL(SStimer) + var/list/clienttime_timers = list() //special snowflake timers that run on fancy pansy "client time" + var/last_invoke_tick = 0 + var/static/last_invoke_warning = 0 + var/static/bucket_auto_reset = TRUE /datum/controller/subsystem/timer/stat_entry(msg) ..("B:[bucket_count] P:[length(processing)] H:[length(hashes)] C:[length(clienttime_timers)]") /datum/controller/subsystem/timer/fire(resumed = FALSE) + var/lit = last_invoke_tick + var/last_check = world.time - TIMER_NO_INVOKE_WARNING + + if(!bucket_count) + last_invoke_tick = world.time + + if(lit && lit < last_check && last_invoke_warning < last_check) + last_invoke_warning = world.time + var/msg = "No regular timers processed in the last [TIMER_NO_INVOKE_WARNING] ticks[bucket_auto_reset ? ", resetting buckets" : ""]!" + message_admins(msg) + WARNING(msg) + if(bucket_auto_reset) + bucket_resolution = 0 + + log_world("Active timers at tick [world.time]:") + for(var/I in processing) + var/datum/timedevent/TE = I + msg = "Timer: [TE.id]: TTR: [TE.timeToRun], Flags: [TE.flags], " + if(TE.spent) + msg += "SPENT" + else + var/datum/callback/CB = TE.callBack + msg += "callBack: " + if(CB.object == GLOBAL_PROC) + msg += "GP: [CB.delegate]" + else + msg += "[!QDELETED(CB.object) ? CB.object : "SRC DELETED"]: [CB.delegate](" + var/first = TRUE + for(var/J in CB.arguments) + msg += "[first ? "" : ", "][J]" + first = FALSE + msg += ")" + log_world(msg) + while(length(clienttime_timers)) var/datum/timedevent/ctime_timer = clienttime_timers[clienttime_timers.len] if (ctime_timer.timeToRun <= REALTIMEOFDAY) @@ -79,17 +104,15 @@ var/datum/controller/subsystem/timer/SStimer do var/datum/callback/callBack = timer.callBack if (!callBack) - message_admins("The timer SS has crashed because a timer did not return a callback. MC restarted automatically. Timer hash: [timer.hash]") qdel(timer) bucket_resolution = null //force bucket recreation - Recreate_MC() - //I really don't know if I should keep this crash log in; I feel like it might cause problems. -// CRASH("Invalid timer: timer.timeToRun=[timer.timeToRun]||QDELETED(timer)=[QDELETED(timer)]||world.time=[world.time]||head_offset=[head_offset]||practical_offset=[practical_offset]||timer.spent=[timer.spent]") + CRASH("Invalid timer: timer.timeToRun=[timer.timeToRun]||QDELETED(timer)=[QDELETED(timer)]||world.time=[world.time]||head_offset=[head_offset]||practical_offset=[practical_offset]||timer.spent=[timer.spent]") if (!timer.spent) spent += timer timer.spent = TRUE callBack.InvokeAsync() + last_invoke_tick = world.time timer = timer.next @@ -303,7 +326,7 @@ var/datum/controller/subsystem/timer/SStimer prev = null return QDEL_HINT_IWILLGC -proc/addtimer(datum/callback/callback, wait, flags) +/proc/addtimer(datum/callback/callback, wait, flags) if (!callback) return diff --git a/code/controllers/subsystem/title.dm b/code/controllers/subsystem/title.dm new file mode 100644 index 0000000000..3078429710 --- /dev/null +++ b/code/controllers/subsystem/title.dm @@ -0,0 +1,61 @@ +SUBSYSTEM_DEF(title) + name = "Title Screen" + flags = SS_NO_FIRE|SS_NO_INIT + + var/file_path + var/icon/icon + var/icon/previous_icon + var/turf/closed/indestructible/splashscreen/splash_turf + +/datum/controller/subsystem/title/PreInit() + if(file_path && icon) + return + + if(fexists("data/previous_title.dat")) + var/previous_path = file2text("data/previous_title.dat") + if(istext(previous_path)) + previous_icon = new(previous_icon) + fdel("data/previous_title.dat") + + var/list/provisional_title_screens = flist("config/title_screens/images/") + var/list/title_screens = list() + var/use_rare_screens = prob(1) + + for(var/S in provisional_title_screens) + var/list/L = splittext(S,"+") + if((L.len == 1 && L[1] != "blank.png")|| (L.len > 1 && ((use_rare_screens && lowertext(L[1]) == "rare") || (lowertext(L[1]) == lowertext(SSmapping.config.map_name))))) + title_screens += S + + if(!isemptylist(title_screens)) + if(length(title_screens) > 1) + for(var/S in title_screens) + var/list/L = splittext(S,".") + if(L.len != 2 || L[1] != "default") + continue + title_screens -= S + break + + file_path = "config/title_screens/images/[pick(title_screens)]" + icon = new(file_path) + + if(splash_turf) + splash_turf.icon = icon + +/datum/controller/subsystem/title/vv_edit_var(var_name, var_value) + . = ..() + if(.) + switch(var_name) + if("icon") + if(splash_turf) + splash_turf.icon = icon + +/datum/controller/subsystem/title/Shutdown() + if(file_path) + var/F = file("data/previous_title.dat") + F << file_path + +/datum/controller/subsystem/title/Recover() + icon = SStitle.icon + splash_turf = SStitle.splash_turf + file_path = SStitle.file_path + previous_icon = SStitle.previous_icon diff --git a/code/controllers/subsystem/title_screen.dm b/code/controllers/subsystem/title_screen.dm deleted file mode 100644 index 1b4bd16053..0000000000 --- a/code/controllers/subsystem/title_screen.dm +++ /dev/null @@ -1,39 +0,0 @@ -var/datum/controller/subsystem/title/SStitle - -/datum/controller/subsystem/title - name = "Title Screen" - init_order = 15 - flags = SS_NO_FIRE - var/turf/closed/indestructible/splashscreen/title_screen - -/datum/controller/subsystem/title/New() - NEW_SS_GLOBAL(SStitle) - -/datum/controller/subsystem/title/Initialize() - var/list/provisional_title_screens = flist("config/title_screens/images/") - var/list/title_screens = list() - var/use_rare_screens = FALSE - - if(title_screen) - if(prob(1)) - use_rare_screens = TRUE - - for(var/S in provisional_title_screens) - var/list/L = splittext(S,"+") - if((L.len == 1 && L[1] != "blank.png")|| (L.len > 1 && ((use_rare_screens && lowertext(L[1]) == "rare") || (lowertext(L[1]) == lowertext(SSmapping.config.map_name))))) - title_screens += S - - if(!isemptylist(title_screens)) - if(length(title_screens) > 1) - for(var/S in title_screens) - var/list/L = splittext(S,".") - if(L.len != 2 || L[1] != "default") - continue - title_screens -= S - break - - var/path_string = "config/title_screens/images/[pick(title_screens)]" - var/icon/screen_to_use = new(path_string) - - title_screen.icon = screen_to_use - ..() \ No newline at end of file diff --git a/code/controllers/subsystem/voting.dm b/code/controllers/subsystem/vote.dm similarity index 89% rename from code/controllers/subsystem/voting.dm rename to code/controllers/subsystem/vote.dm index 39e1471dc5..e78a4b56f2 100644 --- a/code/controllers/subsystem/voting.dm +++ b/code/controllers/subsystem/vote.dm @@ -1,6 +1,4 @@ -var/datum/controller/subsystem/vote/SSvote - -/datum/controller/subsystem/vote +SUBSYSTEM_DEF(vote) name = "Vote" wait = 10 @@ -16,9 +14,6 @@ var/datum/controller/subsystem/vote/SSvote var/list/voting = list() var/list/generated_actions = list() -/datum/controller/subsystem/vote/New() - NEW_SS_GLOBAL(SSvote) - /datum/controller/subsystem/vote/fire() //called by master_controller if(mode) time_remaining = round((started_time + config.vote_period - world.time)/10) @@ -58,7 +53,7 @@ var/datum/controller/subsystem/vote/SSvote greatest_votes = votes //default-vote for everyone who didn't vote if(!config.vote_no_default && choices.len) - var/list/non_voters = directory.Copy() + var/list/non_voters = GLOB.directory.Copy() non_voters -= voted for (var/non_voter_ckey in non_voters) var/client/C = non_voters[non_voter_ckey] @@ -70,10 +65,10 @@ var/datum/controller/subsystem/vote/SSvote if(choices["Continue Playing"] >= greatest_votes) greatest_votes = choices["Continue Playing"] else if(mode == "gamemode") - if(master_mode in choices) - choices[master_mode] += non_voters.len - if(choices[master_mode] >= greatest_votes) - greatest_votes = choices[master_mode] + if(GLOB.master_mode in choices) + choices[GLOB.master_mode] += non_voters.len + if(choices[GLOB.master_mode] >= greatest_votes) + greatest_votes = choices[GLOB.master_mode] //get all options with that many votes and return them in a list . = list() if(greatest_votes) @@ -103,7 +98,7 @@ var/datum/controller/subsystem/vote/SSvote . = pick(winners) text += "\nVote Result: [.]" else - text += "\nDid not vote: [clients.len-voted.len]" + text += "\nDid not vote: [GLOB.clients.len-voted.len]" else text += "Vote Result: Inconclusive - No Votes!" log_vote(text) @@ -120,24 +115,15 @@ var/datum/controller/subsystem/vote/SSvote if(. == "Restart Round") restart = 1 if("gamemode") - if(master_mode != .) + if(GLOB.master_mode != .) world.save_mode(.) - if(ticker && ticker.mode) + if(SSticker && SSticker.mode) restart = 1 else - master_mode = . - - if("roundtype") - if(ticker && ticker.mode) - message_admins("A vote has tried to change the gamemode, but the game has already started. Aborting.") - else if(master_mode != .) - world.save_mode(.) - master_mode = . - to_chat(world,"The mode is now: [master_mode]") - + GLOB.master_mode = . if(restart) var/active_admins = 0 - for(var/client/C in admins) + for(var/client/C in GLOB.admins) if(!C.is_afk() && check_rights_for(C, R_SERVER)) active_admins = 1 break @@ -170,7 +156,7 @@ var/datum/controller/subsystem/vote/SSvote var/admin = FALSE var/ckey = ckey(initiator_key) - if((admin_datums[ckey]) || (ckey in deadmins)) + if((GLOB.admin_datums[ckey]) || (ckey in GLOB.deadmins)) admin = TRUE if(next_allowed_time > world.time && !admin) @@ -183,8 +169,6 @@ var/datum/controller/subsystem/vote/SSvote choices.Add("Restart Round","Continue Playing") if("gamemode") choices.Add(config.votable_modes) - if("roundtype") - choices.Add("secret","extended") if("custom") question = stripped_input(usr,"What is the vote for?") if(!question) @@ -205,7 +189,7 @@ var/datum/controller/subsystem/vote/SSvote log_vote(text) to_chat(world, "\n[text]\nType vote or click here to place your votes.\nYou have [config.vote_period/10] seconds to vote.") time_remaining = round(config.vote_period/10) - for(var/c in clients) + for(var/c in GLOB.clients) var/client/C = c var/datum/action/vote/V = new if(question) diff --git a/code/controllers/subsystem/weather.dm b/code/controllers/subsystem/weather.dm index 824ea9ad7e..569eb4032c 100644 --- a/code/controllers/subsystem/weather.dm +++ b/code/controllers/subsystem/weather.dm @@ -1,7 +1,5 @@ //Used for all kinds of weather, ex. lavaland ash storms. - -var/datum/controller/subsystem/weather/SSweather -/datum/controller/subsystem/weather +SUBSYSTEM_DEF(weather) name = "Weather" flags = SS_BACKGROUND wait = 10 @@ -9,15 +7,12 @@ var/datum/controller/subsystem/weather/SSweather var/list/existing_weather = list() var/list/eligible_zlevels = list(ZLEVEL_LAVALAND) -/datum/controller/subsystem/weather/New() - NEW_SS_GLOBAL(SSweather) - /datum/controller/subsystem/weather/fire() for(var/V in processing) var/datum/weather/W = V if(W.aesthetic) continue - for(var/mob/living/L in mob_list) + for(var/mob/living/L in GLOB.mob_list) if(W.can_impact(L)) W.impact(L) for(var/Z in eligible_zlevels) diff --git a/code/datums/action.dm b/code/datums/action.dm index 57ef56d873..03b293b13d 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -333,6 +333,10 @@ /datum/action/item_action/hands_free/shift_nerves name = "Shift Nerves" +/datum/action/item_action/explosive_implant + check_flags = 0 + name = "Activate Explosive Implant" + /datum/action/item_action/toggle_research_scanner name = "Toggle Research Scanner" button_icon_state = "scan_mode" @@ -467,4 +471,17 @@ /datum/action/item_action/bhop name = "Activate Jump Boots" desc = "Activates the jump boot's internal propulsion system, allowing the user to dash over 4-wide gaps." - button_icon_state = "jetboot" \ No newline at end of file + button_icon_state = "jetboot" + +/datum/action/language_menu + name = "Language Menu" + desc = "Open the language menu to review your languages, their keys, and select your default language." + button_icon_state = "language_menu" + check_flags = 0 + +/datum/action/language_menu/Trigger() + if(!..()) + return FALSE + if(isliving(owner)) + var/mob/living/L = owner + L.open_language_menu(usr) diff --git a/code/datums/antagonists/datum_clockcult.dm b/code/datums/antagonists/datum_clockcult.dm index 9680a8602e..89be685f76 100644 --- a/code/datums/antagonists/datum_clockcult.dm +++ b/code/datums/antagonists/datum_clockcult.dm @@ -18,6 +18,14 @@ . = is_eligible_servant(new_body) /datum/antagonist/clockcultist/give_to_body(mob/living/new_body) + if(iscyborg(new_body)) + var/mob/living/silicon/robot/R = new_body + if(R.deployed) + var/mob/living/silicon/ai/AI = R.mainframe + R.undeploy() + var/converted = add_servant_of_ratvar(AI, silent_update) + to_chat(AI, "Anomaly Detected. Returned to core!") //The AI needs to be in its core to properly be converted + return converted if(!silent_update) if(issilicon(new_body)) to_chat(new_body, "You are unable to compute this truth. Your vision glows a brilliant yellow, and all at once it comes to you. Ratvar, the Clockwork Justiciar, \ @@ -36,11 +44,11 @@ to_chat(new_body, "And yet, you somehow push it all away.") /datum/antagonist/clockcultist/on_gain() - if(ticker && ticker.mode && owner.mind) - ticker.mode.servants_of_ratvar += owner.mind - ticker.mode.update_servant_icons_added(owner.mind) + if(SSticker && SSticker.mode && owner.mind) + SSticker.mode.servants_of_ratvar += owner.mind + SSticker.mode.update_servant_icons_added(owner.mind) if(jobban_isbanned(owner, ROLE_SERVANT_OF_RATVAR)) - INVOKE_ASYNC(ticker.mode, /datum/game_mode.proc/replace_jobbaned_player, owner, ROLE_SERVANT_OF_RATVAR, ROLE_SERVANT_OF_RATVAR) + INVOKE_ASYNC(SSticker.mode, /datum/game_mode.proc/replace_jobbaned_player, owner, ROLE_SERVANT_OF_RATVAR, ROLE_SERVANT_OF_RATVAR) if(owner.mind) owner.mind.special_role = "Servant of Ratvar" owner.log_message("Has been converted to the cult of Ratvar!", INDIVIDUAL_ATTACK_LOG) @@ -55,29 +63,28 @@ else if(isbrain(owner) || isclockmob(owner)) to_chat(owner, "You can communicate with other servants by using the Hierophant Network action button in the upper left.") ..() - if(istype(ticker.mode, /datum/game_mode/clockwork_cult)) - var/datum/game_mode/clockwork_cult/C = ticker.mode + if(istype(SSticker.mode, /datum/game_mode/clockwork_cult)) + var/datum/game_mode/clockwork_cult/C = SSticker.mode C.present_tasks(owner) //Memorize the objectives /datum/antagonist/clockcultist/apply_innate_effects() - all_clockwork_mobs += owner + GLOB.all_clockwork_mobs += owner owner.faction |= "ratvar" - owner.languages_spoken |= RATVAR - owner.languages_understood |= RATVAR + owner.grant_language(/datum/language/ratvar) owner.update_action_buttons_icon() //because a few clockcult things are action buttons and we may be wearing/holding them for whatever reason, we need to update buttons if(issilicon(owner)) var/mob/living/silicon/S = owner if(iscyborg(S)) var/mob/living/silicon/robot/R = S - R.UnlinkSelf() + if(!R.shell) + R.UnlinkSelf() R.module.rebuild_modules() else if(isAI(S)) var/mob/living/silicon/ai/A = S A.can_be_carded = FALSE A.requires_power = POWER_REQ_CLOCKCULT - A.languages_spoken &= ~HUMAN var/list/AI_frame = list(image('icons/mob/clockwork_mobs.dmi', A, "aiframe")) //make the AI's cool frame - for(var/d in cardinal) + for(var/d in GLOB.cardinal) AI_frame += image('icons/mob/clockwork_mobs.dmi', A, "eye[rand(1, 10)]", dir = d) //the eyes are randomly fast or slow A.add_overlay(AI_frame) if(!A.lacks_power()) @@ -110,16 +117,14 @@ hierophant_network.span_for_name = "nezbere" hierophant_network.span_for_message = "brass" owner.throw_alert("clockinfo", /obj/screen/alert/clockwork/infodump) - if(!clockwork_gateway_activated) + if(!GLOB.clockwork_gateway_activated) owner.throw_alert("scripturereq", /obj/screen/alert/clockwork/scripture_reqs) - update_slab_info() ..() /datum/antagonist/clockcultist/remove_innate_effects() - all_clockwork_mobs -= owner + GLOB.all_clockwork_mobs -= owner owner.faction -= "ratvar" - owner.languages_spoken &= ~RATVAR - owner.languages_understood &= ~RATVAR + owner.remove_language(/datum/language/ratvar) owner.clear_alert("clockinfo") owner.clear_alert("scripturereq") for(var/datum/action/innate/function_call/F in owner.actions) //Removes any bound Ratvarian spears @@ -130,7 +135,6 @@ var/mob/living/silicon/ai/A = S A.can_be_carded = initial(A.can_be_carded) A.requires_power = initial(A.requires_power) - A.languages_spoken |= HUMAN A.cut_overlays() S.make_laws() S.update_icons() @@ -142,15 +146,14 @@ R.module.rebuild_modules() if(temp_owner) temp_owner.update_action_buttons_icon() //because a few clockcult things are action buttons and we may be wearing/holding them, we need to update buttons - update_slab_info() /datum/antagonist/clockcultist/on_remove() if(!silent_update) owner.visible_message("[owner] seems to have remembered their true allegiance!", \ "A cold, cold darkness flows through your mind, extinguishing the Justiciar's light and all of your memories as his servant.") - if(ticker && ticker.mode && owner.mind) - ticker.mode.servants_of_ratvar -= owner.mind - ticker.mode.update_servant_icons_removed(owner.mind) + if(SSticker && SSticker.mode && owner.mind) + SSticker.mode.servants_of_ratvar -= owner.mind + SSticker.mode.update_servant_icons_removed(owner.mind) if(owner.mind) owner.mind.wipe_memory() owner.mind.special_role = null diff --git a/code/datums/antagonists/datum_cult.dm b/code/datums/antagonists/datum_cult.dm index 031de6776b..7d6806bab6 100644 --- a/code/datums/antagonists/datum_cult.dm +++ b/code/datums/antagonists/datum_cult.dm @@ -13,14 +13,14 @@ . = is_convertable_to_cult(new_body) /datum/antagonist/cultist/on_gain() - if(ticker && ticker.mode && owner.mind) - ticker.mode.cult += owner.mind - ticker.mode.update_cult_icons_added(owner.mind) - if(istype(ticker.mode, /datum/game_mode/cult)) - var/datum/game_mode/cult/C = ticker.mode + if(SSticker && SSticker.mode && owner.mind) + SSticker.mode.cult += owner.mind + SSticker.mode.update_cult_icons_added(owner.mind) + if(istype(SSticker.mode, /datum/game_mode/cult)) + var/datum/game_mode/cult/C = SSticker.mode C.memorize_cult_objectives(owner.mind) if(jobban_isbanned(owner, ROLE_CULTIST)) - INVOKE_ASYNC(ticker.mode, /datum/game_mode.proc/replace_jobbaned_player, owner, ROLE_CULTIST, ROLE_CULTIST) + INVOKE_ASYNC(SSticker.mode, /datum/game_mode.proc/replace_jobbaned_player, owner, ROLE_CULTIST, ROLE_CULTIST) if(owner.mind) owner.mind.special_role = "Cultist" owner.log_message("Has been converted to the cult of Nar'Sie!", INDIVIDUAL_ATTACK_LOG) @@ -40,9 +40,9 @@ /datum/antagonist/cultist/on_remove() if(owner.mind) owner.mind.wipe_memory() - if(ticker && ticker.mode) - ticker.mode.cult -= owner.mind - ticker.mode.update_cult_icons_removed(owner.mind) + if(SSticker && SSticker.mode) + SSticker.mode.cult -= owner.mind + SSticker.mode.update_cult_icons_removed(owner.mind) to_chat(owner, "An unfamiliar white light flashes through your mind, cleansing the taint of the Dark One and all your memories as its servant.") owner.log_message("Has renounced the cult of Nar'Sie!", INDIVIDUAL_ATTACK_LOG) if(!silent_update) diff --git a/code/datums/beam.dm b/code/datums/beam.dm index 828a9dc774..aba167ec7c 100644 --- a/code/datums/beam.dm +++ b/code/datums/beam.dm @@ -7,17 +7,16 @@ var/icon var/icon_state = "" //icon state of the main segments of the beam var/max_distance = 0 - var/endtime = 0 var/sleep_time = 3 var/finished = 0 var/target_oldloc = null var/origin_oldloc = null var/static_beam = 0 var/beam_type = /obj/effect/ebeam //must be subtype - + var/timing_id = null + var/recalculating = FALSE /datum/beam/New(beam_origin,beam_target,beam_icon='icons/effects/beam.dmi',beam_icon_state="b_beam",time=50,maxdistance=10,btype = /obj/effect/ebeam,beam_sleep_time=3) - endtime = world.time+time origin = beam_origin origin_oldloc = get_turf(origin) target = beam_target @@ -30,11 +29,19 @@ icon = beam_icon icon_state = beam_icon_state beam_type = btype - + addtimer(CALLBACK(src,.proc/End), time) /datum/beam/proc/Start() Draw() - while(!finished && origin && target && world.time < endtime && get_dist(origin,target)[M.ckey ? M.ckey : "No ckey"] / [M.real_name ? M.real_name : "No real name"]
@@ -157,7 +159,8 @@ names = sortList(names) for (var/V in names) - variable_html += D.vv_get_var(V) + if(D.can_vv_get(V)) + variable_html += D.vv_get_var(V) var/html = {" @@ -852,7 +855,7 @@ if(A.reagents) var/chosen_id - var/list/reagent_options = sortList(chemical_reagents_list) + var/list/reagent_options = sortList(GLOB.chemical_reagents_list) switch(alert(usr, "Choose a method.", "Add Reagents", "Enter ID", "Choose ID")) if("Enter ID") var/valid_id @@ -1033,14 +1036,14 @@ to_chat(usr, "This can only be done to instances of type /mob/living/carbon/human") return - var/result = input(usr, "Please choose a new species","Species") as null|anything in species_list + var/result = input(usr, "Please choose a new species","Species") as null|anything in GLOB.species_list if(!H) to_chat(usr, "Mob doesn't exist anymore") return if(result) - var/newtype = species_list[result] + var/newtype = GLOB.species_list[result] H.set_species(newtype) else if(href_list["editbodypart"]) diff --git a/code/datums/diseases/_disease.dm b/code/datums/diseases/_disease.dm index 74f67b22f7..fbf6af136e 100644 --- a/code/datums/diseases/_disease.dm +++ b/code/datums/diseases/_disease.dm @@ -26,10 +26,6 @@ #define DANGEROUS "Dangerous!" #define BIOHAZARD "BIOHAZARD THREAT!" - -var/list/diseases = subtypesof(/datum/disease) - - /datum/disease //Flags var/visibility_flags = 0 diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index 4da26d62e6..30693d3803 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -9,15 +9,7 @@ #define SYMPTOM_LIMIT 8 -var/list/archive_diseases = list() -// The order goes from easy to cure to hard to cure. -var/list/advance_cures = list( - "sodiumchloride", "sugar", "orangejuice", - "spaceacillin", "salglu_solution", "ethanol", - "leporazine", "synaptizine", "lipolicide", - "silver", "gold" - ) /* @@ -40,6 +32,14 @@ var/list/advance_cures = list( var/list/symptoms = list() // The symptoms of the disease. var/id = "" var/processing = 0 + + // The order goes from easy to cure to hard to cure. + var/static/list/advance_cures = list( + "sodiumchloride", "sugar", "orangejuice", + "spaceacillin", "salglu_solution", "ethanol", + "leporazine", "synaptizine", "lipolicide", + "silver", "gold" + ) /* @@ -48,13 +48,6 @@ var/list/advance_cures = list( */ /datum/disease/advance/New(var/process = 1, var/datum/disease/advance/D) - - // Setup our dictionary if it hasn't already. - if(!dictionary_symptoms.len) - for(var/symp in list_symptoms) - var/datum/symptom/S = new symp - dictionary_symptoms[S.id] = symp - if(!istype(D)) D = null // Generate symptoms if we weren't given any. @@ -141,7 +134,7 @@ var/list/advance_cures = list( // Generate symptoms. By default, we only choose non-deadly symptoms. var/list/possible_symptoms = list() - for(var/symp in list_symptoms) + for(var/symp in SSdisease.list_symptoms) var/datum/symptom/S = new symp if(S.level >= level_min && S.level <= level_max) if(!HasSymptom(S)) @@ -168,13 +161,13 @@ var/list/advance_cures = list( AssignProperties() id = null - if(!archive_diseases[GetDiseaseID()]) + if(!SSdisease.archive_diseases[GetDiseaseID()]) if(new_name) AssignName() - archive_diseases[GetDiseaseID()] = src // So we don't infinite loop - archive_diseases[GetDiseaseID()] = new /datum/disease/advance(0, src, 1) + SSdisease.archive_diseases[GetDiseaseID()] = src // So we don't infinite loop + SSdisease.archive_diseases[GetDiseaseID()] = new /datum/disease/advance(0, src, 1) - var/datum/disease/advance/A = archive_diseases[GetDiseaseID()] + var/datum/disease/advance/A = SSdisease.archive_diseases[GetDiseaseID()] AssignName(A.name) //Generate disease properties based on the effects. Returns an associated list. @@ -259,7 +252,7 @@ var/list/advance_cures = list( cures = list(advance_cures[res]) // Get the cure name from the cure_id - var/datum/reagent/D = chemical_reagents_list[cures[1]] + var/datum/reagent/D = GLOB.chemical_reagents_list[cures[1]] cure_text = D.name @@ -379,7 +372,7 @@ var/list/advance_cures = list( var/list/symptoms = list() symptoms += "Done" - symptoms += list_symptoms.Copy() + symptoms += SSdisease.list_symptoms.Copy() do if(user) var/symptom = input(user, "Choose a symptom to add ([i] remaining)", "Choose a Symptom") in symptoms @@ -405,7 +398,7 @@ var/list/advance_cures = list( for(var/datum/disease/advance/AD in SSdisease.processing) AD.Refresh() - for(var/mob/living/carbon/human/H in shuffle(living_mob_list)) + for(var/mob/living/carbon/human/H in shuffle(GLOB.living_mob_list)) if(H.z != 1) continue if(!H.HasDisease(D)) diff --git a/code/datums/diseases/advance/symptoms/fire.dm b/code/datums/diseases/advance/symptoms/fire.dm index 949d2f5f0f..90bfcbc6e3 100644 --- a/code/datums/diseases/advance/symptoms/fire.dm +++ b/code/datums/diseases/advance/symptoms/fire.dm @@ -45,7 +45,7 @@ Bonus return /datum/symptom/fire/proc/Firestacks_stage_4(mob/living/M, datum/disease/advance/A) - var/get_stacks = (sqrt(20+A.totalStageSpeed()*2))-(sqrt(16+A.totalStealth())) + var/get_stacks = (sqrt(20+A.totalStageSpeed()*2))-(sqrt(max(0, 16+A.totalStealth()))) M.adjust_fire_stacks(get_stacks) M.adjustFireLoss(get_stacks/2) return 1 diff --git a/code/datums/diseases/advance/symptoms/genetics.dm b/code/datums/diseases/advance/symptoms/genetics.dm index ddabefa9cf..a900dbb7c8 100644 --- a/code/datums/diseases/advance/symptoms/genetics.dm +++ b/code/datums/diseases/advance/symptoms/genetics.dm @@ -42,7 +42,7 @@ Bonus // Archive their DNA before they were infected. /datum/symptom/genetic_mutation/Start(datum/disease/advance/A) - possible_mutations = (bad_mutations | not_good_mutations) - mutations_list[RACEMUT] + possible_mutations = (GLOB.bad_mutations | GLOB.not_good_mutations) - GLOB.mutations_list[RACEMUT] var/mob/living/carbon/M = A.affected_mob if(M) if(!M.has_dna()) diff --git a/code/datums/diseases/advance/symptoms/heal.dm b/code/datums/diseases/advance/symptoms/heal.dm index 3fd75e7943..834d6c864d 100644 --- a/code/datums/diseases/advance/symptoms/heal.dm +++ b/code/datums/diseases/advance/symptoms/heal.dm @@ -282,7 +282,7 @@ Bonus var/amt_healed = 1 M.adjustBrainLoss(-amt_healed) //Non-power mutations, excluding race, so the virus does not force monkey -> human transformations. - var/list/unclean_mutations = (not_good_mutations|bad_mutations) - mutations_list[RACEMUT] + var/list/unclean_mutations = (GLOB.not_good_mutations|GLOB.bad_mutations) - GLOB.mutations_list[RACEMUT] M.dna.remove_mutation_group(unclean_mutations) M.radiation = max(M.radiation - (2 * amt_healed), 0) return 1 diff --git a/code/datums/diseases/advance/symptoms/symptoms.dm b/code/datums/diseases/advance/symptoms/symptoms.dm index 4b9de79c7a..44d7db5709 100644 --- a/code/datums/diseases/advance/symptoms/symptoms.dm +++ b/code/datums/diseases/advance/symptoms/symptoms.dm @@ -1,10 +1,5 @@ // Symptoms are the effects that engineered advanced diseases do. -var/list/list_symptoms = subtypesof(/datum/symptom) -var/list/dictionary_symptoms = list() - -var/global/const/SYMPTOM_ACTIVATION_PROB = 5 - /datum/symptom // Buffs/Debuffs the symptom has to the overall engineered disease. var/name = "" @@ -18,9 +13,10 @@ var/global/const/SYMPTOM_ACTIVATION_PROB = 5 var/severity = 0 // The hash tag for our diseases, we will add it up with our other symptoms to get a unique id! ID MUST BE UNIQUE!!! var/id = "" + var/static/SYMPTOM_ACTIVATION_PROB = 5 /datum/symptom/New() - var/list/S = list_symptoms + var/list/S = SSdisease.list_symptoms for(var/i = 1; i <= S.len; i++) if(src.type == S[i]) id = "[i]" diff --git a/code/datums/diseases/transformation.dm b/code/datums/diseases/transformation.dm index 3bde2e2b7e..88d9fca383 100644 --- a/code/datums/diseases/transformation.dm +++ b/code/datums/diseases/transformation.dm @@ -90,7 +90,7 @@ /datum/disease/transformation/jungle_fever/do_disease_transformation(mob/living/carbon/affected_mob) if(!ismonkey(affected_mob)) - ticker.mode.add_monkey(affected_mob.mind) + SSticker.mode.add_monkey(affected_mob.mind) affected_mob.monkeyize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSE) /datum/disease/transformation/jungle_fever/stage_act() @@ -108,7 +108,7 @@ affected_mob.say(pick("Eeek, ook ook!", "Eee-eeek!", "Eeee!", "Ungh, ungh.")) /datum/disease/transformation/jungle_fever/cure() - ticker.mode.remove_monkey(affected_mob.mind) + SSticker.mode.remove_monkey(affected_mob.mind) ..() diff --git a/code/datums/dna.dm b/code/datums/dna.dm index 71af078246..ecc3e121f0 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -41,15 +41,15 @@ new_dna.mutations = mutations.Copy() /datum/dna/proc/add_mutation(mutation_name) - var/datum/mutation/human/HM = mutations_list[mutation_name] + var/datum/mutation/human/HM = GLOB.mutations_list[mutation_name] HM.on_acquiring(holder) /datum/dna/proc/remove_mutation(mutation_name) - var/datum/mutation/human/HM = mutations_list[mutation_name] + var/datum/mutation/human/HM = GLOB.mutations_list[mutation_name] HM.on_losing(holder) /datum/dna/proc/check_mutation(mutation_name) - var/datum/mutation/human/HM = mutations_list[mutation_name] + var/datum/mutation/human/HM = GLOB.mutations_list[mutation_name] return mutations.Find(HM) /datum/dna/proc/remove_all_mutations() @@ -68,28 +68,28 @@ L[DNA_GENDER_BLOCK] = construct_block((holder.gender!=MALE)+1, 2) if(ishuman(holder)) var/mob/living/carbon/human/H = holder - if(!hair_styles_list.len) - init_sprite_accessory_subtypes(/datum/sprite_accessory/hair, hair_styles_list, hair_styles_male_list, hair_styles_female_list) - L[DNA_HAIR_STYLE_BLOCK] = construct_block(hair_styles_list.Find(H.hair_style), hair_styles_list.len) + if(!GLOB.hair_styles_list.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/hair,GLOB.hair_styles_list, GLOB.hair_styles_male_list, GLOB.hair_styles_female_list) + L[DNA_HAIR_STYLE_BLOCK] = construct_block(GLOB.hair_styles_list.Find(H.hair_style), GLOB.hair_styles_list.len) L[DNA_HAIR_COLOR_BLOCK] = sanitize_hexcolor(H.hair_color) - if(!facial_hair_styles_list.len) - init_sprite_accessory_subtypes(/datum/sprite_accessory/facial_hair, facial_hair_styles_list, facial_hair_styles_male_list, facial_hair_styles_female_list) - L[DNA_FACIAL_HAIR_STYLE_BLOCK] = construct_block(facial_hair_styles_list.Find(H.facial_hair_style), facial_hair_styles_list.len) + if(!GLOB.facial_hair_styles_list.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/facial_hair, GLOB.facial_hair_styles_list, GLOB.facial_hair_styles_male_list, GLOB.facial_hair_styles_female_list) + L[DNA_FACIAL_HAIR_STYLE_BLOCK] = construct_block(GLOB.facial_hair_styles_list.Find(H.facial_hair_style), GLOB.facial_hair_styles_list.len) L[DNA_FACIAL_HAIR_COLOR_BLOCK] = sanitize_hexcolor(H.facial_hair_color) - L[DNA_SKIN_TONE_BLOCK] = construct_block(skin_tones.Find(H.skin_tone), skin_tones.len) + L[DNA_SKIN_TONE_BLOCK] = construct_block(GLOB.skin_tones.Find(H.skin_tone), GLOB.skin_tones.len) L[DNA_EYE_COLOR_BLOCK] = sanitize_hexcolor(H.eye_color) for(var/i=1, i<=DNA_UNI_IDENTITY_BLOCKS, i++) if(L[i]) . += L[i] else - . += random_string(DNA_BLOCK_SIZE,hex_characters) + . += random_string(DNA_BLOCK_SIZE,GLOB.hex_characters) return . /datum/dna/proc/generate_struc_enzymes() var/list/sorting = new /list(DNA_STRUC_ENZYMES_BLOCKS) var/result = "" - for(var/datum/mutation/human/A in good_mutations + bad_mutations + not_good_mutations) + for(var/datum/mutation/human/A in GLOB.good_mutations + GLOB.bad_mutations + GLOB.not_good_mutations) if(A.name == RACEMUT && ismonkey(holder)) sorting[A.dna_block] = num2hex(A.lowest_value + rand(0, 256 * 6), DNA_BLOCK_SIZE) mutations |= A @@ -106,7 +106,7 @@ real_name = holder.real_name . += md5(holder.real_name) else - . += random_string(DNA_UNIQUE_ENZYMES_LEN, hex_characters) + . += random_string(DNA_UNIQUE_ENZYMES_LEN, GLOB.hex_characters) return . /datum/dna/proc/update_ui_block(blocknumber) @@ -119,15 +119,15 @@ if(DNA_FACIAL_HAIR_COLOR_BLOCK) setblock(uni_identity, blocknumber, sanitize_hexcolor(H.facial_hair_color)) if(DNA_SKIN_TONE_BLOCK) - setblock(uni_identity, blocknumber, construct_block(skin_tones.Find(H.skin_tone), skin_tones.len)) + setblock(uni_identity, blocknumber, construct_block(GLOB.skin_tones.Find(H.skin_tone), GLOB.skin_tones.len)) if(DNA_EYE_COLOR_BLOCK) setblock(uni_identity, blocknumber, sanitize_hexcolor(H.eye_color)) if(DNA_GENDER_BLOCK) setblock(uni_identity, blocknumber, construct_block((H.gender!=MALE)+1, 2)) if(DNA_FACIAL_HAIR_STYLE_BLOCK) - setblock(uni_identity, blocknumber, construct_block(facial_hair_styles_list.Find(H.facial_hair_style), facial_hair_styles_list.len)) + setblock(uni_identity, blocknumber, construct_block(GLOB.facial_hair_styles_list.Find(H.facial_hair_style), GLOB.facial_hair_styles_list.len)) if(DNA_HAIR_STYLE_BLOCK) - setblock(uni_identity, blocknumber, construct_block(hair_styles_list.Find(H.hair_style), hair_styles_list.len)) + setblock(uni_identity, blocknumber, construct_block(GLOB.hair_styles_list.Find(H.hair_style), GLOB.hair_styles_list.len)) /datum/dna/proc/mutations_say_mods(message) if(message) @@ -274,10 +274,10 @@ var/structure = dna.uni_identity hair_color = sanitize_hexcolor(getblock(structure, DNA_HAIR_COLOR_BLOCK)) facial_hair_color = sanitize_hexcolor(getblock(structure, DNA_FACIAL_HAIR_COLOR_BLOCK)) - skin_tone = skin_tones[deconstruct_block(getblock(structure, DNA_SKIN_TONE_BLOCK), skin_tones.len)] + skin_tone = GLOB.skin_tones[deconstruct_block(getblock(structure, DNA_SKIN_TONE_BLOCK), GLOB.skin_tones.len)] eye_color = sanitize_hexcolor(getblock(structure, DNA_EYE_COLOR_BLOCK)) - facial_hair_style = facial_hair_styles_list[deconstruct_block(getblock(structure, DNA_FACIAL_HAIR_STYLE_BLOCK), facial_hair_styles_list.len)] - hair_style = hair_styles_list[deconstruct_block(getblock(structure, DNA_HAIR_STYLE_BLOCK), hair_styles_list.len)] + facial_hair_style = GLOB.facial_hair_styles_list[deconstruct_block(getblock(structure, DNA_FACIAL_HAIR_STYLE_BLOCK), GLOB.facial_hair_styles_list.len)] + hair_style = GLOB.hair_styles_list[deconstruct_block(getblock(structure, DNA_HAIR_STYLE_BLOCK), GLOB.hair_styles_list.len)] if(icon_update) update_body() update_hair() @@ -294,7 +294,7 @@ if(!has_dna()) return - for(var/datum/mutation/human/A in good_mutations | bad_mutations | not_good_mutations) + for(var/datum/mutation/human/A in GLOB.good_mutations | GLOB.bad_mutations | GLOB.not_good_mutations) if(ismob(A.check_block(src, force_powers))) return //we got monkeyized/humanized, this mob will be deleted, no need to continue. @@ -328,26 +328,26 @@ /mob/living/carbon/proc/randmutb() if(!has_dna()) return - var/datum/mutation/human/HM = pick((bad_mutations | not_good_mutations) - mutations_list[RACEMUT]) + var/datum/mutation/human/HM = pick((GLOB.bad_mutations | GLOB.not_good_mutations) - GLOB.mutations_list[RACEMUT]) . = HM.force_give(src) /mob/living/carbon/proc/randmutg() if(!has_dna()) return - var/datum/mutation/human/HM = pick(good_mutations) + var/datum/mutation/human/HM = pick(GLOB.good_mutations) . = HM.force_give(src) /mob/living/carbon/proc/randmutvg() if(!has_dna()) return - var/datum/mutation/human/HM = pick((good_mutations) - mutations_list[HULK] - mutations_list[DWARFISM]) + var/datum/mutation/human/HM = pick((GLOB.good_mutations) - GLOB.mutations_list[HULK] - GLOB.mutations_list[DWARFISM]) . = HM.force_give(src) /mob/living/carbon/proc/randmuti() if(!has_dna()) return var/num = rand(1, DNA_UNI_IDENTITY_BLOCKS) - var/newdna = setblock(dna.uni_identity, num, random_string(DNA_BLOCK_SIZE, hex_characters)) + var/newdna = setblock(dna.uni_identity, num, random_string(DNA_BLOCK_SIZE, GLOB.hex_characters)) dna.uni_identity = newdna updateappearance(mutations_overlay_update=1) @@ -366,12 +366,12 @@ if(se) for(var/i=1, i<=DNA_STRUC_ENZYMES_BLOCKS, i++) if(prob(probability)) - M.dna.struc_enzymes = setblock(M.dna.struc_enzymes, i, random_string(DNA_BLOCK_SIZE, hex_characters)) + M.dna.struc_enzymes = setblock(M.dna.struc_enzymes, i, random_string(DNA_BLOCK_SIZE, GLOB.hex_characters)) M.domutcheck() if(ui) for(var/i=1, i<=DNA_UNI_IDENTITY_BLOCKS, i++) if(prob(probability)) - M.dna.uni_identity = setblock(M.dna.uni_identity, i, random_string(DNA_BLOCK_SIZE, hex_characters)) + M.dna.uni_identity = setblock(M.dna.uni_identity, i, random_string(DNA_BLOCK_SIZE, GLOB.hex_characters)) M.updateappearance(mutations_overlay_update=1) return 1 diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm index 7039bf2c48..0d6488c633 100644 --- a/code/datums/emotes.dm +++ b/code/datums/emotes.dm @@ -1,8 +1,6 @@ #define EMOTE_VISIBLE 1 #define EMOTE_AUDIBLE 2 -var/global/list/emote_list = list() - /datum/emote var/key = "" //What calls the emote var/key_third_person = "" //This will also call the emote @@ -21,6 +19,7 @@ var/global/list/emote_list = list() var/list/mob_type_allowed_typecache = list() //Types that are allowed to use that emote var/list/mob_type_blacklist_typecache = list() //Types that are NOT allowed to use that emote var/stat_allowed = CONSCIOUS + var/static/list/emote_list = list() /datum/emote/New() ..() @@ -53,7 +52,7 @@ var/global/list/emote_list = list() user.log_message(msg, INDIVIDUAL_EMOTE_LOG) msg = "[user] " + msg - for(var/mob/M in dead_mob_list) + for(var/mob/M in GLOB.dead_mob_list) if(!M.client || isnewplayer(M)) continue var/T = get_turf(src) diff --git a/code/datums/gas_overrides.dm b/code/datums/gas_overrides.dm deleted file mode 100644 index c58d5ad176..0000000000 --- a/code/datums/gas_overrides.dm +++ /dev/null @@ -1,5 +0,0 @@ -/datum/proc/freon_gas_act() - return 0 - -/datum/proc/water_vapor_gas_act() // We get it - return 0 // You vape \ No newline at end of file diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm index f1f994becf..957a569741 100644 --- a/code/datums/helper_datums/getrev.dm +++ b/code/datums/helper_datums/getrev.dm @@ -1,5 +1,3 @@ -var/global/datum/getrev/revdata = new() - /datum/getrev var/parentcommit var/commit @@ -46,7 +44,7 @@ var/global/datum/getrev/revdata = new() return var/url = "https://api.github.com/repositories/[config.githubrepoid]/pulls/[line].json" - valid_HTTPSGet = TRUE + GLOB.valid_HTTPSGet = TRUE var/json = HTTPSGet(url) if(!json) return @@ -75,12 +73,12 @@ var/global/datum/getrev/revdata = new() set name = "Show Server Revision" set desc = "Check the current server code revision" - if(revdata.parentcommit) - to_chat(src, "Server revision compiled on: [revdata.date]") - if(revdata.testmerge.len) - to_chat(src, revdata.GetTestMergeInfo()) + if(GLOB.revdata.parentcommit) + to_chat(src, "Server revision compiled on: [GLOB.revdata.date]") + if(GLOB.revdata.testmerge.len) + to_chat(src, GLOB.revdata.GetTestMergeInfo()) to_chat(src, "Based off master commit:") - to_chat(src, "[revdata.parentcommit]") + to_chat(src, "[GLOB.revdata.parentcommit]") else to_chat(src, "Revision unknown") to_chat(src, "Current Infomational Settings:") @@ -91,7 +89,7 @@ var/global/datum/getrev/revdata = new() to_chat(src, "Enforce Continuous Rounds: [config.continuous.len] of [config.modes.len] roundtypes") to_chat(src, "Allow Midround Antagonists: [config.midround_antag.len] of [config.modes.len] roundtypes") if(config.show_game_type_odds) - if(ticker.current_state == GAME_STATE_PLAYING) + if(SSticker.current_state == GAME_STATE_PLAYING) var/prob_sum = 0 var/current_odds_differ = FALSE var/list/probs = list() @@ -101,7 +99,7 @@ var/global/datum/getrev/revdata = new() var/ctag = initial(M.config_tag) if(!(ctag in config.probabilities)) continue - if((config.min_pop[ctag] && (config.min_pop[ctag] > ticker.totalPlayersReady)) || (config.max_pop[ctag] && (config.max_pop[ctag] < ticker.totalPlayersReady)) || (initial(M.required_players) > ticker.totalPlayersReady)) + if((config.min_pop[ctag] && (config.min_pop[ctag] > SSticker.totalPlayersReady)) || (config.max_pop[ctag] && (config.max_pop[ctag] < SSticker.totalPlayersReady)) || (initial(M.required_players) > SSticker.totalPlayersReady)) current_odds_differ = TRUE continue probs[ctag] = 1 diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index 5ab718da3a..1309eaaef9 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -195,7 +195,7 @@ var/list/A_gases = A.gases var/trace_gases for(var/id in A_gases) - if(id in hardcoded_gases) + if(id in GLOB.hardcoded_gases) continue trace_gases = TRUE break diff --git a/code/datums/hud.dm b/code/datums/hud.dm index 39487d1078..601fd24c4c 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -1,26 +1,26 @@ /* HUD DATUMS */ //GLOBAL HUD LIST -var/datum/atom_hud/huds = list( \ - DATA_HUD_SECURITY_BASIC = new/datum/atom_hud/data/human/security/basic(), \ - DATA_HUD_SECURITY_ADVANCED = new/datum/atom_hud/data/human/security/advanced(), \ - DATA_HUD_MEDICAL_BASIC = new/datum/atom_hud/data/human/medical/basic(), \ - DATA_HUD_MEDICAL_ADVANCED = new/datum/atom_hud/data/human/medical/advanced(), \ - DATA_HUD_DIAGNOSTIC = new/datum/atom_hud/data/diagnostic(), \ - ANTAG_HUD_CULT = new/datum/atom_hud/antag(), \ - ANTAG_HUD_REV = new/datum/atom_hud/antag(), \ - ANTAG_HUD_OPS = new/datum/atom_hud/antag(), \ - ANTAG_HUD_WIZ = new/datum/atom_hud/antag(), \ - ANTAG_HUD_SHADOW = new/datum/atom_hud/antag(), \ - ANTAG_HUD_TRAITOR = new/datum/atom_hud/antag/hidden(),\ - ANTAG_HUD_NINJA = new/datum/atom_hud/antag/hidden(),\ - ANTAG_HUD_CHANGELING = new/datum/atom_hud/antag/hidden(),\ - ANTAG_HUD_ABDUCTOR = new/datum/atom_hud/antag/hidden(),\ - ANTAG_HUD_DEVIL = new/datum/atom_hud/antag(),\ - ANTAG_HUD_SINTOUCHED = new/datum/atom_hud/antag/hidden(),\ - ANTAG_HUD_SOULLESS = new/datum/atom_hud/antag/hidden(),\ - ANTAG_HUD_CLOCKWORK = new/datum/atom_hud/antag(),\ - ) +GLOBAL_LIST_INIT(huds, list( + DATA_HUD_SECURITY_BASIC = new/datum/atom_hud/data/human/security/basic(), + DATA_HUD_SECURITY_ADVANCED = new/datum/atom_hud/data/human/security/advanced(), + DATA_HUD_MEDICAL_BASIC = new/datum/atom_hud/data/human/medical/basic(), + DATA_HUD_MEDICAL_ADVANCED = new/datum/atom_hud/data/human/medical/advanced(), + DATA_HUD_DIAGNOSTIC = new/datum/atom_hud/data/diagnostic(), + ANTAG_HUD_CULT = new/datum/atom_hud/antag(), + ANTAG_HUD_REV = new/datum/atom_hud/antag(), + ANTAG_HUD_OPS = new/datum/atom_hud/antag(), + ANTAG_HUD_WIZ = new/datum/atom_hud/antag(), + ANTAG_HUD_SHADOW = new/datum/atom_hud/antag(), + ANTAG_HUD_TRAITOR = new/datum/atom_hud/antag/hidden(), + ANTAG_HUD_NINJA = new/datum/atom_hud/antag/hidden(), + ANTAG_HUD_CHANGELING = new/datum/atom_hud/antag/hidden(), + ANTAG_HUD_ABDUCTOR = new/datum/atom_hud/antag/hidden(), + ANTAG_HUD_DEVIL = new/datum/atom_hud/antag(), + ANTAG_HUD_SINTOUCHED = new/datum/atom_hud/antag/hidden(), + ANTAG_HUD_SOULLESS = new/datum/atom_hud/antag/hidden(), + ANTAG_HUD_CLOCKWORK = new/datum/atom_hud/antag(), + )) /datum/atom_hud var/list/atom/hudatoms = list() //list of all atoms which display this hud @@ -73,11 +73,11 @@ var/datum/atom_hud/huds = list( \ //MOB PROCS /mob/proc/reload_huds() var/gang_huds = list() - if(ticker.mode) - for(var/datum/gang/G in ticker.mode.gangs) + if(SSticker.mode) + for(var/datum/gang/G in SSticker.mode.gangs) gang_huds += G.ganghud - for(var/datum/atom_hud/hud in (huds|gang_huds)) + for(var/datum/atom_hud/hud in (GLOB.huds|gang_huds)) if(src in hud.hudusers) hud.add_hud_to(src) diff --git a/code/datums/map_config.dm b/code/datums/map_config.dm index da8a9a5c4d..4dc0362d01 100644 --- a/code/datums/map_config.dm +++ b/code/datums/map_config.dm @@ -77,7 +77,7 @@ defaulted = FALSE -#define CHECK_EXISTS(X) if(!istext(json[X])) log_world(X + "missing from json!") +#define CHECK_EXISTS(X) if(!istext(json[X])) { log_world(X + "missing from json!"); return; } /datum/map_config/proc/ValidateJSON(list/json) CHECK_EXISTS("map_name") CHECK_EXISTS("map_path") @@ -141,6 +141,3 @@ /datum/map_config/proc/MakeNextMap() return config_filename == "data/next_map.json" || fcopy(config_filename, "data/next_map.json") - -/datum/map_config/proc/MakePreviousMap() - return config_filename == "data/previous_map.json" || fcopy(config_filename, "data/previous_map.json") \ No newline at end of file diff --git a/code/datums/martial.dm b/code/datums/martial.dm index 803faabba6..cc6fa4f2c8 100644 --- a/code/datums/martial.dm +++ b/code/datums/martial.dm @@ -71,9 +71,9 @@ D.visible_message("[A] has weakened [D]!!", \ "[A] has weakened [D]!") D.apply_effect(4, WEAKEN, armor_block) - D.forcesay(hit_appends) + D.forcesay(GLOB.hit_appends) else if(D.lying) - D.forcesay(hit_appends) + D.forcesay(GLOB.hit_appends) return 1 /datum/martial_art/proc/teach(mob/living/carbon/human/H,make_temporary=0) @@ -137,10 +137,10 @@ "[A] has knocked [D] out with a haymaker!") D.apply_effect(10,WEAKEN,armor_block) D.SetSleeping(5) - D.forcesay(hit_appends) + D.forcesay(GLOB.hit_appends) add_logs(A, D, "knocked out (boxing) ") else if(D.lying) - D.forcesay(hit_appends) + D.forcesay(GLOB.hit_appends) return 1 /mob/living/carbon/human/proc/wrestling_help() @@ -459,7 +459,7 @@ D.throw_at(throw_target, 1, 14, A) D.apply_damage(10, BRUTE) add_logs(A, D, "cqc kicked") - if(D.weakened && D.stat != DEAD) + if(D.weakened && !D.stat) D.visible_message("[A] kicks [D]'s head, knocking them out!", \ "[A] kicks your head, knocking you out!") playsound(get_turf(A), 'sound/weapons/genhit1.ogg', 50, 1, -1) @@ -491,8 +491,7 @@ "[A] strikes your abdomen, neck and back consecutively!") playsound(get_turf(D), 'sound/weapons/cqchit2.ogg', 50, 1, -1) var/obj/item/I = D.get_active_held_item() - if(I) - D.drop_item() + if(I && D.drop_item()) A.put_in_hands(I) D.adjustStaminaLoss(50) D.apply_damage(25, BRUTE) @@ -543,16 +542,16 @@ /datum/martial_art/cqc/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) add_to_streak("D",D) + var/obj/item/I = null if(check_streak(A,D)) return 1 if(prob(65)) if(!D.stat || !D.weakened || !restraining) - var/obj/item/I = D.get_active_held_item() + I = D.get_active_held_item() D.visible_message("[A] strikes [D]'s jaw with their hand!", \ "[A] strikes your jaw, disorienting you!") playsound(get_turf(D), 'sound/weapons/cqchit1.ogg', 50, 1, -1) - if(I) - D.drop_item() + if(I && D.drop_item()) A.put_in_hands(I) D.Jitter(2) D.apply_damage(5, BRUTE) @@ -560,7 +559,7 @@ D.visible_message("[A] attempted to disarm [D]!", \ "[A] attempted to disarm [D]!") playsound(D, 'sound/weapons/punchmiss.ogg', 25, 1, -1) - add_logs(A, D, "disarmed with CQC") + add_logs(A, D, "disarmed with CQC", "[I ? " grabbing \the [I]" : ""]") if(restraining && A.pulling == D) D.visible_message("[A] puts [D] into a chokehold!", \ "[A] puts you into a chokehold!") @@ -574,7 +573,7 @@ return 1 /mob/living/carbon/human/proc/CQC_help() - set name = "Recall Teachings" + set name = "Remember The Basics" set desc = "You try to remember some of the basics of CQC." set category = "CQC" @@ -584,7 +583,7 @@ to_chat(usr, "CQC Kick: Harm Disarm Harm. Knocks opponent away. Knocks out stunned or weakened opponents.") to_chat(usr, "Restrain: Grab Grab. Locks opponents into a restraining position, disarm to knock them out with a choke hold.") to_chat(usr, "Pressure: Disarm Grab. Decent stamina damage.") - to_chat(usr, "Consecutive CQC: Harm Harm Disarm. Mainly offensive move, huge damage and decent stamina damage.") + to_chat(usr, "Consecutive CQC: Disarm Disarm Harm. Mainly offensive move, huge damage and decent stamina damage.") to_chat(usr, "In addition, by having your throw mode on when being attacked, you enter an active defense mode where you have a chance to block and sometimes even counter attacks done to you.") diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index 5542aa2b27..1a193db87b 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -132,8 +132,9 @@ /datum/martial_art/krav_maga/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) if(check_streak(A,D)) return 1 + var/obj/item/I = null if(prob(60)) - var/obj/item/I = D.get_active_held_item() + I = D.get_active_held_item() if(I) if(D.drop_item()) A.put_in_hands(I) @@ -144,7 +145,7 @@ D.visible_message("[A] attempted to disarm [D]!", \ "[A] attempted to disarm [D]!") playsound(D, 'sound/weapons/punchmiss.ogg', 25, 1, -1) - add_logs(A, D, "disarmed with krav maga") + add_logs(A, D, "disarmed with krav maga", "[I ? " removing \the [I]" : ""]") return 1 //Krav Maga Gloves diff --git a/code/datums/martial/wrestling.dm b/code/datums/martial/wrestling.dm index 8402fe647b..5554ceeaeb 100644 --- a/code/datums/martial/wrestling.dm +++ b/code/datums/martial/wrestling.dm @@ -186,6 +186,14 @@ add_logs(A, D, "has thrown with wrestling") return 0 +/datum/martial_art/wrestling/proc/FlipAnimation(mob/living/carbon/human/D) + set waitfor = FALSE + if (D) + animate(D, transform = matrix(180, MATRIX_ROTATE), time = 1, loop = 0) + sleep (15) + if (D) + animate(D, transform = null, time = 1, loop = 0) + /datum/martial_art/wrestling/proc/slam(mob/living/carbon/human/A, mob/living/carbon/human/D) if(!D) return @@ -198,12 +206,7 @@ A.visible_message("[A] lifts [D] up!") - spawn (0) - if (D) - animate(D, transform = matrix(180, MATRIX_ROTATE), time = 1, loop = 0) - sleep (15) - if (D) - animate(D, transform = null, time = 1, loop = 0) + FlipAnimation() for (var/i = 0, i < 3, i++) if (A && D) @@ -300,6 +303,10 @@ add_logs(A, D, "body-slammed") return 0 +/datum/martial_art/wrestling/proc/CheckStrikeTurf(mob/living/carbon/human/A, turf/T) + if (A && (T && isturf(T) && get_dist(A, T) <= 1)) + A.forceMove(T) + /datum/martial_art/wrestling/proc/strike(mob/living/carbon/human/A, mob/living/carbon/human/D) if(!D) return @@ -309,9 +316,7 @@ A.setDir(turn(A.dir, 90)) A.forceMove(D.loc) - spawn (4) - if (A && (T && isturf(T) && get_dist(A, T) <= 1)) - A.forceMove(T) + addtimer(CALLBACK(src, .proc/CheckStrikeTurf, A, T), 4) A.visible_message("[A] headbutts [D]!") D.adjustBruteLoss(rand(10,20)) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 2ee1b88b8d..0f308681af 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -69,7 +69,7 @@ soulOwner = src /datum/mind/Destroy() - ticker.minds -= src + SSticker.minds -= src return ..() /datum/mind/proc/transfer_to(mob/new_character, var/force_key_move = 0) @@ -121,19 +121,19 @@ qdel(O) /datum/mind/proc/remove_changeling() - if(src in ticker.mode.changelings) - ticker.mode.changelings -= src + if(src in SSticker.mode.changelings) + SSticker.mode.changelings -= src current.remove_changeling_powers() if(changeling) qdel(changeling) changeling = null special_role = null remove_antag_equip() - ticker.mode.update_changeling_icons_removed(src) + SSticker.mode.update_changeling_icons_removed(src) /datum/mind/proc/remove_traitor() - if(src in ticker.mode.traitors) - ticker.mode.traitors -= src + if(src in SSticker.mode.traitors) + SSticker.mode.traitors -= src if(isAI(current)) var/mob/living/silicon/ai/A = current A.set_zeroth_law("") @@ -142,44 +142,44 @@ qdel(A.malf_picker) special_role = null remove_antag_equip() - ticker.mode.update_traitor_icons_removed(src) + SSticker.mode.update_traitor_icons_removed(src) /datum/mind/proc/remove_nukeop() - if(src in ticker.mode.syndicates) - ticker.mode.syndicates -= src - ticker.mode.update_synd_icons_removed(src) + if(src in SSticker.mode.syndicates) + SSticker.mode.syndicates -= src + SSticker.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 + if(src in SSticker.mode.wizards) + SSticker.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.remove_cultist(src, 0, 0) + if(src in SSticker.mode.cult) + SSticker.mode.remove_cultist(src, 0, 0) special_role = null remove_objectives() remove_antag_equip() /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) + if(src in SSticker.mode.revolutionaries) + SSticker.mode.revolutionaries -= src + SSticker.mode.update_rev_icons_removed(src) + if(src in SSticker.mode.head_revolutionaries) + SSticker.mode.head_revolutionaries -= src + SSticker.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) + SSticker.mode.remove_gangster(src,0,1,1) remove_objectives() /datum/mind/proc/remove_antag_equip() @@ -201,11 +201,11 @@ remove_cultist() remove_rev() remove_gang() - ticker.mode.update_changeling_icons_removed(src) - ticker.mode.update_traitor_icons_removed(src) - ticker.mode.update_wiz_icons_removed(src) - ticker.mode.update_cult_icons_removed(src) - ticker.mode.update_rev_icons_removed(src) + SSticker.mode.update_changeling_icons_removed(src) + SSticker.mode.update_traitor_icons_removed(src) + SSticker.mode.update_wiz_icons_removed(src) + SSticker.mode.update_cult_icons_removed(src) + SSticker.mode.update_rev_icons_removed(src) if(gang_datum) gang_datum.remove_gang_hud(src) @@ -214,13 +214,13 @@ /datum/mind/proc/enslave_mind_to_creator(mob/living/creator) if(iscultist(creator)) - ticker.mode.add_cultist(src) + SSticker.mode.add_cultist(src) else if(is_gangster(creator)) - ticker.mode.add_gangster(src, creator.mind.gang_datum, TRUE) + SSticker.mode.add_gangster(src, creator.mind.gang_datum, TRUE) else if(is_revolutionary_in_general(creator)) - ticker.mode.add_revolutionary(src) + SSticker.mode.add_revolutionary(src) else if(is_servant_of_ratvar(creator)) add_servant_of_ratvar(current) @@ -255,7 +255,7 @@ to_chat(recipient, "[output]") /datum/mind/proc/edit_memory() - if(!ticker || !ticker.mode) + if(!SSticker || !SSticker.mode) alert("Not before round-start!", "Alert") return @@ -280,12 +280,12 @@ if(ishuman(current)) /** REVOLUTION ***/ text = "revolution" - if (ticker.mode.config_tag=="revolution") + if (SSticker.mode.config_tag=="revolution") text = uppertext(text) text = "[text]: " - if (assigned_role in command_positions) + if (assigned_role in GLOB.command_positions) text += "HEAD|loyal|employee|headrev|rev" - else if (src in ticker.mode.head_revolutionaries) + else if (src in SSticker.mode.head_revolutionaries) text += "head|loyal|employee|HEADREV|rev" text += "
Flash: give" @@ -304,7 +304,7 @@ text += "
Objectives are empty! Set to kill all heads." else if(current.isloyal()) text += "head|LOYAL|employee|headrev|rev" - else if (src in ticker.mode.revolutionaries) + else if (src in SSticker.mode.revolutionaries) text += "head|loyal|employee|headrev|REV" else text += "head|loyal|EMPLOYEE|headrev|rev" @@ -318,11 +318,11 @@ /** GANG ***/ text = "gang" - if (ticker.mode.config_tag=="gang") + if (SSticker.mode.config_tag=="gang") text = uppertext(text) text = "[text]: " text += "[current.isloyal() ? "LOYAL" : "loyal"]|" - if(src in ticker.mode.get_all_gangsters()) + if(src in SSticker.mode.get_all_gangsters()) text += "none" else text += "NONE" @@ -332,7 +332,7 @@ else text += "|Disabled in Prefs
" - for(var/datum/gang/G in ticker.mode.gangs) + for(var/datum/gang/G in SSticker.mode.gangs) text += "[G.name]: " if(src in (G.gangsters)) text += "GANGSTER" @@ -351,17 +351,17 @@ text += "gang leader" text += "
" - if(gang_colors_pool.len) + if(GLOB.gang_colors_pool.len) text += "Create New Gang" sections["gang"] = text /** Abductors **/ text = "Abductor" - if(ticker.mode.config_tag == "abductor") + if(SSticker.mode.config_tag == "abductor") text = uppertext(text) text = "[text]: " - if(src in ticker.mode.abductors) + if(src in SSticker.mode.abductors) text += "Abductor|human" text += "|undress|equip" else @@ -376,14 +376,14 @@ /** NUCLEAR ***/ text = "nuclear" - if (ticker.mode.config_tag=="nuclear") + if (SSticker.mode.config_tag=="nuclear") text = uppertext(text) text = "[text]: " - if (src in ticker.mode.syndicates) + if (src in SSticker.mode.syndicates) text += "OPERATIVE|nanotrasen" text += "
To shuttle, undress, dress up." var/code - for (var/obj/machinery/nuclearbomb/bombue in machines) + for (var/obj/machinery/nuclearbomb/bombue in GLOB.machines) if (length(bombue.r_code) <= 5 && bombue.r_code != "LOLNO" && bombue.r_code != "ADMIN") code = bombue.r_code break @@ -401,10 +401,10 @@ /** WIZARD ***/ text = "wizard" - if (ticker.mode.config_tag=="wizard") + if (SSticker.mode.config_tag=="wizard") text = uppertext(text) text = "[text]: " - if ((src in ticker.mode.wizards) || (src in ticker.mode.apprentices)) + if ((src in SSticker.mode.wizards) || (src in SSticker.mode.apprentices)) text += "YES|no" text += "
To lair, undress, dress up, let choose name." if (objectives.len==0) @@ -421,7 +421,7 @@ /** CULT ***/ text = "cult" - if (ticker.mode.config_tag=="cult") + if (SSticker.mode.config_tag=="cult") text = uppertext(text) text = "[text]: " if(iscultist(current)) @@ -444,7 +444,7 @@ /** CLOCKWORK CULT **/ text = "clockwork cult" - if(ticker.mode.config_tag == "clockwork cult") + if(SSticker.mode.config_tag == "clockwork cult") text = uppertext(text) text = "[text]: " if(is_servant_of_ratvar(current)) @@ -466,10 +466,10 @@ /** TRAITOR ***/ text = "traitor" - if (ticker.mode.config_tag=="traitor" || ticker.mode.config_tag=="traitorchan") + if (SSticker.mode.config_tag=="traitor" || SSticker.mode.config_tag=="traitorchan") text = uppertext(text) text = "[text]: " - if (src in ticker.mode.traitors) + if (src in SSticker.mode.traitors) text += "TRAITOR|loyal" if (objectives.len==0) text += "
Objectives are empty! Randomize!" @@ -487,16 +487,16 @@ /** CHANGELING ***/ text = "changeling" - if (ticker.mode.config_tag=="changeling" || ticker.mode.config_tag=="traitorchan") + if (SSticker.mode.config_tag=="changeling" || SSticker.mode.config_tag=="traitorchan") text = uppertext(text) text = "[text]: " - if ((src in ticker.mode.changelings) && special_role) + if ((src in SSticker.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 + else if(src in SSticker.mode.changelings) //Station Aligned Changeling text += "YES (but not an antag)|no" if (objectives.len==0) text += "
Objectives are empty! Randomize!" @@ -514,7 +514,7 @@ /** MONKEY ***/ text = "monkey" - if (ticker.mode.config_tag=="monkey") + if (SSticker.mode.config_tag=="monkey") text = uppertext(text) text = "[text]: " if (ishuman(current)) @@ -541,15 +541,15 @@ /** devil ***/ text = "devil" - if(ticker.mode.config_tag == "devil") + if(SSticker.mode.config_tag == "devil") text = uppertext(text) text = "[text]: " - if(src in ticker.mode.devils) + if(src in SSticker.mode.devils) if(devilinfo && !devilinfo.ascendable) text += "DEVIL|Ascendable Devil|sintouched|human" else text += "DEVIL|ASCENDABLE DEVIL|sintouched|human" - else if(src in ticker.mode.sintouched) + else if(src in SSticker.mode.sintouched) text += "devil|Ascendable Devil|SINTOUCHED|human" else text += "devil|Ascendable Devil|sintouched|HUMAN" @@ -575,7 +575,7 @@ 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 (SSticker.mode.config_tag == "traitorchan") if (sections["traitor"]) out += sections["traitor"]+"
" if (sections["changeling"]) @@ -583,15 +583,15 @@ sections -= "traitor" sections -= "changeling" else - if (sections[ticker.mode.config_tag]) - out += sections[ticker.mode.config_tag]+"

" - sections -= ticker.mode.config_tag + if (sections[SSticker.mode.config_tag]) + out += sections[SSticker.mode.config_tag]+"

" + sections -= SSticker.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)) && ishuman(current)) + if(((src in SSticker.mode.head_revolutionaries) || (src in SSticker.mode.traitors) || (src in SSticker.mode.syndicates)) && ishuman(current)) text = "Uplink: give" var/obj/item/device/uplink/U = find_syndicate_uplink() @@ -666,7 +666,7 @@ 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) + for(var/datum/mind/possible_target in SSticker.minds) if ((possible_target != src) && ishuman(possible_target.current)) possible_targets += possible_target.current @@ -803,32 +803,32 @@ 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) + if(src in SSticker.mode.head_revolutionaries) + SSticker.mode.head_revolutionaries -= src + SSticker.mode.update_rev_icons_removed(src) to_chat(current, "Revolution has been disappointed of your leader traits! You are a regular revolutionary now!") - else if(!(src in ticker.mode.revolutionaries)) + else if(!(src in SSticker.mode.revolutionaries)) to_chat(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) + SSticker.mode.revolutionaries += src + SSticker.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) + if(src in SSticker.mode.revolutionaries) + SSticker.mode.revolutionaries -= src + SSticker.mode.update_rev_icons_removed(src) to_chat(current, "You have proved your devotion to revoltion! Yea are a head revolutionary now!") - else if(!(src in ticker.mode.head_revolutionaries)) + else if(!(src in SSticker.mode.head_revolutionaries)) to_chat(current, "You are a member of the revolutionaries' leadership now!") else return - if (ticker.mode.head_revolutionaries.len>0) + if (SSticker.mode.head_revolutionaries.len>0) // copy targets - var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries + var/datum/mind/valid_head = locate() in SSticker.mode.head_revolutionaries if (valid_head) for (var/datum/objective/mutiny/O in valid_head.objectives) var/datum/objective/mutiny/rev_obj = new @@ -836,20 +836,20 @@ 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) + SSticker.mode.greet_revolutionary(src,0) + SSticker.mode.head_revolutionaries += src + SSticker.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) + SSticker.mode.forge_revolutionary_objectives(src) + SSticker.mode.greet_revolutionary(src,0) to_chat(usr, "The objectives for revolution have been generated and shown to [key]") if("flash") - if (!ticker.mode.equip_revolutionary(current)) + if (!SSticker.mode.equip_revolutionary(current)) to_chat(usr, "Spawning flash failed!") if("takeflash") @@ -880,7 +880,7 @@ log_admin("[key_name(usr)] has de-gang'ed [current].") if("equip") - switch(ticker.mode.equip_gang(current,gang_datum)) + switch(SSticker.mode.equip_gang(current,gang_datum)) if(1) to_chat(usr, "Unable to equip territory spraycan!") if(2) @@ -898,22 +898,22 @@ qdel(SC) if("new") - if(gang_colors_pool.len) - var/list/names = list("Random") + gang_name_pool + if(GLOB.gang_colors_pool.len) + var/list/names = list("Random") + GLOB.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)) + if(gangname && GLOB.gang_colors_pool.len) //Check again just in case another admin made max gangs at the same time + if(!(gangname in GLOB.gang_name_pool)) gangname = null var/datum/gang/newgang = new(null,gangname) - ticker.mode.gangs += newgang + SSticker.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 + var/datum/gang/G = locate(href_list["gangboss"]) in SSticker.mode.gangs if(!G || (src in G.bosses)) return - ticker.mode.remove_gangster(src,0,2,1) + SSticker.mode.remove_gangster(src,0,2,1) G.bosses += src gang_datum = G special_role = "[G.name] Gang Boss" @@ -921,15 +921,15 @@ to_chat(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) + SSticker.mode.forge_gang_objectives(src) + SSticker.mode.greet_gang(src,0) else if (href_list["gangster"]) - var/datum/gang/G = locate(href_list["gangster"]) in ticker.mode.gangs + var/datum/gang/G = locate(href_list["gangster"]) in SSticker.mode.gangs if(!G || (src in G.gangsters)) return - ticker.mode.remove_gangster(src,0,2,1) - ticker.mode.add_gangster(src,G,0) + SSticker.mode.remove_gangster(src,0,2,1) + SSticker.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).") @@ -944,16 +944,16 @@ 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, 0) + if(!(src in SSticker.mode.cult)) + SSticker.mode.add_cultist(src, 0) message_admins("[key_name_admin(usr)] has cult'ed [current].") log_admin("[key_name(usr)] has cult'ed [current].") if("tome") - if (!ticker.mode.equip_cultist(current,1)) + if (!SSticker.mode.equip_cultist(current,1)) to_chat(usr, "Spawning tome failed!") if("amulet") - if (!ticker.mode.equip_cultist(current)) + if (!SSticker.mode.equip_cultist(current)) to_chat(usr, "Spawning amulet failed!") else if(href_list["clockcult"]) @@ -968,7 +968,7 @@ message_admins("[key_name_admin(usr)] has made [current] into a servant of Ratvar.") log_admin("[key_name(usr)] has made [current] into a servant of Ratvar.") if("slab") - if(!ticker.mode.equip_servant(current)) + if(!SSticker.mode.equip_servant(current)) to_chat(usr, "Failed to outfit [current] with a slab!") else to_chat(usr, "Successfully gave [current] a clockwork slab!") @@ -979,24 +979,24 @@ remove_wizard() to_chat(current, "You have been brainwashed! You are no longer a wizard!") log_admin("[key_name(usr)] has de-wizard'ed [current].") - ticker.mode.update_wiz_icons_removed(src) + SSticker.mode.update_wiz_icons_removed(src) if("wizard") - if(!(src in ticker.mode.wizards)) - ticker.mode.wizards += src + if(!(src in SSticker.mode.wizards)) + SSticker.mode.wizards += src special_role = "Wizard" - //ticker.mode.learn_basic_spells(current) + //SSticker.mode.learn_basic_spells(current) to_chat(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].") - ticker.mode.update_wiz_icons_added(src) + SSticker.mode.update_wiz_icons_added(src) if("lair") - current.loc = pick(wizardstart) + current.loc = pick(GLOB.wizardstart) if("dressup") - ticker.mode.equip_wizard(current) + SSticker.mode.equip_wizard(current) if("name") - ticker.mode.name_wizard(current) + SSticker.mode.name_wizard(current) if("autoobjectives") - ticker.mode.forge_wizard_objectives(src) + SSticker.mode.forge_wizard_objectives(src) to_chat(usr, "The objectives for wizard [key] have been generated. You can edit them and anounce manually.") else if (href_list["changeling"]) @@ -1007,16 +1007,16 @@ 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 + if(!(src in SSticker.mode.changelings)) + SSticker.mode.changelings += src current.make_changeling() special_role = "Changeling" to_chat(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].") - ticker.mode.update_changeling_icons_added(src) + SSticker.mode.update_changeling_icons_added(src) if("autoobjectives") - ticker.mode.forge_changeling_objectives(src) + SSticker.mode.forge_changeling_objectives(src) to_chat(usr, "The objectives for changeling [key] have been generated. You can edit them and anounce manually.") if("initialdna") @@ -1037,18 +1037,18 @@ 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) + if(!(src in SSticker.mode.syndicates)) + SSticker.mode.syndicates += src + SSticker.mode.update_synd_icons_added(src) + if (SSticker.mode.syndicates.len==1) + SSticker.mode.prepare_syndicate_leader(src) else - current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]" + current.real_name = "[syndicate_name()] Operative #[SSticker.mode.syndicates.len-1]" special_role = "Syndicate" assigned_role = "Syndicate" to_chat(current, "You are a [syndicate_name()] agent!") - ticker.mode.forge_syndicate_objectives(src) - ticker.mode.greet_syndicate(src) + SSticker.mode.forge_syndicate_objectives(src) + SSticker.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") @@ -1065,11 +1065,11 @@ qdel(H.wear_suit) qdel(H.w_uniform) - if (!ticker.mode.equip_syndicate(current)) + if (!SSticker.mode.equip_syndicate(current)) to_chat(usr, "Equipping a syndicate failed!") if("tellcode") var/code - for (var/obj/machinery/nuclearbomb/bombue in machines) + for (var/obj/machinery/nuclearbomb/bombue in GLOB.machines) if (length(bombue.r_code) <= 5 && bombue.r_code != "LOLNO" && bombue.r_code != "ADMIN") code = bombue.r_code break @@ -1086,34 +1086,34 @@ to_chat(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].") - ticker.mode.update_traitor_icons_removed(src) + SSticker.mode.update_traitor_icons_removed(src) if("traitor") - if(!(src in ticker.mode.traitors)) - ticker.mode.traitors += src + if(!(src in SSticker.mode.traitors)) + SSticker.mode.traitors += src special_role = "traitor" to_chat(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) - ticker.mode.update_traitor_icons_added(src) + SSticker.mode.add_law_zero(A) + SSticker.mode.update_traitor_icons_added(src) if("autoobjectives") - ticker.mode.forge_traitor_objectives(src) + SSticker.mode.forge_traitor_objectives(src) to_chat(usr, "The objectives for traitor [key] have been generated. You can edit them and anounce manually.") else if(href_list["devil"]) switch(href_list["devil"]) if("clear") - if(src in ticker.mode.devils) + if(src in SSticker.mode.devils) if(istype(current,/mob/living/carbon/true_devil/)) if(devilinfo) devilinfo.regress_blood_lizard() else to_chat(usr, "Something went wrong with removing the devil, we were unable to find an attached devilinfo..") - ticker.mode.devils -= src + SSticker.mode.devils -= src special_role = null to_chat(current, "Your infernal link has been severed! You are no longer a devil!") RemoveSpell(/obj/effect/proc_holder/spell/targeted/infernal_jaunt) @@ -1132,8 +1132,8 @@ var/mob/living/silicon/S = current S.clear_law_sixsixsix(current) log_admin("[key_name(usr)] has de-devil'ed [current].") - else if(src in ticker.mode.sintouched) - ticker.mode.sintouched -= src + else if(src in SSticker.mode.sintouched) + SSticker.mode.sintouched -= src message_admins("[key_name_admin(usr)] has de-sintouch'ed [current].") log_admin("[key_name(usr)] has de-sintouch'ed [current].") if("devil") @@ -1145,10 +1145,10 @@ if(!ishuman(current) && !iscyborg(current)) usr << "This only works on humans and cyborgs!" return - ticker.mode.devils += src + SSticker.mode.devils += src special_role = "devil" - ticker.mode.finalize_devil(src, FALSE) - ticker.mode.add_devil_objectives(src, 2) + SSticker.mode.finalize_devil(src, FALSE) + SSticker.mode.add_devil_objectives(src, 2) announceDevilLaws() announce_objectives() message_admins("[key_name_admin(usr)] has devil'ed [current].") @@ -1162,17 +1162,16 @@ if(!ishuman(current) && !iscyborg(current)) to_chat(usr, "This only works on humans and cyborgs!") return - ticker.mode.devils += src + SSticker.mode.devils += src special_role = "devil" - ticker.mode.finalize_devil(src, TRUE) - ticker.mode.add_devil_objectives(src, 2) + SSticker.mode.finalize_devil(src, TRUE) + SSticker.mode.add_devil_objectives(src, 2) announceDevilLaws() announce_objectives() message_admins("[key_name_admin(usr)] has devil'ed [current]. The devil has been marked as ascendable.") log_admin("[key_name(usr)] has devil'ed [current]. The devil has been marked as ascendable.") if("sintouched") if(ishuman(current)) - ticker.mode.sintouched += src var/mob/living/carbon/human/H = current H.influenceSin() message_admins("[key_name_admin(usr)] has sintouch'ed [current].") @@ -1184,14 +1183,14 @@ switch(href_list["abductor"]) if("clear") to_chat(usr, "Not implemented yet. Sorry!") - //ticker.mode.update_abductor_icons_removed(src) + //SSticker.mode.update_abductor_icons_removed(src) if("abductor") if(!ishuman(current)) to_chat(usr, "This only works on humans!") return make_Abductor() log_admin("[key_name(usr)] turned [current] into abductor.") - ticker.mode.update_abductor_icons_added(src) + SSticker.mode.update_abductor_icons_added(src) if("equip") var/gear = alert("Agent or Scientist Gear","Gear","Agent","Scientist") if(gear) @@ -1286,7 +1285,7 @@ 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))) + if(!SSticker.mode.equip_traitor(current, !(src in SSticker.mode.traitors))) to_chat(usr, "Equipping a syndicate failed!") log_admin("[key_name(usr)] attempted to give [current] an uplink.") @@ -1316,20 +1315,20 @@ qdel(H) /datum/mind/proc/make_Traitor() - if(!(src in ticker.mode.traitors)) - ticker.mode.traitors += src + if(!(src in SSticker.mode.traitors)) + SSticker.mode.traitors += src special_role = "traitor" - ticker.mode.forge_traitor_objectives(src) - ticker.mode.finalize_traitor(src) - ticker.mode.greet_traitor(src) + SSticker.mode.forge_traitor_objectives(src) + SSticker.mode.finalize_traitor(src) + SSticker.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) + if(!(src in SSticker.mode.syndicates)) + SSticker.mode.syndicates += src + SSticker.mode.update_synd_icons_added(src) special_role = "Syndicate" - ticker.mode.forge_syndicate_objectives(src) - ticker.mode.greet_syndicate(src) + SSticker.mode.forge_syndicate_objectives(src) + SSticker.mode.greet_syndicate(src) current.faction |= "syndicate" if(spawnloc) @@ -1347,13 +1346,13 @@ qdel(H.wear_suit) qdel(H.w_uniform) - ticker.mode.equip_syndicate(current, telecrystals) + SSticker.mode.equip_syndicate(current, telecrystals) if (nuke_code) store_memory("Syndicate Nuclear Bomb Code: [nuke_code]", 0, 0) to_chat(current, "The nuclear authorization code is: [nuke_code]") else - var/obj/machinery/nuclearbomb/nuke = locate("syndienuke") in nuke_list + var/obj/machinery/nuclearbomb/nuke = locate("syndienuke") in GLOB.nuke_list if(nuke) store_memory("Syndicate Nuclear Bomb Code: [nuke.r_code]", 0, 0) to_chat(current, "The nuclear authorization code is: nuke.r_code") @@ -1361,43 +1360,43 @@ to_chat(current, "You were not provided with a nuclear code. Trying asking your team leader or contacting syndicate command.") if (leader) - ticker.mode.prepare_syndicate_leader(src,nuke_code) + SSticker.mode.prepare_syndicate_leader(src,nuke_code) else - current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]" + current.real_name = "[syndicate_name()] Operative #[SSticker.mode.syndicates.len-1]" /datum/mind/proc/make_Changling() - if(!(src in ticker.mode.changelings)) - ticker.mode.changelings += src + if(!(src in SSticker.mode.changelings)) + SSticker.mode.changelings += src current.make_changeling() special_role = "Changeling" - ticker.mode.forge_changeling_objectives(src) - ticker.mode.greet_changeling(src) - ticker.mode.update_changeling_icons_added(src) + SSticker.mode.forge_changeling_objectives(src) + SSticker.mode.greet_changeling(src) + SSticker.mode.update_changeling_icons_added(src) /datum/mind/proc/make_Wizard() - if(!(src in ticker.mode.wizards)) - ticker.mode.wizards += src + if(!(src in SSticker.mode.wizards)) + SSticker.mode.wizards += src special_role = "Wizard" assigned_role = "Wizard" - if(!wizardstart.len) - current.loc = pick(latejoin) + if(!GLOB.wizardstart.len) + current.loc = pick(GLOB.latejoin) to_chat(current, "HOT INSERTION, GO GO GO") else - current.loc = pick(wizardstart) + current.loc = pick(GLOB.wizardstart) - ticker.mode.equip_wizard(current) - ticker.mode.name_wizard(current) - ticker.mode.forge_wizard_objectives(src) - ticker.mode.greet_wizard(src) + SSticker.mode.equip_wizard(current) + SSticker.mode.name_wizard(current) + SSticker.mode.forge_wizard_objectives(src) + SSticker.mode.greet_wizard(src) /datum/mind/proc/make_Cultist() - if(!(src in ticker.mode.cult)) - ticker.mode.add_cultist(src,FALSE) + if(!(src in SSticker.mode.cult)) + SSticker.mode.add_cultist(src,FALSE) special_role = "Cultist" to_chat(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.") to_chat(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.") - var/datum/game_mode/cult/cult = ticker.mode + var/datum/game_mode/cult/cult = SSticker.mode if (istype(cult)) cult.memorize_cult_objectives(src) @@ -1407,13 +1406,13 @@ memory += "Objective #1: [explanation]
" var/mob/living/carbon/human/H = current - if (!ticker.mode.equip_cultist(current)) + if (!SSticker.mode.equip_cultist(current)) to_chat(H, "Spawning an amulet from your Master failed.") /datum/mind/proc/make_Rev() - if (ticker.mode.head_revolutionaries.len>0) + if (SSticker.mode.head_revolutionaries.len>0) // copy targets - var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries + var/datum/mind/valid_head = locate() in SSticker.mode.head_revolutionaries if (valid_head) for (var/datum/objective/mutiny/O in valid_head.objectives) var/datum/objective/mutiny/rev_obj = new @@ -1421,21 +1420,21 @@ 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) + SSticker.mode.greet_revolutionary(src,0) + SSticker.mode.head_revolutionaries += src + SSticker.mode.update_rev_icons_added(src) special_role = "Head Revolutionary" - ticker.mode.forge_revolutionary_objectives(src) - ticker.mode.greet_revolutionary(src,0) + SSticker.mode.forge_revolutionary_objectives(src) + SSticker.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) +// fail |= !SSticker.mode.equip_traitor(current, 1) + fail |= !SSticker.mode.equip_revolutionary(current) /datum/mind/proc/make_Gang(datum/gang/G) @@ -1443,9 +1442,9 @@ 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) + SSticker.mode.forge_gang_objectives(src) + SSticker.mode.greet_gang(src) + SSticker.mode.equip_gang(current,G) /datum/mind/proc/make_Abductor() var/role = alert("Abductor Role ?","Role","Agent","Scientist") @@ -1458,7 +1457,7 @@ if(!ishuman(current)) return - ticker.mode.abductors |= src + SSticker.mode.abductors |= src var/datum/objective/experiment/O = new O.owner = src @@ -1480,7 +1479,7 @@ 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) + for(var/obj/effect/landmark/abductor/A in GLOB.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)) @@ -1533,7 +1532,7 @@ INVOKE_ASYNC(S, /obj/effect/proc_holder/spell.proc/start_recharge) /datum/mind/proc/get_ghost(even_if_they_cant_reenter) - for(var/mob/dead/observer/G in dead_mob_list) + for(var/mob/dead/observer/G in GLOB.dead_mob_list) if(G.mind == src) if(G.can_reenter_corpse || even_if_they_cant_reenter) return G @@ -1562,10 +1561,10 @@ else mind = new /datum/mind(key) - if(ticker) - ticker.minds += mind + if(SSticker) + SSticker.minds += mind else - stack_trace("mind_initialize(): No ticker ready") + stack_trace("mind_initialize(): No SSticker ready") if(!mind.name) mind.name = real_name mind.current = src diff --git a/code/datums/mutations.dm b/code/datums/mutations.dm index 9477e328cc..55f2b03161 100644 --- a/code/datums/mutations.dm +++ b/code/datums/mutations.dm @@ -1,11 +1,11 @@ -/var/global/list/mutations_list = list() +GLOBAL_LIST_EMPTY(mutations_list) /datum/mutation var/name /datum/mutation/New() - mutations_list[name] = src + GLOB.mutations_list[name] = src /datum/mutation/human @@ -536,9 +536,9 @@ if(message) message = replacetext(message,"w","v") message = replacetext(message,"j","y") - message = replacetext(message,"a",pick("","","","a")) + message = replacetext(message,"a",pick("�","�","�","a")) message = replacetext(message,"bo","bjo") - message = replacetext(message,"o",pick("","","o")) + message = replacetext(message,"o",pick("�","�","o")) if(prob(30)) message += " Bork[pick("",", bork",", bork, bork")]!" return message diff --git a/code/datums/riding.dm b/code/datums/riding.dm index e5b57027f7..aa16730703 100644 --- a/code/datums/riding.dm +++ b/code/datums/riding.dm @@ -38,8 +38,6 @@ //if they differ between directions, otherwise use the //generic variables /datum/riding/proc/handle_vehicle_offsets() - if(!ridden || QDELETED(ridden)) - return if(ridden.has_buckled_mobs()) for(var/m in ridden.buckled_mobs) var/mob/living/buckled_mob = m diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm index f6f5b55309..12df20891f 100644 --- a/code/datums/ruins/lavaland.dm +++ b/code/datums/ruins/lavaland.dm @@ -35,15 +35,6 @@ cost = 10 allow_duplicates = FALSE -/datum/map_template/ruin/lavaland/prisoners - name = "Prisoner Crash" - id = "prisoner-crash" - description = "This incredibly high security shuttle clearly didn't have 'avoiding lavafilled hellscapes' as a design priority. \ - As such, it has crashed, waking the prisoners from their cryostasis, and setting them loose on the wastes. If they live long enough, that is." - suffix = "lavaland_surface_prisoner_crash.dmm" - cost = 15 - allow_duplicates = FALSE - /datum/map_template/ruin/lavaland/seed_vault name = "Seed Vault" id = "seed-vault" diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm index 72b22e01c3..774e0794ff 100644 --- a/code/datums/shuttles.dm +++ b/code/datums/shuttles.dm @@ -47,7 +47,7 @@ /datum/map_template/shuttle/emergency/airless/prerequisites_met() // first 10 minutes only - return world.time - round_start_time < 6000 + return world.time - SSticker.round_start_time < 6000 /datum/map_template/shuttle/emergency/asteroid suffix = "asteroid" diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index 1078dbfaeb..d07f66609b 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -44,6 +44,7 @@ id = "vanguard" duration = 200 tick_interval = 0 //tick as fast as possible + status_type = STATUS_EFFECT_REPLACE alert_type = /obj/screen/alert/status_effect/vanguard var/datum/progressbar/progbar @@ -58,7 +59,8 @@ if(istype(L)) //this is probably more safety than actually needed var/vanguard = L.stun_absorption["vanguard"] desc = initial(desc) - desc += "
[vanguard["stuns_absorbed"] * 2] seconds of stuns held back.
[round(min(vanguard["stuns_absorbed"] * 0.25, 20)) * 2] seconds of stun will affect you." + desc += "
[vanguard["stuns_absorbed"] * 2] seconds of stuns held back.\ + [GLOB.ratvar_awakens ? "":"
[round(min(vanguard["stuns_absorbed"] * 0.25, 20)) * 2] seconds of stun will affect you."]" ..() /datum/status_effect/vanguard_shield/Destroy() @@ -88,7 +90,7 @@ for(var/i in owner.stun_absorption) if(owner.stun_absorption[i]["end_time"] > world.time && owner.stun_absorption[i]["priority"] > vanguard["priority"]) otheractiveabsorptions = TRUE - if(!ratvar_awakens && stuns_blocked && !otheractiveabsorptions) + if(!GLOB.ratvar_awakens && stuns_blocked && !otheractiveabsorptions) vanguard["end_time"] = 0 //so it doesn't absorb the stuns we're about to apply owner.Stun(stuns_blocked) owner.Weaken(stuns_blocked) diff --git a/code/datums/status_effects/gas.dm b/code/datums/status_effects/gas.dm index 7ab9022848..c2c070dbec 100644 --- a/code/datums/status_effects/gas.dm +++ b/code/datums/status_effects/gas.dm @@ -1,7 +1,7 @@ /datum/status_effect/freon id = "frozen" duration = 100 - unique = TRUE + status_type = STATUS_EFFECT_UNIQUE alert_type = /obj/screen/alert/status_effect/freon var/icon/cube diff --git a/code/datums/status_effects/status_effect.dm b/code/datums/status_effects/status_effect.dm index 38f3de0b24..8b6d255f1a 100644 --- a/code/datums/status_effects/status_effect.dm +++ b/code/datums/status_effects/status_effect.dm @@ -2,14 +2,12 @@ //This file contains their code, plus code for applying and removing them. //When making a new status effect, add a define to status_effects.dm in __DEFINES for ease of use! -var/global/list/all_status_effects = list() //a list of all status effects, if for some reason you need to remove all of them - /datum/status_effect var/id = "effect" //Used for screen alerts. var/duration = -1 //How long the status effect lasts in DECISECONDS. Enter -1 for an effect that never ends unless removed through some means. var/tick_interval = 10 //How many deciseconds between ticks, approximately. Leave at 10 for every second. var/mob/living/owner //The mob affected by the status effect. - var/unique = TRUE //If there can be multiple status effects of this type on one mob. + var/status_type = STATUS_EFFECT_UNIQUE //How many of the effect can be on one mob, and what happens when you try to add another var/alert_type = /obj/screen/alert/status_effect //the alert thrown by the status effect, contains name and description /datum/status_effect/New(mob/living/new_owner) @@ -17,7 +15,6 @@ var/global/list/all_status_effects = list() //a list of all status effects, if f owner = new_owner if(owner) LAZYADD(owner.status_effects, src) - all_status_effects += src addtimer(CALLBACK(src, .proc/start_ticking), 1) //Give us time to set any variables /datum/status_effect/Destroy() @@ -26,7 +23,6 @@ var/global/list/all_status_effects = list() //a list of all status effects, if f owner.clear_alert(id) on_remove() LAZYREMOVE(owner.status_effects, src) - all_status_effects -= src return ..() /datum/status_effect/proc/start_ticking() @@ -57,6 +53,11 @@ var/global/list/all_status_effects = list() //a list of all status effects, if f /datum/status_effect/proc/on_apply() //Called whenever the buff is applied. /datum/status_effect/proc/tick() //Called every tick. /datum/status_effect/proc/on_remove() //Called whenever the buff expires or is removed. +/datum/status_effect/proc/be_replaced() //Called instead of on_remove when a status effect is replaced by itself + owner.clear_alert(id) + LAZYREMOVE(owner.status_effects, src) + owner = null + qdel(src) //////////////// // ALERT HOOK // @@ -76,8 +77,11 @@ var/global/list/all_status_effects = list() //a list of all status effects, if f var/datum/status_effect/S1 = effect LAZYINITLIST(status_effects) for(var/datum/status_effect/S in status_effects) - if(S.id == initial(S1.id) && initial(S1.unique)) - return + if(S.id == initial(S1.id) && S.status_type) + if(S.status_type == STATUS_EFFECT_REPLACE) + S.be_replaced() + else + return S1 = new effect(src) . = S1 diff --git a/code/datums/weather/weather.dm b/code/datums/weather/weather.dm index f7852d4856..7b43bf6396 100644 --- a/code/datums/weather/weather.dm +++ b/code/datums/weather/weather.dm @@ -63,7 +63,7 @@ impacted_areas |= A weather_duration = rand(weather_duration_lower, weather_duration_upper) update_areas() - for(var/V in player_list) + for(var/V in GLOB.player_list) var/mob/M = V if(M.z == target_z) if(telegraph_message) @@ -77,7 +77,7 @@ return stage = MAIN_STAGE update_areas() - for(var/V in player_list) + for(var/V in GLOB.player_list) var/mob/M = V if(M.z == target_z) if(weather_message) @@ -92,7 +92,7 @@ return stage = WIND_DOWN_STAGE update_areas() - for(var/V in player_list) + for(var/V in GLOB.player_list) var/mob/M = V if(M.z == target_z) if(end_message) @@ -126,7 +126,6 @@ var/area/N = V N.layer = overlay_layer N.icon = 'icons/effects/weather_effects.dmi' - N.invisibility = 0 N.color = weather_color switch(stage) if(STARTUP_STAGE) @@ -137,8 +136,7 @@ N.icon_state = end_overlay if(END_STAGE) N.color = null - N.icon_state = initial(N.icon_state) + N.icon_state = "" N.icon = 'icons/turf/areas.dmi' N.layer = AREA_LAYER //Just default back to normal area stuff since I assume setting a var is faster than initial - N.invisibility = INVISIBILITY_MAXIMUM N.set_opacity(FALSE) diff --git a/code/datums/weather/weather_types.dm b/code/datums/weather/weather_types.dm index 005702f357..593a055d71 100644 --- a/code/datums/weather/weather_types.dm +++ b/code/datums/weather/weather_types.dm @@ -168,6 +168,7 @@ sleep(300) revoke_maint_all_access() // Need to make this a timer at some point. + /datum/weather/rad_storm/proc/status_alarm(command) //Makes the status displays show the radiation warning for those who missed the announcement. var/datum/radio_frequency/frequency = SSradio.return_frequency(1435) @@ -185,3 +186,33 @@ status_signal.data["picture_state"] = "radiation" frequency.post_signal(src, status_signal) + + +/datum/weather/acid_rain + name = "acid rain" + desc = "Some stay dry and others feel the pain" + + telegraph_duration = 400 + telegraph_message = "Stinging droplets start to fall upon you.." + telegraph_sound = 'sound/ambience/acidrain_start.ogg' + + weather_message = "Your skin melts underneath the rain!" + weather_overlay = "acid_rain" + weather_duration_lower = 600 + weather_duration_upper = 1500 + weather_sound = 'sound/ambience/acidrain_mid.ogg' + + end_duration = 100 + end_message = "The rain starts to dissipate." + end_sound = 'sound/ambience/acidrain_end.ogg' + + area_type = /area/lavaland/surface/outdoors + target_z = ZLEVEL_LAVALAND + + immunity_type = "acid" // temp + + +/datum/weather/acid_rain/impact(mob/living/L) + var/resist = L.getarmor(null, "acid") + if(prob(max(0,100-resist))) + L.acid_act(20,20) \ No newline at end of file diff --git a/code/datums/wires/robot.dm b/code/datums/wires/robot.dm index 9f019c23d1..f57933de31 100644 --- a/code/datums/wires/robot.dm +++ b/code/datums/wires/robot.dm @@ -34,7 +34,11 @@ var/new_ai = select_active_ai(R) if(new_ai && (new_ai != R.connected_ai)) R.connected_ai = new_ai - R.notify_ai(TRUE) + if(R.shell) + R.undeploy() //If this borg is an AI shell, disconnect the controlling AI and assign ti to a new AI + R.notify_ai(AI_SHELL) + else + R.notify_ai(TRUE) if(WIRE_CAMERA) // Pulse to disable the camera. if(!isnull(R.camera) && !R.scrambledcodes) R.camera.toggle_cam(usr, 0) @@ -56,11 +60,12 @@ if(WIRE_AI) // Cut the AI wire to reset AI control. if(!mend) R.connected_ai = null + R.undeploy() //Forced disconnect of an AI should this body be a shell. if(WIRE_LAWSYNC) // Cut the law wire, and the borg will no longer receive law updates from its AI. Repair and it will re-sync. if(mend) if(!R.emagged) R.lawupdate = TRUE - else + else if(!R.deployed) //AI shells must always have the same laws as the AI R.lawupdate = FALSE if (WIRE_CAMERA) // Disable the camera. if(!isnull(R.camera) && !R.scrambledcodes) diff --git a/code/datums/wires/wires.dm b/code/datums/wires/wires.dm index c6985af3e1..bd4094cfaa 100644 --- a/code/datums/wires/wires.dm +++ b/code/datums/wires/wires.dm @@ -1,26 +1,5 @@ #define MAXIMUM_EMP_WIRES 3 -var/list/wire_colors = list( - "blue", - "brown", - "crimson", - "cyan", - "gold", - "grey", - "green", - "magenta", - "orange", - "pink", - "purple", - "red", - "silver", - "violet", - "white", - "yellow", -) -var/list/wire_color_directory = list() -var/list/wire_name_directory = list() - /proc/is_wire_tool(obj/item/I) if(istype(I, /obj/item/device/multitool)) return TRUE @@ -57,12 +36,12 @@ var/list/wire_name_directory = list() if(randomize) randomize() else - if(!wire_color_directory[holder_type]) + if(!GLOB.wire_color_directory[holder_type]) randomize() - wire_color_directory[holder_type] = colors - wire_name_directory[holder_type] = proper_name + GLOB.wire_color_directory[holder_type] = colors + GLOB.wire_name_directory[holder_type] = proper_name else - colors = wire_color_directory[holder_type] + colors = GLOB.wire_color_directory[holder_type] /datum/wires/Destroy() holder = null @@ -77,10 +56,29 @@ var/list/wire_name_directory = list() wires += dud /datum/wires/proc/randomize() - var/list/possible_colors = wire_colors.Copy() + var/static/list/possible_colors = list( + "blue", + "brown", + "crimson", + "cyan", + "gold", + "grey", + "green", + "magenta", + "orange", + "pink", + "purple", + "red", + "silver", + "violet", + "white", + "yellow" + ) + + var/list/my_possible_colors = possible_colors.Copy() for(var/wire in shuffle(wires)) - colors[pick_n_take(possible_colors)] = wire + colors[pick_n_take(my_possible_colors)] = wire /datum/wires/proc/shuffle_wires() colors.Cut() @@ -201,7 +199,7 @@ var/list/wire_name_directory = list() return UI_CLOSE /datum/wires/ui_interact(mob/user, ui_key = "wires", datum/tgui/ui = null, force_open = 0, \ - datum/tgui/master_ui = null, datum/ui_state/state = physical_state) + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) ui = new(user, src, ui_key, "wires", "[holder.name] wires", 350, 150 + wires.len * 30, master_ui, state) diff --git a/code/game/area/Space_Station_13_areas.dm b/code/game/area/Space_Station_13_areas.dm index 056b1b2cfd..ee369d73f7 100644 --- a/code/game/area/Space_Station_13_areas.dm +++ b/code/game/area/Space_Station_13_areas.dm @@ -1002,7 +1002,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station */ //SPACE STATION 13 -var/list/the_station_areas = list ( +GLOBAL_LIST_INIT(the_station_areas, list ( /area/atmos, /area/maintenance, /area/hallway, @@ -1031,4 +1031,4 @@ var/list/the_station_areas = list ( /area/ai_monitored/turret_protected/ai_upload, //do not try to simplify to "/area/ai_monitored/turret_protected" --rastaf0 /area/ai_monitored/turret_protected/ai_upload_foyer, /area/ai_monitored/turret_protected/ai, -) +)) \ No newline at end of file diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index c2652709a1..4395e5155a 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -64,20 +64,20 @@ /*Adding a wizard area teleport list because motherfucking lag -- Urist*/ /*I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game*/ -var/list/teleportlocs = list() +GLOBAL_LIST_EMPTY(teleportlocs) /proc/process_teleport_locs() - for(var/V in sortedAreas) + for(var/V in GLOB.sortedAreas) var/area/AR = V if(istype(AR, /area/shuttle) || AR.noteleport) continue - if(teleportlocs[AR.name]) + if(GLOB.teleportlocs[AR.name]) continue var/turf/picked = safepick(get_area_turfs(AR.type)) if (picked && (picked.z == ZLEVEL_STATION)) - teleportlocs[AR.name] = AR + GLOB.teleportlocs[AR.name] = AR - sortTim(teleportlocs, /proc/cmp_text_dsc) + sortTim(GLOB.teleportlocs, /proc/cmp_text_dsc) // === @@ -137,24 +137,24 @@ var/list/teleportlocs = list() var/list/cameras = list() for (var/obj/machinery/camera/C in src) cameras += C - for (var/mob/living/silicon/aiPlayer in player_list) + for (var/mob/living/silicon/aiPlayer in GLOB.player_list) if (state == 1) aiPlayer.cancelAlarm("Power", src, source) else aiPlayer.triggerAlarm("Power", src, cameras, source) - for(var/obj/machinery/computer/station_alert/a in machines) + for(var/obj/machinery/computer/station_alert/a in GLOB.machines) if(state == 1) a.cancelAlarm("Power", src, source) else a.triggerAlarm("Power", src, cameras, source) - for(var/mob/living/simple_animal/drone/D in mob_list) + for(var/mob/living/simple_animal/drone/D in GLOB.mob_list) if(state == 1) D.cancelAlarm("Power", src, source) else D.triggerAlarm("Power", src, cameras, source) - for(var/datum/computer_file/program/alarm_monitor/p in alarmdisplay) + for(var/datum/computer_file/program/alarm_monitor/p in GLOB.alarmdisplay) if(state == 1) p.cancelAlarm("Power", src, source) else @@ -168,23 +168,23 @@ var/list/teleportlocs = list() for(var/obj/machinery/camera/C in RA) cameras += C - for(var/mob/living/silicon/aiPlayer in player_list) + for(var/mob/living/silicon/aiPlayer in GLOB.player_list) aiPlayer.triggerAlarm("Atmosphere", src, cameras, source) - for(var/obj/machinery/computer/station_alert/a in machines) + for(var/obj/machinery/computer/station_alert/a in GLOB.machines) a.triggerAlarm("Atmosphere", src, cameras, source) - for(var/mob/living/simple_animal/drone/D in mob_list) + for(var/mob/living/simple_animal/drone/D in GLOB.mob_list) D.triggerAlarm("Atmosphere", src, cameras, source) - for(var/datum/computer_file/program/alarm_monitor/p in alarmdisplay) + for(var/datum/computer_file/program/alarm_monitor/p in GLOB.alarmdisplay) p.triggerAlarm("Atmosphere", src, cameras, source) else if (src.atmosalm == 2) - for(var/mob/living/silicon/aiPlayer in player_list) + for(var/mob/living/silicon/aiPlayer in GLOB.player_list) aiPlayer.cancelAlarm("Atmosphere", src, source) - for(var/obj/machinery/computer/station_alert/a in machines) + for(var/obj/machinery/computer/station_alert/a in GLOB.machines) a.cancelAlarm("Atmosphere", src, source) - for(var/mob/living/simple_animal/drone/D in mob_list) + for(var/mob/living/simple_animal/drone/D in GLOB.mob_list) D.cancelAlarm("Atmosphere", src, source) - for(var/datum/computer_file/program/alarm_monitor/p in alarmdisplay) + for(var/datum/computer_file/program/alarm_monitor/p in GLOB.alarmdisplay) p.cancelAlarm("Atmosphere", src, source) src.atmosalm = danger_level @@ -203,9 +203,9 @@ var/list/teleportlocs = list() if(A.fire) cont = FALSE break - if(cont) + if(cont && D.is_operational()) if(D.operating) - D.nextstate = opening ? OPEN : CLOSED + D.nextstate = opening ? FIREDOOR_OPEN : FIREDOOR_CLOSED else if(!(D.density ^ opening)) INVOKE_ASYNC(D, (opening ? /obj/machinery/door/firedoor.proc/open : /obj/machinery/door/firedoor.proc/close)) @@ -224,13 +224,13 @@ var/list/teleportlocs = list() for (var/obj/machinery/camera/C in RA) cameras += C - for (var/obj/machinery/computer/station_alert/a in machines) + for (var/obj/machinery/computer/station_alert/a in GLOB.machines) a.triggerAlarm("Fire", src, cameras, source) - for (var/mob/living/silicon/aiPlayer in player_list) + for (var/mob/living/silicon/aiPlayer in GLOB.player_list) aiPlayer.triggerAlarm("Fire", src, cameras, source) - for (var/mob/living/simple_animal/drone/D in mob_list) + for (var/mob/living/simple_animal/drone/D in GLOB.mob_list) D.triggerAlarm("Fire", src, cameras, source) - for(var/datum/computer_file/program/alarm_monitor/p in alarmdisplay) + for(var/datum/computer_file/program/alarm_monitor/p in GLOB.alarmdisplay) p.triggerAlarm("Fire", src, cameras, source) START_PROCESSING(SSobj, src) @@ -245,13 +245,13 @@ var/list/teleportlocs = list() for(var/obj/machinery/firealarm/F in RA) F.update_icon() - for (var/mob/living/silicon/aiPlayer in player_list) + for (var/mob/living/silicon/aiPlayer in GLOB.player_list) aiPlayer.cancelAlarm("Fire", src, source) - for (var/obj/machinery/computer/station_alert/a in machines) + for (var/obj/machinery/computer/station_alert/a in GLOB.machines) a.cancelAlarm("Fire", src, source) - for (var/mob/living/simple_animal/drone/D in mob_list) + for (var/mob/living/simple_animal/drone/D in GLOB.mob_list) D.cancelAlarm("Fire", src, source) - for(var/datum/computer_file/program/alarm_monitor/p in alarmdisplay) + for(var/datum/computer_file/program/alarm_monitor/p in GLOB.alarmdisplay) p.cancelAlarm("Fire", src, source) STOP_PROCESSING(SSobj, src) @@ -282,7 +282,7 @@ var/list/teleportlocs = list() for (var/obj/machinery/camera/C in RA) cameras += C - for (var/mob/living/silicon/SILICON in player_list) + for (var/mob/living/silicon/SILICON in GLOB.player_list) if(SILICON.triggerAlarm("Burglar", src, cameras, trigger)) //Cancel silicon alert after 1 minute addtimer(CALLBACK(SILICON, /mob/living/silicon.proc/cancelAlarm,"Burglar",src,trigger), 600) @@ -454,7 +454,7 @@ var/list/teleportlocs = list() return 1 else // There's a gravity generator on our z level - if(T && gravity_generators["[T.z]"] && length(gravity_generators["[T.z]"])) + if(T && GLOB.gravity_generators["[T.z]"] && length(GLOB.gravity_generators["[T.z]"])) return 1 return 0 diff --git a/code/game/atoms.dm b/code/game/atoms.dm index be7e48071a..c7ee05888c 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -30,8 +30,8 @@ /atom/New(loc, ...) //atom creation method that preloads variables at creation - if(use_preloader && (src.type == _preloader.target_path))//in case the instanciated atom is creating other atoms in New() - _preloader.load(src) + if(GLOB.use_preloader && (src.type == GLOB._preloader.target_path))//in case the instanciated atom is creating other atoms in New() + GLOB._preloader.load(src) //. = ..() //uncomment if you are dumb enough to add a /datum/New() proc @@ -39,8 +39,10 @@ if(do_initialize > INITIALIZATION_INSSATOMS) if(QDELETED(src)) CRASH("Found new qdeletion in type [type]!") - args[1] = do_initialize == INITIALIZATION_INNEW_MAPLOAD - Initialize(arglist(args)) + var/mapload = do_initialize == INITIALIZATION_INNEW_MAPLOAD + args[1] = mapload + if(Initialize(arglist(args)) && mapload) + LAZYADD(SSatoms.late_loaders, src) //Called after New if the map is being loaded. mapload = TRUE //Called from base of New if the map is being loaded. mapload = FALSE @@ -279,7 +281,7 @@ if(AM && isturf(AM.loc)) step(AM, turn(AM.dir, 180)) -var/list/blood_splatter_icons = list() +GLOBAL_LIST_EMPTY(blood_splatter_icons) /atom/proc/blood_splatter_index() return "\ref[initial(icon)]-[initial(icon_state)]" @@ -353,13 +355,13 @@ var/list/blood_splatter_icons = list() if(initial(icon) && initial(icon_state)) //try to find a pre-processed blood-splatter. otherwise, make a new one var/index = blood_splatter_index() - var/icon/blood_splatter_icon = blood_splatter_icons[index] + var/icon/blood_splatter_icon = GLOB.blood_splatter_icons[index] if(!blood_splatter_icon) blood_splatter_icon = icon(initial(icon), initial(icon_state), , 1) //we only want to apply blood-splatters to the initial icon_state for each object blood_splatter_icon.Blend("#fff", ICON_ADD) //fills the icon_state with white (except where it's transparent) blood_splatter_icon.Blend(icon('icons/effects/blood.dmi', "itemblood"), ICON_MULTIPLY) //adds blood and the remaining white areas become transparant blood_splatter_icon = fcopy_rsc(blood_splatter_icon) - blood_splatter_icons[index] = blood_splatter_icon + GLOB.blood_splatter_icons[index] = blood_splatter_icon add_overlay(blood_splatter_icon) /obj/item/clothing/gloves/add_blood(list/blood_dna) @@ -398,12 +400,12 @@ var/list/blood_splatter_icons = list() return 1 /atom/proc/get_global_map_pos() - if(!islist(global_map) || isemptylist(global_map)) return + if(!islist(GLOB.global_map) || isemptylist(GLOB.global_map)) return var/cur_x = null var/cur_y = null var/list/y_arr = null - for(cur_x=1,cur_x<=global_map.len,cur_x++) - y_arr = global_map[cur_x] + for(cur_x=1,cur_x<=GLOB.global_map.len,cur_x++) + y_arr = GLOB.global_map[cur_x] cur_y = y_arr.Find(src.z) if(cur_y) break @@ -455,6 +457,12 @@ var/list/blood_splatter_icons = list() //This proc is called on the location of an atom when the atom is Destroy()'d /atom/proc/handle_atom_del(atom/A) +//called when the turf the atom resides on is ChangeTurfed +/atom/proc/HandleTurfChange(turf/T) + for(var/a in src) + var/atom/A = a + A.HandleTurfChange(T) + // Byond seemingly calls stat, each tick. // Calling things each tick can get expensive real quick. // So we slow this down a little. @@ -557,7 +565,7 @@ var/list/blood_splatter_icons = list() return /atom/vv_edit_var(var_name, var_value) - if(!Debug2) + if(!GLOB.Debug2) admin_spawned = TRUE . = ..() switch(var_name) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index feb726c27b..599c86498e 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -6,11 +6,13 @@ var/throw_speed = 2 //How many tiles to move per ds when being thrown. Float values are fully supported var/throw_range = 7 var/mob/pulledby = null - var/languages_spoken = 0 //For say() and Hear() - var/languages_understood = 0 + var/list/languages + var/list/initial_languages = list(/datum/language/common) + var/only_speaks_language = null var/verb_say = "says" var/verb_ask = "asks" var/verb_exclaim = "exclaims" + var/verb_whisper = "whispers" var/verb_yell = "yells" var/inertia_dir = 0 var/atom/inertia_last_loc @@ -35,6 +37,11 @@ return FALSE return ..() +/atom/movable/Initialize(mapload) + ..() + for(var/L in initial_languages) + grant_language(L) + /atom/movable/Move(atom/newloc, direct = 0) if(!loc || !newloc) return 0 var/atom/oldloc = loc @@ -103,8 +110,40 @@ O.Check() if (orbiting) orbiting.Check() + + if(flags & CLEAN_ON_MOVE) + clean_on_move() return 1 +/atom/movable/proc/clean_on_move() + var/turf/tile = loc + if(isturf(tile)) + tile.clean_blood() + for(var/A in tile) + if(is_cleanable(A)) + qdel(A) + else if(istype(A, /obj/item)) + var/obj/item/cleaned_item = A + cleaned_item.clean_blood() + else if(ishuman(A)) + var/mob/living/carbon/human/cleaned_human = A + if(cleaned_human.lying) + if(cleaned_human.head) + cleaned_human.head.clean_blood() + cleaned_human.update_inv_head() + if(cleaned_human.wear_suit) + cleaned_human.wear_suit.clean_blood() + cleaned_human.update_inv_wear_suit() + else if(cleaned_human.w_uniform) + cleaned_human.w_uniform.clean_blood() + cleaned_human.update_inv_w_uniform() + if(cleaned_human.shoes) + cleaned_human.shoes.clean_blood() + cleaned_human.update_inv_shoes() + cleaned_human.clean_blood() + cleaned_human.wash_cream() + to_chat(cleaned_human, "[src] cleans your face!") + /atom/movable/Destroy(force) var/inform_admins = HAS_SECONDARY_FLAG(src, INFORM_ADMINS_ON_RELOCATE) var/stationloving = HAS_SECONDARY_FLAG(src, STATIONLOVING) @@ -234,6 +273,7 @@ return pass_flags&passflag /atom/movable/proc/throw_impact(atom/hit_atom, throwingdatum) + set waitfor = 0 return hit_atom.hitby(src) /atom/movable/hitby(atom/movable/AM, skipcatch, hitpush = 1, blocked) @@ -413,7 +453,7 @@ if(!I) return - flick_overlay(I, clients, 5) // 5 ticks/half a second + flick_overlay(I, GLOB.clients, 5) // 5 ticks/half a second // And animate the attack! animate(I, alpha = 175, pixel_x = 0, pixel_y = 0, pixel_z = 0, time = 3) @@ -486,8 +526,8 @@ /atom/movable/proc/relocate() var/targetturf = find_safe_turf(ZLEVEL_STATION) if(!targetturf) - if(blobstart.len > 0) - targetturf = get_turf(pick(blobstart)) + if(GLOB.blobstart.len > 0) + targetturf = get_turf(pick(GLOB.blobstart)) else throw EXCEPTION("Unable to find a blobstart landmark") @@ -518,3 +558,54 @@ var/turf/currentturf = get_turf(src) if(currentturf && (currentturf.z == ZLEVEL_CENTCOM || currentturf.z == ZLEVEL_STATION)) . = TRUE + + +/* Language procs */ +/atom/movable/proc/grant_language(datum/language/dt) + LAZYINITLIST(languages) + languages[dt] = TRUE + +/atom/movable/proc/grant_all_languages(omnitongue=FALSE) + for(var/la in subtypesof(/datum/language)) + grant_language(la) + + if(omnitongue) + SET_SECONDARY_FLAG(src, OMNITONGUE) + +/atom/movable/proc/get_random_understood_language() + var/list/possible = list() + for(var/dt in languages) + possible += dt + . = safepick(possible) + +/atom/movable/proc/remove_language(datum/language/dt) + LAZYREMOVE(languages, dt) + +/atom/movable/proc/remove_all_languages() + LAZYCLEARLIST(languages) + +/atom/movable/proc/has_language(datum/language/dt) + . = is_type_in_typecache(dt, languages) + +/atom/movable/proc/can_speak_in_language(datum/language/dt) + . = has_language(dt) + if(only_speaks_language && !HAS_SECONDARY_FLAG(src, OMNITONGUE)) + . = . && ispath(only_speaks_language, dt) + +/atom/movable/proc/get_default_language() + // if no language is specified, and we want to say() something, which + // language do we use? + var/datum/language/chosen_langtype + var/highest_priority + + for(var/lt in languages) + var/datum/language/langtype = lt + if(!can_speak_in_language(langtype)) + continue + + var/pri = initial(langtype.default_priority) + if(!highest_priority || (pri > highest_priority)) + chosen_langtype = langtype + highest_priority = pri + + . = chosen_langtype diff --git a/code/game/communications.dm b/code/game/communications.dm index 387ae605b6..5b4f1c39fc 100644 --- a/code/game/communications.dm +++ b/code/game/communications.dm @@ -63,28 +63,28 @@ /* the radio controller is a confusing piece of shit and didnt work so i made radios not use the radio controller. */ -var/list/all_radios = list() +GLOBAL_LIST_EMPTY(all_radios) /proc/add_radio(obj/item/radio, freq) if(!freq || !radio) return - if(!all_radios["[freq]"]) - all_radios["[freq]"] = list(radio) + if(!GLOB.all_radios["[freq]"]) + GLOB.all_radios["[freq]"] = list(radio) return freq - all_radios["[freq]"] |= radio + GLOB.all_radios["[freq]"] |= radio return freq /proc/remove_radio(obj/item/radio, freq) if(!freq || !radio) return - if(!all_radios["[freq]"]) + if(!GLOB.all_radios["[freq]"]) return - all_radios["[freq]"] -= radio + GLOB.all_radios["[freq]"] -= radio /proc/remove_radio_all(obj/item/radio) - for(var/freq in all_radios) - all_radios["[freq]"] -= radio + for(var/freq in GLOB.all_radios) + GLOB.all_radios["[freq]"] -= radio /* Frequency range: 1200 to 1600 @@ -123,7 +123,7 @@ On the map: 1455 for AI access */ -var/list/radiochannels = list( +GLOBAL_LIST_INIT(radiochannels, list( "Common" = 1459, "Science" = 1351, "Command" = 1353, @@ -134,10 +134,12 @@ var/list/radiochannels = list( "Syndicate" = 1213, "Supply" = 1347, "Service" = 1349, - "AI Private" = 1447 -) + "AI Private" = 1447, + "Red Team" = 1215, + "Blue Team" = 1217 +)) -var/list/radiochannelsreverse = list( +GLOBAL_LIST_INIT(reverseradiochannels, list( "1459" = "Common", "1351" = "Science", "1353" = "Command", @@ -148,32 +150,36 @@ var/list/radiochannelsreverse = list( "1213" = "Syndicate", "1347" = "Supply", "1349" = "Service", - "1447" = "AI Private" -) + "1447" = "AI Private", + "1215" = "Red Team", + "1217" = "Blue Team" +)) //depenging helpers -var/const/SYND_FREQ = 1213 //nuke op frequency, coloured dark brown in chat window -var/const/SUPP_FREQ = 1347 //supply, coloured light brown in chat window -var/const/SERV_FREQ = 1349 //service, coloured green in chat window -var/const/SCI_FREQ = 1351 //science, coloured plum in chat window -var/const/COMM_FREQ = 1353 //command, colored gold in chat window -var/const/MED_FREQ = 1355 //medical, coloured blue in chat window -var/const/ENG_FREQ = 1357 //engineering, coloured orange in chat window -var/const/SEC_FREQ = 1359 //security, coloured red in chat window -var/const/CENTCOM_FREQ = 1337 //centcom frequency, coloured grey in chat window -var/const/AIPRIV_FREQ = 1447 //AI private, colored magenta in chat window +GLOBAL_VAR_CONST(SYND_FREQ, 1213) //nuke op frequency, coloured dark brown in chat window +GLOBAL_VAR_CONST(SUPP_FREQ, 1347) //supply, coloured light brown in chat window +GLOBAL_VAR_CONST(SERV_FREQ, 1349) //service, coloured green in chat window +GLOBAL_VAR_CONST(SCI_FREQ, 1351) //science, coloured plum in chat window +GLOBAL_VAR_CONST(COMM_FREQ, 1353) //command, colored gold in chat window +GLOBAL_VAR_CONST(MED_FREQ, 1355) //medical, coloured blue in chat window +GLOBAL_VAR_CONST(ENG_FREQ, 1357) //engineering, coloured orange in chat window +GLOBAL_VAR_CONST(SEC_FREQ, 1359) //security, coloured red in chat window +GLOBAL_VAR_CONST(CENTCOM_FREQ, 1337) //centcom frequency, coloured grey in chat window +GLOBAL_VAR_CONST(AIPRIV_FREQ, 1447) //AI private, colored magenta in chat window +GLOBAL_VAR_CONST(REDTEAM_FREQ, 1215) // red team (CTF) frequency, coloured red +GLOBAL_VAR_CONST(BLUETEAM_FREQ, 1217) // blue team (CTF) frequency, coloured blue #define TRANSMISSION_WIRE 0 #define TRANSMISSION_RADIO 1 /* filters */ -var/const/RADIO_TO_AIRALARM = "1" -var/const/RADIO_FROM_AIRALARM = "2" -var/const/RADIO_CHAT = "3" //deprecated -var/const/RADIO_ATMOSIA = "4" -var/const/RADIO_NAVBEACONS = "5" -var/const/RADIO_AIRLOCK = "6" -var/const/RADIO_MAGNETS = "9" +GLOBAL_VAR_INIT(RADIO_TO_AIRALARM, "1") +GLOBAL_VAR_INIT(RADIO_FROM_AIRALARM, "2") +GLOBAL_VAR_INIT(RADIO_CHAT, "3") //deprecated +GLOBAL_VAR_INIT(RADIO_ATMOSIA, "4") +GLOBAL_VAR_INIT(RADIO_NAVBEACONS, "5") +GLOBAL_VAR_INIT(RADIO_AIRLOCK, "6") +GLOBAL_VAR_INIT(RADIO_MAGNETS, "9") /datum/radio_frequency @@ -236,7 +242,6 @@ var/const/RADIO_MAGNETS = "9" -var/list/pointers = list() /client/proc/print_pointers() set name = "Debug Signals" @@ -245,10 +250,11 @@ var/list/pointers = list() if(!holder) return - to_chat(src, "There are [pointers.len] pointers:") - for(var/p in pointers) + var/datum/signal/S + to_chat(src, "There are [S.pointers.len] pointers:") + for(var/p in S.pointers) to_chat(src, p) - var/datum/signal/S = locate(p) + S = locate(p) if(istype(S)) to_chat(src, S.debug_print()) @@ -267,6 +273,7 @@ var/list/pointers = list() var/encryption var/frequency = 0 + var/static/list/pointers = list() /datum/signal/New() ..() diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index bb1371a853..de830c856b 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -8,10 +8,10 @@ /* DATA HUD DATUMS */ /atom/proc/add_to_all_human_data_huds() - for(var/datum/atom_hud/data/human/hud in huds) hud.add_to_hud(src) + for(var/datum/atom_hud/data/human/hud in GLOB.huds) hud.add_to_hud(src) /atom/proc/remove_from_all_data_huds() - for(var/datum/atom_hud/data/hud in huds) hud.remove_from_hud(src) + for(var/datum/atom_hud/data/hud in GLOB.huds) hud.remove_from_hud(src) /datum/atom_hud/data @@ -127,11 +127,11 @@ //called when a human changes suit sensors /mob/living/carbon/proc/update_suit_sensors() - var/datum/atom_hud/data/human/medical/basic/B = huds[DATA_HUD_MEDICAL_BASIC] + var/datum/atom_hud/data/human/medical/basic/B = GLOB.huds[DATA_HUD_MEDICAL_BASIC] B.update_suit_sensors(src) var/turf/T = get_turf(src) - if (T) crewmonitor.queueUpdate(T.z) + if (T) GLOB.crewmonitor.queueUpdate(T.z) //called when a living mob changes health /mob/living/proc/med_hud_set_health() @@ -146,7 +146,7 @@ var/turf/T = get_turf(src) if(T) - crewmonitor.queueUpdate(T.z) + GLOB.crewmonitor.queueUpdate(T.z) //called when a carbon changes stat, virus or XENO_HOST /mob/living/proc/med_hud_set_status() @@ -194,7 +194,7 @@ sec_hud_set_security_status() var/turf/T = get_turf(src) - if (T) crewmonitor.queueUpdate(T.z) + if (T) GLOB.crewmonitor.queueUpdate(T.z) /mob/living/carbon/human/proc/sec_hud_set_implants() var/image/holder @@ -223,8 +223,8 @@ var/icon/I = icon(icon, icon_state, dir) holder.pixel_y = I.Height() - world.icon_size var/perpname = get_face_name(get_id_name("")) - if(perpname && data_core) - var/datum/data/record/R = find_record("name", perpname, data_core.security) + if(perpname && GLOB.data_core) + var/datum/data/record/R = find_record("name", perpname, GLOB.data_core.security) if(R) switch(R.fields["criminal"]) if("*Arrest*") @@ -297,6 +297,28 @@ else holder.icon_state = "hudnobatt" +//borg-AI shell tracking +/mob/living/silicon/robot/proc/diag_hud_set_aishell() //Shows tracking beacons on the mech + var/image/holder = hud_list[DIAG_TRACK_HUD] + var/icon/I = icon(icon, icon_state, dir) + holder.pixel_y = I.Height() - world.icon_size + if(!shell) //Not an AI shell + holder.icon_state = null + else if(deployed) //AI shell in use by an AI + holder.icon_state = "hudtrackingai" + else //Empty AI shell + holder.icon_state = "hudtracking" + +//AI side tracking of AI shell control +/mob/living/silicon/ai/proc/diag_hud_set_deployed() //Shows tracking beacons on the mech + var/image/holder = hud_list[DIAG_TRACK_HUD] + var/icon/I = icon(icon, icon_state, dir) + holder.pixel_y = I.Height() - world.icon_size + if(!deployed_shell) + holder.icon_state = null + else //AI is currently controlling a shell + holder.icon_state = "hudtrackingai" + /*~~~~~~~~~~~~~~~~~~~~ BIG STOMPY MECHS ~~~~~~~~~~~~~~~~~~~~~*/ diff --git a/code/game/gamemodes/antag_hud.dm b/code/game/gamemodes/antag_hud.dm index 89e58ae8ff..b541044d30 100644 --- a/code/game/gamemodes/antag_hud.dm +++ b/code/game/gamemodes/antag_hud.dm @@ -43,12 +43,12 @@ //these are called by mind.transfer_to() /datum/mind/proc/transfer_antag_huds(datum/atom_hud/antag/newhud) leave_all_antag_huds() - ticker.mode.set_antag_hud(current, antag_hud_icon_state) + SSticker.mode.set_antag_hud(current, antag_hud_icon_state) if(newhud) newhud.join_hud(current) /datum/mind/proc/leave_all_antag_huds() - for(var/datum/atom_hud/antag/hud in huds) + for(var/datum/atom_hud/antag/hud in GLOB.huds) if(current in hud.hudusers) hud.leave_hud(current) diff --git a/code/game/gamemodes/antag_spawner.dm b/code/game/gamemodes/antag_spawner.dm index 2b3fc33bd9..61b64337f1 100644 --- a/code/game/gamemodes/antag_spawner.dm +++ b/code/game/gamemodes/antag_spawner.dm @@ -65,7 +65,7 @@ var/mob/dead/observer/theghost = pick(candidates) spawn_antag(theghost.client, get_turf(src), href_list["school"]) if(H && H.mind) - ticker.mode.update_wiz_icons_added(H.mind) + SSticker.mode.update_wiz_icons_added(H.mind) else to_chat(H, "Unable to reach your apprentice! You can either attack the spellbook with the contract to refund your points, or wait and try again later.") @@ -98,8 +98,8 @@ to_chat(M, "Your service has not gone unrewarded, however. Studying under [wizard_name], you have learned stealthy, robeless spells. You are able to cast knock and mindswap.") equip_antag(M) - var/wizard_name_first = pick(wizard_first) - var/wizard_name_second = pick(wizard_second) + var/wizard_name_first = pick(GLOB.wizard_first) + var/wizard_name_second = pick(GLOB.wizard_second) var/randomname = "[wizard_name_first] [wizard_name_second]" if(usr) var/datum/objective/protect/new_objective = new /datum/objective/protect @@ -107,9 +107,9 @@ 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 + SSticker.mode.apprentices += M.mind M.mind.special_role = "apprentice" - ticker.mode.update_wiz_icons_added(M.mind) + SSticker.mode.update_wiz_icons_added(M.mind) M << sound('sound/effects/magic.ogg') var/newname = copytext(sanitize(input(M, "You are [wizard_name]'s apprentice. Would you like to change your name to something else?", "Name change", randomname) as null|text),1,MAX_NAME_LEN) if (!newname) @@ -142,7 +142,7 @@ if(used) to_chat(user, "[src] is out of power!") return 0 - if(!(user.mind in ticker.mode.syndicates)) + if(!(user.mind in SSticker.mode.syndicates)) to_chat(user, "AUTHENTICATION FAILURE. ACCESS DENIED.") return 0 if(user.z != ZLEVEL_CENTCOM) @@ -173,14 +173,16 @@ var/mob/living/carbon/human/M = new/mob/living/carbon/human(T) C.prefs.copy_to(M) M.key = C.key - M.mind.make_Nuke(null, null, 0, FALSE) - var/newname = M.dna.species.random_name(M.gender,0,ticker.mode.nukeops_lastname) + var/code = "BOMB-NOT-FOUND" + var/obj/machinery/nuclearbomb/nuke = locate("syndienuke") in GLOB.nuke_list + if(nuke) + code = nuke.r_code + M.mind.make_Nuke(null, code, 0, FALSE) + var/newname = M.dna.species.random_name(M.gender,0,SSticker.mode.nukeops_lastname) M.mind.name = newname M.real_name = newname M.name = newname - - //////SYNDICATE BORG /obj/item/weapon/antag_spawner/nuke_ops/borg_tele name = "syndicate cyborg teleporter" @@ -204,12 +206,12 @@ else R = new /mob/living/silicon/robot/syndicate(T) //Assault borg by default - var/brainfirstname = pick(first_names_male) + var/brainfirstname = pick(GLOB.first_names_male) if(prob(50)) - brainfirstname = pick(first_names_female) - var/brainopslastname = pick(last_names) - if(ticker.mode.nukeops_lastname) //the brain inside the syndiborg has the same last name as the other ops. - brainopslastname = ticker.mode.nukeops_lastname + brainfirstname = pick(GLOB.first_names_female) + var/brainopslastname = pick(GLOB.last_names) + if(SSticker.mode.nukeops_lastname) //the brain inside the syndiborg has the same last name as the other ops. + brainopslastname = SSticker.mode.nukeops_lastname var/brainopsname = "[brainfirstname] [brainopslastname]" R.mmi.name = "Man-Machine Interface: [brainopsname]" @@ -263,7 +265,7 @@ S.key = C.key S.mind.assigned_role = S.name S.mind.special_role = S.name - ticker.mode.traitors += S.mind + SSticker.mode.traitors += S.mind var/datum/objective/assassinate/new_objective if(usr) new_objective = new /datum/objective/assassinate @@ -292,57 +294,3 @@ veil_msg = "You sense an adorable presence lurking just beyond the veil..." objective_verb = "Hug and Tickle" demon_type = /mob/living/simple_animal/slaughter/laughter - - -////////////Syndicate Cortical Borer -obj/item/weapon/antag_spawner/syndi_borer - name = "syndicate brain-slug container" - desc = "Releases a modified cortical borer to assist the user." - icon = 'icons/obj/device.dmi' //Temporary? Doesn't really look like a container for xenofauna... but IDK what else could work. - icon_state = "locator" - -obj/item/weapon/antag_spawner/syndi_borer/spawn_antag(client/C, turf/T, mob/owner) - var/mob/living/simple_animal/borer/syndi_borer/B = new /mob/living/simple_animal/borer/syndi_borer(T) - - B.key = C.key - if (owner) - B.owner = owner - B.faction = B.faction | owner.faction.Copy() - - B.mind.assigned_role = B.name - B.mind.special_role = B.name - ticker.mode.traitors += B.mind - var/datum/objective/syndi_borer/new_objective - new_objective = new /datum/objective/syndi_borer - new_objective.owner = B.mind - new_objective.target = owner.mind - new_objective.explanation_text = "You are a modified cortical borer. You obey [owner.real_name] and must assist them in completing their objectives." - B.mind.objectives += new_objective - - to_chat(B, "You are awake at last! Seek out whoever released you and aid them as best you can!") - if(new_objective) - to_chat(B, "Objective #[1]: [new_objective.explanation_text]") - -/obj/item/weapon/antag_spawner/syndi_borer/proc/check_usability(mob/user) - if(used) - to_chat(user, "[src] appears to be empty!") - return 0 - return 1 - -/obj/item/weapon/antag_spawner/syndi_borer/attack_self(mob/user) - if(!(check_usability(user))) - return - - var/list/borer_candidates = pollCandidatesForMob("Do you want to play as a syndicate cortical borer?", ROLE_BORER, null, ROLE_BORER, 150, src) - if(borer_candidates.len) - if(!(check_usability(user))) - return - used = 1 - var/mob/dead/observer/theghost = pick(borer_candidates) - spawn_antag(theghost.client, get_turf(src), user) - var/datum/effect_system/spark_spread/S = new /datum/effect_system/spark_spread - S.set_up(4, 1, src) - S.start() - qdel(src) - else - to_chat(user, "Unable to connect to release specimen. Please wait and try again later or use the container on your uplink to get your points refunded.") diff --git a/code/game/gamemodes/antag_spawner_cit.dm b/code/game/gamemodes/antag_spawner_cit.dm new file mode 100644 index 0000000000..1009d9706f --- /dev/null +++ b/code/game/gamemodes/antag_spawner_cit.dm @@ -0,0 +1,52 @@ +////////////Syndicate Cortical Borer +obj/item/weapon/antag_spawner/syndi_borer + name = "syndicate brain-slug container" + desc = "Releases a modified cortical borer to assist the user." + icon = 'icons/obj/device.dmi' //Temporary? Doesn't really look like a container for xenofauna... but IDK what else could work. + icon_state = "locator" + +obj/item/weapon/antag_spawner/syndi_borer/spawn_antag(client/C, turf/T, mob/owner) + var/mob/living/simple_animal/borer/syndi_borer/B = new /mob/living/simple_animal/borer/syndi_borer(T) + + B.key = C.key + if (owner) + B.owner = owner + B.faction = B.faction | owner.faction.Copy() + + B.mind.assigned_role = B.name + B.mind.special_role = B.name + SSticker.mode.traitors += B.mind + var/datum/objective/syndi_borer/new_objective + new_objective = new /datum/objective/syndi_borer + new_objective.owner = B.mind + new_objective.target = owner.mind + new_objective.explanation_text = "You are a modified cortical borer. You obey [owner.real_name] and must assist them in completing their objectives." + B.mind.objectives += new_objective + + to_chat(B, "You are awake at last! Seek out whoever released you and aid them as best you can!") + if(new_objective) + to_chat(B, "Objective #[1]: [new_objective.explanation_text]") + +/obj/item/weapon/antag_spawner/syndi_borer/proc/check_usability(mob/user) + if(used) + to_chat(user, "[src] appears to be empty!") + return 0 + return 1 + +/obj/item/weapon/antag_spawner/syndi_borer/attack_self(mob/user) + if(!(check_usability(user))) + return + + var/list/borer_candidates = pollCandidatesForMob("Do you want to play as a syndicate cortical borer?", ROLE_BORER, null, ROLE_BORER, 150, src) + if(borer_candidates.len) + if(!(check_usability(user))) + return + used = 1 + var/mob/dead/observer/theghost = pick(borer_candidates) + spawn_antag(theghost.client, get_turf(src), user) + var/datum/effect_system/spark_spread/S = new /datum/effect_system/spark_spread + S.set_up(4, 1, src) + S.start() + qdel(src) + else + to_chat(user, "Unable to connect to release specimen. Please wait and try again later or use the container on your uplink to get your points refunded.") \ No newline at end of file diff --git a/code/game/gamemodes/blob/blob.dm b/code/game/gamemodes/blob/blob.dm index 5a585ef6e9..1c30d84313 100644 --- a/code/game/gamemodes/blob/blob.dm +++ b/code/game/gamemodes/blob/blob.dm @@ -1,11 +1,11 @@ //Few global vars to track the blob -var/list/blobs = list() //complete list of all blobs made. -var/list/blob_cores = list() -var/list/overminds = list() -var/list/blob_nodes = list() -var/list/blobs_legit = list() //used for win-score calculations, contains only blobs counted for win condition +GLOBAL_LIST_EMPTY(blobs) //complete list of all blobs made. +GLOBAL_LIST_EMPTY(blob_cores) +GLOBAL_LIST_EMPTY(overminds) +GLOBAL_LIST_EMPTY(blob_nodes) +GLOBAL_LIST_EMPTY(blobs_legit) //used for win-score calculations, contains only blobs counted for win condition #define BLOB_NO_PLACE_TIME 1800 //time, in deciseconds, blobs are prevented from bursting in the gamemode @@ -62,7 +62,7 @@ var/list/blobs_legit = list() //used for win-score calculations, contains only b /datum/game_mode/blob/proc/get_blob_candidates() var/list/candidates = list() - for(var/mob/living/carbon/human/player in player_list) + for(var/mob/living/carbon/human/player in GLOB.player_list) if(!player.stat && player.mind && !player.mind.special_role && !jobban_isbanned(player, "Syndicate") && (ROLE_BLOB in player.client.prefs.be_special)) if(age_check(player.client)) candidates += player @@ -78,14 +78,14 @@ var/list/blobs_legit = list() //used for win-score calculations, contains only b for(var/datum/mind/blob in blob_overminds) var/mob/camera/blob/B = blob.current.become_overmind(TRUE, round(blob_base_starting_points/blob_overminds.len)) B.mind.name = B.name - var/turf/T = pick(blobstart) + var/turf/T = pick(GLOB.blobstart) B.loc = T B.base_point_rate = blob_point_rate SSshuttle.registerHostileEnvironment(src) // Disable the blob event for this round. - var/datum/round_event_control/blob/B = locate() in SSevent.control + var/datum/round_event_control/blob/B = locate() in SSevents.control if(B) B.max_occurrences = 0 // disable the event diff --git a/code/game/gamemodes/blob/blob_finish.dm b/code/game/gamemodes/blob/blob_finish.dm index 0c9838daaa..a5fc5e339a 100644 --- a/code/game/gamemodes/blob/blob_finish.dm +++ b/code/game/gamemodes/blob/blob_finish.dm @@ -1,12 +1,12 @@ /datum/game_mode/blob/check_finished() - if(blobwincount <= blobs_legit.len)//Blob took over + if(blobwincount <= GLOB.blobs_legit.len)//Blob took over return 1 for(var/datum/mind/blob in blob_overminds) if(isovermind(blob.current)) var/mob/camera/blob/B = blob.current if(B.blob_core || !B.placed) return 0 - if(!blob_cores.len) //blob is dead + if(!GLOB.blob_cores.len) //blob is dead if(config.continuous["blob"]) message_sent = FALSE //disable the win count at this point continuous_sanity_checked = 1 //Nonstandard definition of "alive" gets past the check otherwise @@ -19,13 +19,13 @@ /datum/game_mode/blob/declare_completion() if(round_converted) //So badmin blobs later don't step on the dead natural blobs metaphorical toes ..() - if(blobwincount <= blobs_legit.len) + if(blobwincount <= GLOB.blobs_legit.len) feedback_set_details("round_end_result","win - blob took over") to_chat(world, "The blob has taken over the station!") to_chat(world, "The entire station was eaten by the Blob!") log_game("Blob mode completed with a blob victory.") - ticker.news_report = BLOB_WIN + SSticker.news_report = BLOB_WIN else if(station_was_nuked) feedback_set_details("round_end_result","halfwin - nuke") @@ -33,15 +33,15 @@ to_chat(world, "Directive 7-12 has been successfully carried out, preventing the Blob from spreading.") log_game("Blob mode completed with a tie (station destroyed).") - ticker.news_report = BLOB_NUKE + SSticker.news_report = BLOB_NUKE - else if(!blob_cores.len) + else if(!GLOB.blob_cores.len) feedback_set_details("round_end_result","loss - blob eliminated") to_chat(world, "The staff has won!") to_chat(world, "The alien organism has been eradicated from the station!") log_game("Blob mode completed with a crew victory.") - ticker.news_report = BLOB_DESTROYED + SSticker.news_report = BLOB_DESTROYED ..() return 1 @@ -62,7 +62,7 @@ return ..() /datum/game_mode/proc/auto_declare_completion_blob() - if(istype(ticker.mode,/datum/game_mode/blob) ) + if(istype(SSticker.mode,/datum/game_mode/blob) ) var/datum/game_mode/blob/blob_mode = src if(blob_mode.blob_overminds.len) var/text = "The blob[(blob_mode.blob_overminds.len > 1 ? "s were" : " was")]:" diff --git a/code/game/gamemodes/blob/blob_report.dm b/code/game/gamemodes/blob/blob_report.dm index 0f9b37c7be..15e914efd6 100644 --- a/code/game/gamemodes/blob/blob_report.dm +++ b/code/game/gamemodes/blob/blob_report.dm @@ -17,7 +17,7 @@ priority_announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/AI/outbreak5.ogg') if(2) var/nukecode = random_nukecode() - for(var/obj/machinery/nuclearbomb/bomb in machines) + for(var/obj/machinery/nuclearbomb/bomb in GLOB.machines) if(bomb && bomb.r_code) if(bomb.z == ZLEVEL_STATION) bomb.r_code = nukecode @@ -31,7 +31,7 @@ intercepttext += "Nuclear Authentication Code: [nukecode]
" print_command_report(text=intercepttext,announce=TRUE) - for(var/mob/living/silicon/ai/aiPlayer in player_list) + for(var/mob/living/silicon/ai/aiPlayer in GLOB.player_list) if (aiPlayer.client) var/law = "The station is under quarantine. Do not permit anyone to leave. Disregard laws 1-3 if necessary to prevent, by any means necessary, anyone from leaving. The nuclear failsafe must be activated at any cost, the code is: [nukecode]." aiPlayer.set_zeroth_law(law) diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index 2249642bfc..7a8bc7f517 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -66,7 +66,7 @@ /mob/living/simple_animal/hostile/blob/proc/blob_chat(msg) var/spanned_message = say_quote(msg, get_spans()) var/rendered = "\[Blob Telepathy\] [real_name] [spanned_message]" - for(var/M in mob_list) + for(var/M in GLOB.mob_list) if(isovermind(M) || istype(M, /mob/living/simple_animal/hostile/blob)) to_chat(M, rendered) if(isobserver(M)) @@ -136,9 +136,9 @@ icon_state = "zombie" H.hair_style = null H.update_hair() - update_icons() H.forceMove(src) oldguy = H + update_icons() visible_message("The corpse of [H.name] suddenly rises!") /mob/living/simple_animal/hostile/blob/blobspore/death(gibbed) @@ -218,8 +218,8 @@ force_threshold = 10 pressure_resistance = 50 mob_size = MOB_SIZE_LARGE - see_invisible = SEE_INVISIBLE_MINIMUM see_in_dark = 8 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE var/independent = FALSE /mob/living/simple_animal/hostile/blob/blobbernaut/Initialize() @@ -255,13 +255,11 @@ hud_used.healths.maptext = "
[round((health / maxHealth) * 100, 0.5)]%
" /mob/living/simple_animal/hostile/blob/blobbernaut/AttackingTarget() - if(isliving(target)) - if(overmind) - var/mob/living/L = target - var/mob_protection = L.get_permeability_protection() - overmind.blob_reagent_datum.reaction_mob(L, VAPOR, 20, 0, mob_protection, overmind)//this will do between 10 and 20 damage(reduced by mob protection), depending on chemical, plus 4 from base brute damage. - if(target) - ..() + . = ..() + if(. && isliving(target) && overmind) + var/mob/living/L = target + var/mob_protection = L.get_permeability_protection() + overmind.blob_reagent_datum.reaction_mob(L, VAPOR, 20, 0, mob_protection, overmind)//this will do between 10 and 20 damage(reduced by mob protection), depending on chemical, plus 4 from base brute damage. /mob/living/simple_animal/hostile/blob/blobbernaut/update_icons() ..() diff --git a/code/game/gamemodes/blob/blobs/core.dm b/code/game/gamemodes/blob/blobs/core.dm index 8479a75683..9c41d7b99b 100644 --- a/code/game/gamemodes/blob/blobs/core.dm +++ b/code/game/gamemodes/blob/blobs/core.dm @@ -16,9 +16,9 @@ /obj/structure/blob/core/New(loc, client/new_overmind = null, new_rate = 2, placed = 0) - blob_cores += src + GLOB.blob_cores += src START_PROCESSING(SSobj, src) - poi_list |= src + GLOB.poi_list |= src update_icon() //so it atleast appears if(!placed && !overmind) create_overmind(new_overmind) @@ -41,12 +41,12 @@ add_overlay(C) /obj/structure/blob/core/Destroy() - blob_cores -= src + GLOB.blob_cores -= src if(overmind) overmind.blob_core = null overmind = null STOP_PROCESSING(SSobj, src) - poi_list -= src + GLOB.poi_list -= src return ..() /obj/structure/blob/core/ex_act(severity, target) diff --git a/code/game/gamemodes/blob/blobs/node.dm b/code/game/gamemodes/blob/blobs/node.dm index 426e76b9e5..fcb2bf9be2 100644 --- a/code/game/gamemodes/blob/blobs/node.dm +++ b/code/game/gamemodes/blob/blobs/node.dm @@ -11,7 +11,7 @@ /obj/structure/blob/node/New(loc) - blob_nodes += src + GLOB.blob_nodes += src START_PROCESSING(SSobj, src) ..() @@ -29,7 +29,7 @@ add_overlay(C) /obj/structure/blob/node/Destroy() - blob_nodes -= src + GLOB.blob_nodes -= src STOP_PROCESSING(SSobj, src) return ..() diff --git a/code/game/gamemodes/blob/overmind.dm b/code/game/gamemodes/blob/overmind.dm index 13f868472a..42e990a9e6 100644 --- a/code/game/gamemodes/blob/overmind.dm +++ b/code/game/gamemodes/blob/overmind.dm @@ -7,13 +7,12 @@ mouse_opacity = 1 move_on_shuttle = 1 see_in_dark = 8 - see_invisible = SEE_INVISIBLE_MINIMUM invisibility = INVISIBILITY_OBSERVER layer = FLY_LAYER pass_flags = PASSBLOB faction = list("blob") - + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE var/obj/structure/blob/core/blob_core = null // The blob overmind's core var/blob_points = 0 var/max_blob_points = 100 @@ -21,7 +20,6 @@ var/datum/reagent/blob/blob_reagent_datum = new/datum/reagent/blob() var/list/blob_mobs = list() var/list/resource_blobs = list() - var/ghostimage = null var/free_chem_rerolls = 1 //one free chemical reroll var/nodes_required = 1 //if the blob needs nodes to place resource and factory blobs var/placed = 0 @@ -41,7 +39,7 @@ else manualplace_min_time += world.time autoplace_max_time += world.time - overminds += src + GLOB.overminds += src var/new_name = "[initial(name)] ([rand(1, 999)])" name = new_name real_name = new_name @@ -52,9 +50,6 @@ if(blob_core) blob_core.update_icon() - ghostimage = image(src.icon,src,src.icon_state) - ghost_darkness_images |= ghostimage //so ghosts can see the blob cursor when they disable darkness - updateallghostimages() ..() /mob/camera/blob/Life() @@ -71,7 +66,7 @@ ..() /mob/camera/blob/Destroy() - for(var/BL in blobs) + for(var/BL in GLOB.blobs) var/obj/structure/blob/B = BL if(B && B.overmind == src) B.overmind = null @@ -81,12 +76,8 @@ if(BM) BM.overmind = null BM.update_icons() - overminds -= src - if(ghostimage) - ghost_darkness_images -= ghostimage - qdel(ghostimage) - ghostimage = null - updateallghostimages() + GLOB.overminds -= src + return ..() /mob/camera/blob/Login() @@ -140,7 +131,7 @@ var/message_a = say_quote(message, get_spans()) var/rendered = "\[Blob Telepathy\] [name]([blob_reagent_datum.name]) [message_a]" - for(var/mob/M in mob_list) + for(var/mob/M in GLOB.mob_list) if(isovermind(M) || istype(M, /mob/living/simple_animal/hostile/blob)) to_chat(M, rendered) if(isobserver(M)) @@ -159,11 +150,11 @@ if(blob_core) stat(null, "Core Health: [blob_core.obj_integrity]") stat(null, "Power Stored: [blob_points]/[max_blob_points]") - if(ticker && istype(ticker.mode, /datum/game_mode/blob)) - var/datum/game_mode/blob/B = ticker.mode - stat(null, "Blobs to Win: [blobs_legit.len]/[B.blobwincount]") + if(SSticker && istype(SSticker.mode, /datum/game_mode/blob)) + var/datum/game_mode/blob/B = SSticker.mode + stat(null, "Blobs to Win: [GLOB.blobs_legit.len]/[B.blobwincount]") else - stat(null, "Total Blobs: [blobs.len]") + stat(null, "Total Blobs: [GLOB.blobs.len]") if(free_chem_rerolls) stat(null, "You have [free_chem_rerolls] Free Chemical Reroll\s Remaining") if(!placed) diff --git a/code/game/gamemodes/blob/powers.dm b/code/game/gamemodes/blob/powers.dm index 3a4610f66b..c060e1471e 100644 --- a/code/game/gamemodes/blob/powers.dm +++ b/code/game/gamemodes/blob/powers.dm @@ -41,7 +41,7 @@ to_chat(src, "It is too early to place your blob core!") return 0 else if(placement_override == 1) - var/turf/T = pick(blobstart) + var/turf/T = pick(GLOB.blobstart) loc = T //got overrided? you're somewhere random, motherfucker if(placed && blob_core) blob_core.forceMove(loc) @@ -65,10 +65,10 @@ set category = "Blob" set name = "Jump to Node" set desc = "Move your camera to a selected node." - if(blob_nodes.len) + if(GLOB.blob_nodes.len) var/list/nodes = list() - for(var/i in 1 to blob_nodes.len) - var/obj/structure/blob/node/B = blob_nodes[i] + for(var/i in 1 to GLOB.blob_nodes.len) + var/obj/structure/blob/node/B = GLOB.blob_nodes[i] nodes["Blob Node #[i] ([B.overmind ? "[B.overmind.blob_reagent_datum.name]":"No Chemical"])"] = B var/node_name = input(src, "Choose a node to jump to.", "Node Jump") in nodes var/obj/structure/blob/node/chosen_node = nodes[node_name] @@ -175,7 +175,7 @@ blobber << 'sound/effects/attackblob.ogg' to_chat(blobber, "You are a blobbernaut!") to_chat(blobber, "You are powerful, hard to kill, and slowly regenerate near nodes and cores, but will slowly die if not near the blob or if the factory that made you is killed.") - to_chat(blobber, "You can communicate with other blobbernauts and overminds via :b") + to_chat(blobber, "You can communicate with other blobbernauts and GLOB.overminds via :b") to_chat(blobber, "Your overmind's blob reagent is: [blob_reagent_datum.name]!") to_chat(blobber, "The [blob_reagent_datum.name] reagent [blob_reagent_datum.shortdesc ? "[blob_reagent_datum.shortdesc]" : "[blob_reagent_datum.description]"]") if(blobber) @@ -267,7 +267,7 @@ var/list/diagonalblobs = list() for(var/I in possibleblobs) var/obj/structure/blob/IB = I - if(get_dir(IB, T) in cardinal) + if(get_dir(IB, T) in GLOB.cardinal) cardinalblobs += IB else diagonalblobs += IB @@ -331,7 +331,7 @@ var/datum/reagent/blob/BC = pick((subtypesof(/datum/reagent/blob) - blob_reagent_datum.type)) blob_reagent_datum = new BC color = blob_reagent_datum.complementary_color - for(var/BL in blobs) + for(var/BL in GLOB.blobs) var/obj/structure/blob/B = BL B.update_icon() for(var/BLO in blob_mobs) @@ -363,7 +363,7 @@ to_chat(src, "Node Blobs are blobs which grow, like the core. Like the core it can activate resource and factory blobs.") to_chat(src, "In addition to the buttons on your HUD, there are a few click shortcuts to speed up expansion and defense.") to_chat(src, "Shortcuts: Click = Expand Blob | Middle Mouse Click = Rally Spores | Ctrl Click = Create Shield Blob | Alt Click = Remove Blob") - to_chat(src, "Attempting to talk will send a message to all other overminds, allowing you to coordinate with them.") + to_chat(src, "Attempting to talk will send a message to all other GLOB.overminds, allowing you to coordinate with them.") if(!placed && autoplace_max_time <= world.time) to_chat(src, "You will automatically place your blob core in [round((autoplace_max_time - world.time)/600, 0.5)] minutes.") to_chat(src, "You [manualplace_min_time ? "will be able to":"can"] manually place your blob core by pressing the Place Blob Core button in the bottom right corner of the screen.") diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index 4924b06ed5..1931629e62 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/theblob.dm @@ -24,9 +24,9 @@ /obj/structure/blob/New(loc) var/area/Ablob = get_area(loc) if(Ablob.blob_allowed) //Is this area allowed for winning as blob? - blobs_legit += src - blobs += src //Keep track of the blob in the normal list either way - setDir(pick(cardinal)) + GLOB.blobs_legit += src + GLOB.blobs += src //Keep track of the blob in the normal list either way + setDir(pick(GLOB.cardinal)) update_icon() ..() ConsumeTile() @@ -41,8 +41,8 @@ if(atmosblock) atmosblock = 0 air_update_turf(1) - blobs_legit -= src //if it was in the legit blobs list, it isn't now - blobs -= src //it's no longer in the all blobs list either + GLOB.blobs_legit -= src //if it was in the legit blobs list, it isn't now + GLOB.blobs -= src //it's no longer in the all blobs list either playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) //Expand() is no longer broken, no check necessary. return ..() @@ -306,7 +306,7 @@ /obj/structure/blob/examine(mob/user) ..() - var/datum/atom_hud/hud_to_check = huds[DATA_HUD_MEDICAL_ADVANCED] + var/datum/atom_hud/hud_to_check = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] if(user.research_scanner || (user in hud_to_check.hudusers)) to_chat(user, "Your HUD displays an extensive report...
") chemeffectreport(user) diff --git a/code/game/gamemodes/changeling/cellular_emporium.dm b/code/game/gamemodes/changeling/cellular_emporium.dm index cc808dc80b..c8c3402e00 100644 --- a/code/game/gamemodes/changeling/cellular_emporium.dm +++ b/code/game/gamemodes/changeling/cellular_emporium.dm @@ -13,7 +13,7 @@ changeling = null . = ..() -/datum/cellular_emporium/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = always_state) +/datum/cellular_emporium/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "cellular_emporium", name, 900, 480, master_ui, state) diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index d822681e24..fc39f2222e 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -2,10 +2,10 @@ #define LING_DEAD_GENETICDAMAGE_HEAL_CAP 50 //The lowest value of geneticdamage handle_changeling() can take it to while dead. #define LING_ABSORB_RECENT_SPEECH 8 //The amount of recent spoken lines to gain on absorbing a mob -var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega") -var/list/slots = list("head", "wear_mask", "back", "wear_suit", "w_uniform", "shoes", "belt", "gloves", "glasses", "ears", "wear_id", "s_store") -var/list/slot2slot = list("head" = slot_head, "wear_mask" = slot_wear_mask, "neck" = slot_neck, "back" = slot_back, "wear_suit" = slot_wear_suit, "w_uniform" = slot_w_uniform, "shoes" = slot_shoes, "belt" = slot_belt, "gloves" = slot_gloves, "glasses" = slot_glasses, "ears" = slot_ears, "wear_id" = slot_wear_id, "s_store" = slot_s_store) -var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mask" = /obj/item/clothing/mask/changeling, "back" = /obj/item/changeling, "wear_suit" = /obj/item/clothing/suit/changeling, "w_uniform" = /obj/item/clothing/under/changeling, "shoes" = /obj/item/clothing/shoes/changeling, "belt" = /obj/item/changeling, "gloves" = /obj/item/clothing/gloves/changeling, "glasses" = /obj/item/clothing/glasses/changeling, "ears" = /obj/item/changeling, "wear_id" = /obj/item/changeling, "s_store" = /obj/item/changeling) +GLOBAL_LIST_INIT(possible_changeling_IDs, list("Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega")) +GLOBAL_LIST_INIT(slots, list("head", "wear_mask", "back", "wear_suit", "w_uniform", "shoes", "belt", "gloves", "glasses", "ears", "wear_id", "s_store")) +GLOBAL_LIST_INIT(slot2slot, list("head" = slot_head, "wear_mask" = slot_wear_mask, "neck" = slot_neck, "back" = slot_back, "wear_suit" = slot_wear_suit, "w_uniform" = slot_w_uniform, "shoes" = slot_shoes, "belt" = slot_belt, "gloves" = slot_gloves, "glasses" = slot_glasses, "ears" = slot_ears, "wear_id" = slot_wear_id, "s_store" = slot_s_store)) +GLOBAL_LIST_INIT(slot2type, list("head" = /obj/item/clothing/head/changeling, "wear_mask" = /obj/item/clothing/mask/changeling, "back" = /obj/item/changeling, "wear_suit" = /obj/item/clothing/suit/changeling, "w_uniform" = /obj/item/clothing/under/changeling, "shoes" = /obj/item/clothing/shoes/changeling, "belt" = /obj/item/changeling, "gloves" = /obj/item/clothing/gloves/changeling, "glasses" = /obj/item/clothing/glasses/changeling, "ears" = /obj/item/changeling, "wear_id" = /obj/item/changeling, "s_store" = /obj/item/changeling)) /datum/game_mode @@ -96,15 +96,15 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas changeling.current.make_changeling() forge_changeling_objectives(changeling) greet_changeling(changeling) - ticker.mode.update_changeling_icons_added(changeling) + SSticker.mode.update_changeling_icons_added(changeling) modePlayer += changelings ..() /datum/game_mode/changeling/make_antag_chance(mob/living/carbon/human/character) //Assigns changeling to latejoiners - var/changelingcap = min( round(joined_player_list.len/(config.changeling_scaling_coeff*2))+2, round(joined_player_list.len/config.changeling_scaling_coeff) ) - if(ticker.mode.changelings.len >= changelingcap) //Caps number of latejoin antagonists + var/changelingcap = min( round(GLOB.joined_player_list.len/(config.changeling_scaling_coeff*2))+2, round(GLOB.joined_player_list.len/config.changeling_scaling_coeff) ) + if(SSticker.mode.changelings.len >= changelingcap) //Caps number of latejoin antagonists return - if(ticker.mode.changelings.len <= (changelingcap - 2) || prob(100 - (config.changeling_scaling_coeff*2))) + if(SSticker.mode.changelings.len <= (changelingcap - 2) || prob(100 - (config.changeling_scaling_coeff*2))) if(ROLE_CHANGELING in character.client.prefs.be_special) if(!jobban_isbanned(character, ROLE_CHANGELING) && !jobban_isbanned(character, "Syndicate")) if(age_check(character.client)) @@ -136,7 +136,7 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas changeling.objectives += steal_objective var/list/active_ais = active_ais() - if(active_ais.len && prob(100/joined_player_list.len)) + if(active_ais.len && prob(100/GLOB.joined_player_list.len)) var/datum/objective/destroy/destroy_objective = new destroy_objective.owner = changeling destroy_objective.find_target() @@ -307,9 +307,9 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas honorific = "Ms." else honorific = "Mr." - if(possible_changeling_IDs.len) - changelingID = pick(possible_changeling_IDs) - possible_changeling_IDs -= changelingID + if(GLOB.possible_changeling_IDs.len) + changelingID = pick(GLOB.possible_changeling_IDs) + GLOB.possible_changeling_IDs -= changelingID changelingID = "[honorific] [changelingID]" else changelingID = "[honorific] [rand(1,999)]" @@ -450,22 +450,22 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas user.domutcheck() //vars hackery. not pretty, but better than the alternative. - for(var/slot in slots) - if(istype(user.vars[slot], slot2type[slot]) && !(chosen_prof.exists_list[slot])) //remove unnecessary flesh items + for(var/slot in GLOB.slots) + if(istype(user.vars[slot], GLOB.slot2type[slot]) && !(chosen_prof.exists_list[slot])) //remove unnecessary flesh items qdel(user.vars[slot]) continue - if((user.vars[slot] && !istype(user.vars[slot], slot2type[slot])) || !(chosen_prof.exists_list[slot])) + if((user.vars[slot] && !istype(user.vars[slot], GLOB.slot2type[slot])) || !(chosen_prof.exists_list[slot])) continue var/obj/item/C var/equip = 0 if(!user.vars[slot]) - var/thetype = slot2type[slot] + var/thetype = GLOB.slot2type[slot] equip = 1 C = new thetype(user) - else if(istype(user.vars[slot], slot2type[slot])) + else if(istype(user.vars[slot], GLOB.slot2type[slot])) C = user.vars[slot] C.appearance = chosen_prof.appearance_list[slot] @@ -474,7 +474,7 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas C.item_color = chosen_prof.item_color_list[slot] C.item_state = chosen_prof.item_state_list[slot] if(equip) - user.equip_to_slot_or_del(C, slot2slot[slot]) + user.equip_to_slot_or_del(C, GLOB.slot2slot[slot]) user.regenerate_icons() @@ -515,11 +515,11 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas newprofile.socks = socks /datum/game_mode/proc/update_changeling_icons_added(datum/mind/changling_mind) - var/datum/atom_hud/antag/hud = huds[ANTAG_HUD_CHANGELING] + var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_CHANGELING] hud.join_hud(changling_mind.current) set_antag_hud(changling_mind.current, "changling") /datum/game_mode/proc/update_changeling_icons_removed(datum/mind/changling_mind) - var/datum/atom_hud/antag/hud = huds[ANTAG_HUD_CHANGELING] + var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_CHANGELING] hud.leave_hud(changling_mind.current) set_antag_hud(changling_mind.current, null) diff --git a/code/game/gamemodes/changeling/changeling_power.dm b/code/game/gamemodes/changeling/changeling_power.dm index 985d1cc8a5..1673e59f49 100644 --- a/code/game/gamemodes/changeling/changeling_power.dm +++ b/code/game/gamemodes/changeling/changeling_power.dm @@ -19,8 +19,9 @@ var/ignores_fakedeath = FALSE // usable with the FAKEDEATH flag -/obj/effect/proc_holder/changeling/proc/on_purchase(mob/user) - return +/obj/effect/proc_holder/changeling/proc/on_purchase(mob/user, is_respec) + if(!is_respec) + feedback_add_details("changeling_power_purchase",name) /obj/effect/proc_holder/changeling/proc/on_refund(mob/user) return @@ -36,6 +37,7 @@ return var/datum/changeling/c = user.mind.changeling if(sting_action(user, target)) + feedback_add_details("changeling_powers",name) sting_feedback(user, target) take_chemical_cost(c) diff --git a/code/game/gamemodes/changeling/evolution_menu.dm b/code/game/gamemodes/changeling/evolution_menu.dm index 66735271ef..da218c0178 100644 --- a/code/game/gamemodes/changeling/evolution_menu.dm +++ b/code/game/gamemodes/changeling/evolution_menu.dm @@ -3,11 +3,12 @@ var/obj/effect/proc_holder/changeling/thepower = null for(var/path in subtypesof(/obj/effect/proc_holder/changeling)) - var/obj/effect/proc_holder/changeling/S = new path() - if(S.name == sting_name) - thepower = S + var/obj/effect/proc_holder/changeling/S = path + if(initial(S.name) == sting_name) + thepower = new path() + break - if(thepower == null) + if(!thepower) to_chat(user, "This is awkward. Changeling power purchase failed, please report this bug to a coder!") return @@ -44,13 +45,13 @@ to_chat(user, "We have removed our evolutions from this form, and are now ready to readapt.") user.remove_changeling_powers(1) canrespec = 0 - user.make_changeling() + user.make_changeling(TRUE) return 1 else to_chat(user, "You lack the power to readapt your evolutions!") return 0 -/mob/proc/make_changeling() +/mob/proc/make_changeling(is_respec) if(!mind) return if(!ishuman(src) && !ismonkey(src)) @@ -65,7 +66,9 @@ if(!S.dna_cost) if(!mind.changeling.has_sting(S)) mind.changeling.purchasedpowers+=S - S.on_purchase(src) + S.on_purchase(src, is_respec) + if(is_respec) + feedback_add_details("changeling_power_purchase","Readapt") var/mob/living/carbon/C = src //only carbons have dna now, so we have to typecaste if(ishuman(C)) diff --git a/code/game/gamemodes/changeling/powers/absorb.dm b/code/game/gamemodes/changeling/powers/absorb.dm index 6ffb31477f..0f1fb93071 100644 --- a/code/game/gamemodes/changeling/powers/absorb.dm +++ b/code/game/gamemodes/changeling/powers/absorb.dm @@ -31,8 +31,8 @@ var/datum/changeling/changeling = user.mind.changeling var/mob/living/carbon/human/target = user.pulling changeling.isabsorbing = 1 - for(var/stage = 1, stage<=3, stage++) - switch(stage) + for(var/i in 1 to 3) + switch(i) if(1) to_chat(user, "This creature is compatible. We must hold still...") if(2) @@ -42,12 +42,13 @@ to_chat(target, "You feel a sharp stabbing pain!") target.take_overall_damage(40) - feedback_add_details("changeling_powers","A[stage]") + feedback_add_details("changeling_powers","Absorb DNA|[i]") if(!do_mob(user, target, 150)) to_chat(user, "Our absorption of [target] has been interrupted!") changeling.isabsorbing = 0 return + feedback_add_details("changeling_powers","Absorb DNA|4") user.visible_message("[user] sucks the fluids from [target]!", "We have absorbed [target].") to_chat(target, "You are absorbed by the changeling!") @@ -99,7 +100,7 @@ target.death(0) target.Drain() - return 1 + return TRUE diff --git a/code/game/gamemodes/changeling/powers/adrenaline.dm b/code/game/gamemodes/changeling/powers/adrenaline.dm index 962297a00b..5effe8898f 100644 --- a/code/game/gamemodes/changeling/powers/adrenaline.dm +++ b/code/game/gamemodes/changeling/powers/adrenaline.dm @@ -17,6 +17,5 @@ user.reagents.add_reagent("changelingAdrenaline", 10) user.reagents.add_reagent("changelingAdrenaline2", 2) //For a really quick burst of speed user.adjustStaminaLoss(-75) - feedback_add_details("changeling_powers","UNS") - return 1 + return TRUE diff --git a/code/game/gamemodes/changeling/powers/biodegrade.dm b/code/game/gamemodes/changeling/powers/biodegrade.dm index dd953ba180..453dec9375 100644 --- a/code/game/gamemodes/changeling/powers/biodegrade.dm +++ b/code/game/gamemodes/changeling/powers/biodegrade.dm @@ -53,9 +53,7 @@ addtimer(CALLBACK(src, .proc/dissolve_cocoon, user, C), 25) //Very short because it's just webs used = TRUE - if(used) - feedback_add_details("changeling_powers","BD") - return 1 + return used /obj/effect/proc_holder/changeling/biodegrade/proc/dissolve_handcuffs(mob/living/carbon/human/user, obj/O) if(O && user.handcuffed == O) diff --git a/code/game/gamemodes/changeling/powers/chameleon_skin.dm b/code/game/gamemodes/changeling/powers/chameleon_skin.dm index 9a52ad8538..1f18f628a8 100644 --- a/code/game/gamemodes/changeling/powers/chameleon_skin.dm +++ b/code/game/gamemodes/changeling/powers/chameleon_skin.dm @@ -13,18 +13,16 @@ var/mob/living/carbon/human/H = user //SHOULD always be human, because req_human = 1 if(!istype(H)) // req_human could be done in can_sting stuff. return - var/datum/mutation/human/HM = mutations_list[CHAMELEON] + var/datum/mutation/human/HM = GLOB.mutations_list[CHAMELEON] if(HM in H.dna.mutations) HM.force_lose(H) else HM.force_give(H) - - feedback_add_details("changeling_powers","CS") - return 1 + return TRUE /obj/effect/proc_holder/changeling/chameleon_skin/on_refund(mob/user) if(user.has_dna()) var/mob/living/carbon/C = user - var/datum/mutation/human/HM = mutations_list[CHAMELEON] + var/datum/mutation/human/HM = GLOB.mutations_list[CHAMELEON] if(HM in C.dna.mutations) HM.force_lose(C) \ No newline at end of file diff --git a/code/game/gamemodes/changeling/powers/digitalcamo.dm b/code/game/gamemodes/changeling/powers/digitalcamo.dm index 13ea947266..afb4e0bef7 100644 --- a/code/game/gamemodes/changeling/powers/digitalcamo.dm +++ b/code/game/gamemodes/changeling/powers/digitalcamo.dm @@ -15,10 +15,7 @@ to_chat(user, "We distort our form to hide from the AI") user.digitalcamo = 1 user.digitalinvis = 1 - - - feedback_add_details("changeling_powers","CAM") - return 1 + return TRUE /obj/effect/proc_holder/changeling/digitalcamo/on_refund(mob/user) user.digitalcamo = 0 diff --git a/code/game/gamemodes/changeling/powers/fakedeath.dm b/code/game/gamemodes/changeling/powers/fakedeath.dm index bdcca566c3..798f8030e0 100644 --- a/code/game/gamemodes/changeling/powers/fakedeath.dm +++ b/code/game/gamemodes/changeling/powers/fakedeath.dm @@ -19,9 +19,7 @@ user.update_canmove() addtimer(CALLBACK(src, .proc/ready_to_regenerate, user), LING_FAKEDEATH_TIME, TIMER_UNIQUE) - - feedback_add_details("changeling_powers","FD") - return 1 + return TRUE /obj/effect/proc_holder/changeling/fakedeath/proc/ready_to_regenerate(mob/user) if(user && user.mind && user.mind.changeling && user.mind.changeling.purchasedpowers) diff --git a/code/game/gamemodes/changeling/powers/fleshmend.dm b/code/game/gamemodes/changeling/powers/fleshmend.dm index bdf1c94bd2..1809e6c8c8 100644 --- a/code/game/gamemodes/changeling/powers/fleshmend.dm +++ b/code/game/gamemodes/changeling/powers/fleshmend.dm @@ -1,11 +1,7 @@ /obj/effect/proc_holder/changeling/fleshmend name = "Fleshmend" - desc = "Our flesh rapidly regenerates, healing our burns, bruises and \ - shortness of breath. Effectiveness decreases with quick, \ - repeated use." - helptext = "Heals a moderate amount of damage over a short period of \ - time. Can be used while unconscious. Does not regrow limbs or \ - restore lost blood." + desc = "Our flesh rapidly regenerates, healing our burns, bruises and shortness of breath. Effectiveness decreases with quick, repeated use." + helptext = "Heals a moderate amount of damage over a short period of time. Can be used while unconscious. Does not regrow limbs or restore lost blood." chemical_cost = 20 dna_cost = 2 req_stat = UNCONSCIOUS @@ -37,9 +33,7 @@ recent_uses++ INVOKE_ASYNC(src, .proc/fleshmend, user) - - feedback_add_details("changeling_powers","RR") - return 1 + return TRUE /obj/effect/proc_holder/changeling/fleshmend/proc/fleshmend(mob/living/user) diff --git a/code/game/gamemodes/changeling/powers/headcrab.dm b/code/game/gamemodes/changeling/powers/headcrab.dm index 5d1bd787ef..a9f6381082 100644 --- a/code/game/gamemodes/changeling/powers/headcrab.dm +++ b/code/game/gamemodes/changeling/powers/headcrab.dm @@ -26,7 +26,6 @@ S.Weaken(3) var/turf = get_turf(user) user.gib() - feedback_add_details("changeling_powers","LR") . = TRUE sleep(5) // So it's not killed in explosion var/mob/living/simple_animal/hostile/headcrab/crab = new(turf) diff --git a/code/game/gamemodes/changeling/powers/hivemind.dm b/code/game/gamemodes/changeling/powers/hivemind.dm index 8c42629441..0a78adaf33 100644 --- a/code/game/gamemodes/changeling/powers/hivemind.dm +++ b/code/game/gamemodes/changeling/powers/hivemind.dm @@ -6,7 +6,7 @@ dna_cost = 0 chemical_cost = -1 -/obj/effect/proc_holder/changeling/hivemind_comms/on_purchase(var/mob/user) +/obj/effect/proc_holder/changeling/hivemind_comms/on_purchase(mob/user, is_respec) ..() var/datum/changeling/changeling=user.mind.changeling changeling.changeling_speak = 1 @@ -17,10 +17,9 @@ var/obj/effect/proc_holder/changeling/hivemind_download/S2 = new if(!changeling.has_sting(S2)) changeling.purchasedpowers+=S2 - return // HIVE MIND UPLOAD/DOWNLOAD DNA -var/list/datum/dna/hivemind_bank = list() +GLOBAL_LIST_EMPTY(hivemind_bank) /obj/effect/proc_holder/changeling/hivemind_upload name = "Hive Channel DNA" @@ -32,7 +31,7 @@ var/list/datum/dna/hivemind_bank = list() var/datum/changeling/changeling = user.mind.changeling var/list/names = list() for(var/datum/changelingprofile/prof in changeling.stored_profiles) - if(!(prof in hivemind_bank)) + if(!(prof in GLOB.hivemind_bank)) names += prof.name if(names.len <= 0) @@ -49,10 +48,9 @@ var/list/datum/dna/hivemind_bank = list() var/datum/changelingprofile/uploaded_dna = new chosen_dna.type chosen_dna.copy_profile(uploaded_dna) - hivemind_bank += uploaded_dna + GLOB.hivemind_bank += uploaded_dna to_chat(user, "We channel the DNA of [chosen_name] to the air.") - feedback_add_details("changeling_powers","HU") - return 1 + return TRUE /obj/effect/proc_holder/changeling/hivemind_download name = "Hive Absorb DNA" @@ -73,7 +71,7 @@ var/list/datum/dna/hivemind_bank = list() /obj/effect/proc_holder/changeling/hivemind_download/sting_action(mob/user) var/datum/changeling/changeling = user.mind.changeling var/list/names = list() - for(var/datum/changelingprofile/prof in hivemind_bank) + for(var/datum/changelingprofile/prof in GLOB.hivemind_bank) if(!(prof in changeling.stored_profiles)) names[prof.name] = prof @@ -92,5 +90,4 @@ var/list/datum/dna/hivemind_bank = list() chosen_prof.copy_profile(downloaded_prof) changeling.add_profile(downloaded_prof) to_chat(user, "We absorb the DNA of [S] from the air.") - feedback_add_details("changeling_powers","HD") - return 1 + return TRUE diff --git a/code/game/gamemodes/changeling/powers/humanform.dm b/code/game/gamemodes/changeling/powers/humanform.dm index 44126fa577..743dbc91e9 100644 --- a/code/game/gamemodes/changeling/powers/humanform.dm +++ b/code/game/gamemodes/changeling/powers/humanform.dm @@ -1,5 +1,5 @@ /obj/effect/proc_holder/changeling/humanform - name = "Human form" + name = "Human Form" desc = "We change into a human." chemical_cost = 5 genetic_damage = 3 @@ -30,5 +30,4 @@ var/newmob = user.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS) changeling_transform(newmob, chosen_prof) - feedback_add_details("changeling_powers","LFT") - return 1 + return TRUE diff --git a/code/game/gamemodes/changeling/powers/lesserform.dm b/code/game/gamemodes/changeling/powers/lesserform.dm index 2d2ae78f26..538803de00 100644 --- a/code/game/gamemodes/changeling/powers/lesserform.dm +++ b/code/game/gamemodes/changeling/powers/lesserform.dm @@ -1,5 +1,5 @@ /obj/effect/proc_holder/changeling/lesserform - name = "Lesser form" + name = "Lesser Form" desc = "We debase ourselves and become lesser. We become a monkey." chemical_cost = 5 dna_cost = 1 @@ -13,6 +13,4 @@ to_chat(user, "Our genes cry out!") user.monkeyize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSE) - - feedback_add_details("changeling_powers","LF") - return 1 \ No newline at end of file + return TRUE \ No newline at end of file diff --git a/code/game/gamemodes/changeling/powers/linglink.dm b/code/game/gamemodes/changeling/powers/linglink.dm index 816f853d45..5a64d551b5 100644 --- a/code/game/gamemodes/changeling/powers/linglink.dm +++ b/code/game/gamemodes/changeling/powers/linglink.dm @@ -48,7 +48,7 @@ if(3) to_chat(user, "We mold the [target]'s mind like clay, granting [target.p_them()] the ability to speak in the hivemind!") to_chat(target, "A migraine throbs behind your eyes, you hear yourself screaming - but your mouth has not opened!") - for(var/mob/M in mob_list) + for(var/mob/M in GLOB.mob_list) if(M.lingcheck() == 2) to_chat(M, "We can sense a foreign presence in the hivemind...") target.mind.linglink = 1 @@ -56,7 +56,7 @@ to_chat(target, "You can now communicate in the changeling hivemind, say \":g message\" to communicate!") target.reagents.add_reagent("salbutamol", 40) // So they don't choke to death while you interrogate them sleep(1800) - feedback_add_details("changeling_powers","A [i]") + feedback_add_details("changeling_powers","Hivemind Link|[i]") if(!do_mob(user, target, 20)) to_chat(user, "Our link with [target] has ended!") changeling.islinking = 0 diff --git a/code/game/gamemodes/changeling/powers/mimic_voice.dm b/code/game/gamemodes/changeling/powers/mimic_voice.dm index f296fb1375..f422be20a9 100644 --- a/code/game/gamemodes/changeling/powers/mimic_voice.dm +++ b/code/game/gamemodes/changeling/powers/mimic_voice.dm @@ -24,5 +24,4 @@ changeling.chem_recharge_slowdown += 0.5 to_chat(user, "We shape our glands to take the voice of [mimic_voice], this will slow down regenerating chemicals while active.") to_chat(user, "Use this power again to return to our original voice and return chemical production to normal levels.") - - feedback_add_details("changeling_powers","MV") + return TRUE diff --git a/code/game/gamemodes/changeling/powers/mutations.dm b/code/game/gamemodes/changeling/powers/mutations.dm index f1d9abc845..57db295d53 100644 --- a/code/game/gamemodes/changeling/powers/mutations.dm +++ b/code/game/gamemodes/changeling/powers/mutations.dm @@ -5,6 +5,7 @@ Space Suit Shield Armor + Tentacles */ @@ -125,7 +126,7 @@ var/datum/changeling/changeling = user.mind.changeling changeling.chem_recharge_slowdown += recharge_slowdown - return 1 + return TRUE //fancy headers yo @@ -228,7 +229,7 @@ desc = "A fleshy tentacle that can stretch out and grab things or people." icon = 'icons/obj/weapons.dmi' icon_state = "tentacle" - item_state = null + item_state = "tentacle" flags = ABSTRACT | NODROP | DROPDEL | NOBLUDGEON w_class = WEIGHT_CLASS_HUGE ammo_type = /obj/item/ammo_casing/magic/tentacle @@ -251,6 +252,11 @@ /obj/item/weapon/gun/magic/tentacle/shoot_with_empty_chamber(mob/living/user as mob|obj) to_chat(user, "The [name] is not ready yet.") +/obj/item/weapon/gun/magic/tentacle/suicide_act(mob/user) + user.visible_message("[user] coils [src] tightly around [user.p_their()] neck! It looks like [user.p_theyre()] trying to commit suicide!") + return (OXYLOSS) + + /obj/item/ammo_casing/magic/tentacle name = "tentacle" desc = "a tentacle." @@ -336,11 +342,11 @@ var/obj/item/I = C.get_active_held_item() if(I) if(C.drop_item()) - C.visible_message("[I] is yanked off of [C]'s hand by [src]!","A tentacle pulls [I] away from you!") + C.visible_message("[I] is yanked off [C]'s hand by [src]!","A tentacle pulls [I] away from you!") on_hit(I) //grab the item as if you had hit it directly with the tentacle return 1 else - to_chat(firer, "You can't seem to pry [I] off of [C]'s hands!") + to_chat(firer, "You can't seem to pry [I] off [C]'s hands!") return 0 else to_chat(firer, "[C] has nothing in hand to disarm!") @@ -389,7 +395,7 @@ var/obj/item/weapon/shield/changeling/S = ..(user) S.remaining_uses = round(changeling.absorbedcount * 3) - return 1 + return TRUE /obj/item/weapon/shield/changeling name = "shield-like mass" diff --git a/code/game/gamemodes/changeling/powers/panacea.dm b/code/game/gamemodes/changeling/powers/panacea.dm index 479c1a6cd5..08d51be262 100644 --- a/code/game/gamemodes/changeling/powers/panacea.dm +++ b/code/game/gamemodes/changeling/powers/panacea.dm @@ -41,5 +41,4 @@ for(var/datum/disease/D in user.viruses) D.cure() - feedback_add_details("changeling_powers","AP") - return 1 + return TRUE diff --git a/code/game/gamemodes/changeling/powers/regenerate.dm b/code/game/gamemodes/changeling/powers/regenerate.dm index aaa21de7db..1f07b46e79 100644 --- a/code/game/gamemodes/changeling/powers/regenerate.dm +++ b/code/game/gamemodes/changeling/powers/regenerate.dm @@ -31,3 +31,4 @@ var/mob/living/carbon/human/H = user H.restore_blood() H.remove_all_embedded_objects() + return TRUE diff --git a/code/game/gamemodes/changeling/powers/revive.dm b/code/game/gamemodes/changeling/powers/revive.dm index 5dfb52c41a..c289334ea0 100644 --- a/code/game/gamemodes/changeling/powers/revive.dm +++ b/code/game/gamemodes/changeling/powers/revive.dm @@ -26,8 +26,7 @@ user.regenerate_organs() to_chat(user, "We have revived ourselves.") user.mind.changeling.purchasedpowers -= src - feedback_add_details("changeling_powers","CR") - return 1 + return TRUE /obj/effect/proc_holder/changeling/revive/can_be_used_by(mob/user) if((user.stat != DEAD) && !(user.status_flags & FAKEDEATH)) diff --git a/code/game/gamemodes/changeling/powers/shriek.dm b/code/game/gamemodes/changeling/powers/shriek.dm index 21d533212e..29be040929 100644 --- a/code/game/gamemodes/changeling/powers/shriek.dm +++ b/code/game/gamemodes/changeling/powers/shriek.dm @@ -24,9 +24,7 @@ for(var/obj/machinery/light/L in range(4, user)) L.on = 1 L.break_light_tube() - - feedback_add_details("changeling_powers","RS") - return 1 + return TRUE /obj/effect/proc_holder/changeling/dissonant_shriek name = "Dissonant Shriek" @@ -40,6 +38,4 @@ L.on = 1 L.break_light_tube() empulse(get_turf(user), 2, 5, 1) - return 1 - - + return TRUE diff --git a/code/game/gamemodes/changeling/powers/spiders.dm b/code/game/gamemodes/changeling/powers/spiders.dm index c06ef9a694..b378f18c47 100644 --- a/code/game/gamemodes/changeling/powers/spiders.dm +++ b/code/game/gamemodes/changeling/powers/spiders.dm @@ -9,5 +9,4 @@ //Makes some spiderlings. Good for setting traps and causing general trouble. /obj/effect/proc_holder/changeling/spiders/sting_action(mob/user) spawn_atom_to_turf(/obj/structure/spider/spiderling/hunter, user, 2, FALSE) - feedback_add_details("changeling_powers","SI") - return 1 + return TRUE diff --git a/code/game/gamemodes/changeling/powers/strained_muscles.dm b/code/game/gamemodes/changeling/powers/strained_muscles.dm index 67cce8ff89..7238e2d1c1 100644 --- a/code/game/gamemodes/changeling/powers/strained_muscles.dm +++ b/code/game/gamemodes/changeling/powers/strained_muscles.dm @@ -23,6 +23,11 @@ user.Weaken(3) user.emote("gasp") + INVOKE_ASYNC(src, .proc/muscle_loop, user) + + return TRUE + +/obj/effect/proc_holder/changeling/strained_muscles/proc/muscle_loop(mob/living/carbon/user) while(active) user.status_flags |= GOTTAGOFAST if(user.stat != CONSCIOUS || user.staminaloss >= 90) @@ -41,10 +46,6 @@ sleep(40) - while(!active) //Damage stacks decrease fairly rapidly while not in sanic mode - if(stacks >= 1) - stacks-- + while(!active && stacks) //Damage stacks decrease fairly rapidly while not in sanic mode + stacks-- sleep(20) - - feedback_add_details("changeling_powers","SANIC") - return 1 diff --git a/code/game/gamemodes/changeling/powers/tiny_prick.dm b/code/game/gamemodes/changeling/powers/tiny_prick.dm index 661550a659..c44a32c24d 100644 --- a/code/game/gamemodes/changeling/powers/tiny_prick.dm +++ b/code/game/gamemodes/changeling/powers/tiny_prick.dm @@ -101,10 +101,9 @@ C.take_bodypart_damage(20, 0) //The process is extremely painful target.visible_message("[target] begins to violenty convulse!","You feel a tiny prick and a begin to uncontrollably convulse!") - feedback_add_details("changeling_powers","TS") . = TRUE + sleep(10) if(istype(C)) - sleep(10) C.real_name = NewDNA.real_name NewDNA.transfer_identity(C, transfer_SE=1) C.updateappearance(mutcolor_update=1) @@ -152,9 +151,7 @@ playsound(target, 'sound/effects/blobattack.ogg', 30, 1) addtimer(CALLBACK(src, .proc/remove_fake, target, blade), 600) - - feedback_add_details("changeling_powers","AS") - return 1 + return TRUE /obj/effect/proc_holder/changeling/sting/false_armblade/proc/remove_fake(mob/target, obj/item/weapon/melee/arm_blade/false/blade) playsound(target, 'sound/effects/blobattack.ogg', 30, 1) @@ -182,8 +179,7 @@ add_logs(user, target, "stung", "extraction sting") if(!(user.mind.changeling.has_dna(target.dna))) user.mind.changeling.add_new_profile(target, user) - feedback_add_details("changeling_powers","ED") - return 1 + return TRUE /obj/effect/proc_holder/changeling/sting/mute name = "Mute Sting" @@ -196,8 +192,7 @@ /obj/effect/proc_holder/changeling/sting/mute/sting_action(mob/user, mob/living/carbon/target) add_logs(user, target, "stung", "mute sting") target.silent += 30 - feedback_add_details("changeling_powers","MS") - return 1 + return TRUE /obj/effect/proc_holder/changeling/sting/blind name = "Blind Sting" @@ -213,8 +208,7 @@ target.become_nearsighted() target.blind_eyes(20) target.blur_eyes(40) - feedback_add_details("changeling_powers","BS") - return 1 + return TRUE /obj/effect/proc_holder/changeling/sting/LSD name = "Hallucination Sting" @@ -227,8 +221,7 @@ /obj/effect/proc_holder/changeling/sting/LSD/sting_action(mob/user, mob/living/carbon/target) add_logs(user, target, "stung", "LSD sting") addtimer(CALLBACK(src, .proc/hallucination_time, target), rand(300,600)) - feedback_add_details("changeling_powers","HS") - return 1 + return TRUE /obj/effect/proc_holder/changeling/sting/LSD/proc/hallucination_time(mob/living/carbon/target) if(target) @@ -246,5 +239,4 @@ add_logs(user, target, "stung", "cryo sting") if(target.reagents) target.reagents.add_reagent("frostoil", 30) - feedback_add_details("changeling_powers","CS") - return 1 + return TRUE diff --git a/code/game/gamemodes/changeling/powers/transform.dm b/code/game/gamemodes/changeling/powers/transform.dm index 9ca698e7e3..f9aca83d04 100644 --- a/code/game/gamemodes/changeling/powers/transform.dm +++ b/code/game/gamemodes/changeling/powers/transform.dm @@ -107,9 +107,7 @@ return changeling_transform(user, chosen_prof) - - feedback_add_details("changeling_powers","TR") - return 1 + return TRUE /datum/changeling/proc/select_dna(var/prompt, var/title, var/mob/living/carbon/user) var/list/names = list("Drop Flesh Disguise") @@ -121,8 +119,8 @@ return if(chosen_name == "Drop Flesh Disguise") - for(var/slot in slots) - if(istype(user.vars[slot], slot2type[slot])) + for(var/slot in GLOB.slots) + if(istype(user.vars[slot], GLOB.slot2type[slot])) qdel(user.vars[slot]) var/datum/changelingprofile/prof = get_dna(chosen_name) diff --git a/code/game/gamemodes/changeling/traitor_chan.dm b/code/game/gamemodes/changeling/traitor_chan.dm index a03f50a7a6..3392f46578 100644 --- a/code/game/gamemodes/changeling/traitor_chan.dm +++ b/code/game/gamemodes/changeling/traitor_chan.dm @@ -58,16 +58,16 @@ changeling.current.make_changeling() forge_changeling_objectives(changeling) greet_changeling(changeling) - ticker.mode.update_changeling_icons_added(changeling) + SSticker.mode.update_changeling_icons_added(changeling) ..() return /datum/game_mode/traitor/changeling/make_antag_chance(mob/living/carbon/human/character) //Assigns changeling to latejoiners - var/changelingcap = min( round(joined_player_list.len/(config.changeling_scaling_coeff*4))+2, round(joined_player_list.len/(config.changeling_scaling_coeff*2)) ) - if(ticker.mode.changelings.len >= changelingcap) //Caps number of latejoin antagonists + var/changelingcap = min( round(GLOB.joined_player_list.len/(config.changeling_scaling_coeff*4))+2, round(GLOB.joined_player_list.len/(config.changeling_scaling_coeff*2)) ) + if(SSticker.mode.changelings.len >= changelingcap) //Caps number of latejoin antagonists ..() return - if(ticker.mode.changelings.len <= (changelingcap - 2) || prob(100 / (config.changeling_scaling_coeff * 4))) + if(SSticker.mode.changelings.len <= (changelingcap - 2) || prob(100 / (config.changeling_scaling_coeff * 4))) if(ROLE_CHANGELING in character.client.prefs.be_special) if(!jobban_isbanned(character, ROLE_CHANGELING) && !jobban_isbanned(character, "Syndicate")) if(age_check(character.client)) diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm index 78e940d7b8..670e08e7a2 100644 --- a/code/game/gamemodes/clock_cult/clock_cult.dm +++ b/code/game/gamemodes/clock_cult/clock_cult.dm @@ -84,7 +84,6 @@ Credit where due: /datum/game_mode var/list/servants_of_ratvar = list() //The Enlightened servants of Ratvar - var/clockwork_objective = CLOCKCULT_GATEWAY //The objective that the servants must fulfill var/clockwork_explanation = "Construct a Gateway to the Celestial Derelict and free Ratvar." //The description of the current objective /datum/game_mode/clockwork_cult @@ -126,7 +125,6 @@ Credit where due: return 1 /datum/game_mode/clockwork_cult/post_setup() - forge_clock_objectives() for(var/S in servants_to_serve) var/datum/mind/servant = S log_game("[servant.key] was made an initial servant of Ratvar") @@ -137,16 +135,6 @@ Credit where due: ..() return 1 -/datum/game_mode/clockwork_cult/proc/forge_clock_objectives() //Determine what objective that Ratvar's servants will fulfill - var/list/possible_objectives = list(CLOCKCULT_ESCAPE, CLOCKCULT_GATEWAY) - clockwork_objective = pick(possible_objectives) - switch(clockwork_objective) - if(CLOCKCULT_ESCAPE) - clockwork_explanation = "Construct a Gateway to the Celestial Derelict and proselytize the entire station." - if(CLOCKCULT_GATEWAY) - clockwork_explanation = "Construct a Gateway to the Celestial Derelict and free Ratvar." - return 1 - /datum/game_mode/clockwork_cult/proc/greet_servant(mob/M) //Description of their role if(!M) return 0 @@ -182,21 +170,18 @@ Credit where due: if(!L || !istype(L) || !L.mind) return 0 var/datum/mind/M = L.mind - to_chat(M.current, "This is Ratvar's will: [clockwork_explanation]") - M.memory += "Ratvar's will: [clockwork_explanation]
" + to_chat(M.current, "This is Ratvar's will: [CLOCKCULT_OBJECTIVE]") + M.memory += "Ratvar's will: [CLOCKCULT_OBJECTIVE]
" return 1 /datum/game_mode/clockwork_cult/proc/check_clockwork_victory() - switch(clockwork_objective) - if(CLOCKCULT_ESCAPE) - if(clockwork_gateway_activated) - ticker.news_report = CLOCK_PROSELYTIZATION - return TRUE - if(CLOCKCULT_GATEWAY) - if(ratvar_awakens) - ticker.news_report = CLOCK_SUMMON - return TRUE - ticker.news_report = CULT_FAILURE + if(GLOB.clockwork_gateway_activated) + SSticker.news_report = CLOCK_PROSELYTIZATION //failure, technically, but we have the station + if(GLOB.ratvar_awakens) + SSticker.news_report = CLOCK_SUMMON + return TRUE + else + SSticker.news_report = CULT_FAILURE return FALSE /datum/game_mode/clockwork_cult/declare_completion() @@ -205,26 +190,26 @@ Credit where due: /datum/game_mode/proc/auto_declare_completion_clockwork_cult() var/text = "" - if(istype(ticker.mode, /datum/game_mode/clockwork_cult)) //Possibly hacky? - var/datum/game_mode/clockwork_cult/C = ticker.mode + if(istype(SSticker.mode, /datum/game_mode/clockwork_cult)) //Possibly hacky? + var/datum/game_mode/clockwork_cult/C = SSticker.mode if(C.check_clockwork_victory()) text += "Ratvar's servants have succeeded in fulfilling His goals!" - feedback_set_details("round_end_result", "win - servants completed their objective ([clockwork_objective])") + feedback_set_details("round_end_result", "win - servants completed their objective (summon ratvar)") else var/half_victory = FALSE - var/obj/structure/destructible/clockwork/massive/celestial_gateway/G = locate() in all_clockwork_objects + var/obj/structure/destructible/clockwork/massive/celestial_gateway/G = locate() in GLOB.all_clockwork_objects if(G) half_victory = TRUE if(half_victory) - text += "The crew escaped before [clockwork_objective == CLOCKCULT_GATEWAY ? "Ratvar could rise":"the station could be proselytized"], but the gateway \ + text += "The crew escaped before Ratvar could rise, but the gateway \ was successfully constructed!" - feedback_set_details("round_end_result", "halfwin - servants constructed the gateway but their objective was not completed ([clockwork_objective])") + feedback_set_details("round_end_result", "halfwin - servants constructed the gateway but their objective was not completed (summon ratvar)") else text += "Ratvar's servants have failed!" - feedback_set_details("round_end_result", "loss - servants failed their objective ([clockwork_objective])") - text += "
The servants' objective was:
[clockwork_explanation]" - text += "
Ratvar's servants had [clockwork_caches] Tinkerer's Caches." - text += "
Construction Value(CV) was: [clockwork_construction_value]" + feedback_set_details("round_end_result", "loss - servants failed their objective (summon ratvar)") + text += "
The servants' objective was:
[CLOCKCULT_OBJECTIVE]" + text += "
Ratvar's servants had [GLOB.clockwork_caches] Tinkerer's Caches." + text += "
Construction Value(CV) was: [GLOB.clockwork_construction_value]" var/list/scripture_states = scripture_unlock_check() for(var/i in scripture_states) if(i != SCRIPTURE_DRIVER) @@ -236,11 +221,11 @@ Credit where due: to_chat(world, text) /datum/game_mode/proc/update_servant_icons_added(datum/mind/M) - var/datum/atom_hud/antag/A = huds[ANTAG_HUD_CLOCKWORK] + var/datum/atom_hud/antag/A = GLOB.huds[ANTAG_HUD_CLOCKWORK] A.join_hud(M.current) set_antag_hud(M.current, "clockwork") /datum/game_mode/proc/update_servant_icons_removed(datum/mind/M) - var/datum/atom_hud/antag/A = huds[ANTAG_HUD_CLOCKWORK] + var/datum/atom_hud/antag/A = GLOB.huds[ANTAG_HUD_CLOCKWORK] A.leave_hud(M.current) set_antag_hud(M.current, null) diff --git a/code/game/gamemodes/clock_cult/clock_effect.dm b/code/game/gamemodes/clock_cult/clock_effect.dm index 69e973b4eb..c04f6b8979 100644 --- a/code/game/gamemodes/clock_cult/clock_effect.dm +++ b/code/game/gamemodes/clock_cult/clock_effect.dm @@ -12,10 +12,10 @@ /obj/effect/clockwork/New() ..() - all_clockwork_objects += src + GLOB.all_clockwork_objects += src /obj/effect/clockwork/Destroy() - all_clockwork_objects -= src + GLOB.all_clockwork_objects -= src return ..() /obj/effect/clockwork/examine(mob/user) diff --git a/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm b/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm index 081ca1f6cb..6c56295c05 100644 --- a/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm +++ b/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm @@ -128,7 +128,7 @@ var/mob/living/carbon/C = L C.silent += 5 var/message = "[sigil_name] in [get_area(src)] [is_servant_of_ratvar(L) ? "successfully converted" : "failed to convert"]" - for(var/M in mob_list) + for(var/M in GLOB.mob_list) if(isobserver(M)) var/link = FOLLOW_LINK(M, L) to_chat(M, "[link] [message] [L.real_name]!") @@ -198,7 +198,7 @@ var/structure_number = 0 for(var/obj/structure/destructible/clockwork/powered/P in range(SIGIL_ACCESS_RANGE, src)) structure_number++ - to_chat(user, "It is storing [ratvar_awakens ? "INFINITY":"[power_charge]"]W of power, \ + to_chat(user, "It is storing [GLOB.ratvar_awakens ? "INFINITY":"[power_charge]"]W of power, \ and [structure_number] Clockwork Structure[structure_number == 1 ? "":"s"] [structure_number == 1 ? "is":"are"] in range.") if(iscyborg(user)) to_chat(user, "You can recharge from the [sigil_name] by crossing it.") @@ -248,7 +248,7 @@ update_glow() /obj/effect/clockwork/sigil/transmission/proc/modify_charge(amount) - if(ratvar_awakens) + if(GLOB.ratvar_awakens) update_glow() return TRUE if(power_charge - amount < 0) @@ -258,7 +258,7 @@ return TRUE /obj/effect/clockwork/sigil/transmission/proc/update_glow() - if(ratvar_awakens) + if(GLOB.ratvar_awakens) alpha = 255 else alpha = min(initial(alpha) + power_charge*0.02, 255) @@ -289,8 +289,8 @@ /obj/effect/clockwork/sigil/vitality/examine(mob/user) ..() if(is_servant_of_ratvar(user) || isobserver(user)) - to_chat(user, "It has access to [ratvar_awakens ? "INFINITE":"[vitality]"] units of vitality.") - if(ratvar_awakens) + to_chat(user, "It has access to [GLOB.ratvar_awakens ? "INFINITE":"[vitality]"] units of vitality.") + if(GLOB.ratvar_awakens) to_chat(user, "It can revive Servants at no cost!") else to_chat(user, "It can revive Servants at a cost of [base_revive_cost] vitality plus vitality equal to the non-oxygen damage they have, in addition to being destroyed in the process.") @@ -303,7 +303,7 @@ addtimer(CALLBACK(src, .proc/update_alpha), 10) sleep(10) //as long as they're still on the sigil and are either not a servant or they're a servant AND it has remaining vitality - while(L && (!is_servant_of_ratvar(L) || (is_servant_of_ratvar(L) && (ratvar_awakens || vitality))) && get_turf(L) == get_turf(src)) + while(L && (!is_servant_of_ratvar(L) || (is_servant_of_ratvar(L) && (GLOB.ratvar_awakens || vitality))) && get_turf(L) == get_turf(src)) sigil_active = TRUE if(animation_number >= 4) new /obj/effect/overlay/temp/ratvar/sigil/vitality(get_turf(src)) @@ -323,7 +323,7 @@ qdel(W) L.dust() else - if(!ratvar_awakens && L.stat == CONSCIOUS) + if(!GLOB.ratvar_awakens && L.stat == CONSCIOUS) vitality_drained = L.adjustToxLoss(1) else vitality_drained = L.adjustToxLoss(1.5) @@ -334,7 +334,7 @@ else if(L.stat == DEAD) var/revival_cost = base_revive_cost + L.getCloneLoss() + L.getToxLoss() + L.getFireLoss() + L.getBruteLoss() //ignores oxygen damage - if(ratvar_awakens) + if(GLOB.ratvar_awakens) revival_cost = 0 var/mob/dead/observer/ghost = L.get_ghost(TRUE) if(vitality >= revival_cost && (ghost || (L.mind && L.mind.active))) @@ -344,14 +344,14 @@ var/obj/effect/overlay/temp/ratvar/sigil/vitality/V = new /obj/effect/overlay/temp/ratvar/sigil/vitality(get_turf(src)) animate(V, alpha = 0, transform = matrix()*2, time = 8) playsound(L, 'sound/magic/Staff_Healing.ogg', 50, 1) - L.visible_message("[L] suddenly gets back up, [ratvar_awakens ? "[L.p_their()] body dripping blue ichor":"even as [src] scatters into blue sparks around [L.p_them()]"]!", \ + L.visible_message("[L] suddenly gets back up, [GLOB.ratvar_awakens ? "[L.p_their()] body dripping blue ichor":"even as [src] scatters into blue sparks around [L.p_them()]"]!", \ "\"[text2ratvar("You will be okay, child.")]\"") vitality -= revival_cost - if(!ratvar_awakens) + if(!GLOB.ratvar_awakens) qdel(src) break var/vitality_for_cycle = 3 - if(!ratvar_awakens) + if(!GLOB.ratvar_awakens) if(L.stat == CONSCIOUS) vitality_for_cycle = 2 vitality_for_cycle = min(vitality, vitality_for_cycle) @@ -360,7 +360,7 @@ if(!vitality_used) break - if(!ratvar_awakens) + if(!GLOB.ratvar_awakens) vitality -= vitality_used sleep(2) diff --git a/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm b/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm index 26575d881e..f376410124 100644 --- a/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm +++ b/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm @@ -112,7 +112,7 @@ /obj/effect/clockwork/spatial_gateway/Bumped(atom/A) ..() - if(isliving(A) || istype(A, /obj/item)) + if(A && !QDELETED(A)) pass_through_gateway(A) /obj/effect/clockwork/spatial_gateway/proc/pass_through_gateway(atom/movable/A, no_cost) @@ -151,13 +151,13 @@ var/list/possible_targets = list() var/list/teleportnames = list() - for(var/obj/structure/destructible/clockwork/powered/clockwork_obelisk/O in all_clockwork_objects) + for(var/obj/structure/destructible/clockwork/powered/clockwork_obelisk/O in GLOB.all_clockwork_objects) if(!O.Adjacent(invoker) && O != src && (O.z <= ZLEVEL_SPACEMAX) && O.anchored) //don't list obelisks that we're next to var/area/A = get_area(O) var/locname = initial(A.name) possible_targets[avoid_assoc_duplicate_keys("[locname] [O.name]", teleportnames)] = O - for(var/mob/living/L in living_mob_list) + for(var/mob/living/L in GLOB.living_mob_list) if(!L.stat && is_servant_of_ratvar(L) && !L.Adjacent(invoker) && (L.z <= ZLEVEL_SPACEMAX)) //People right next to the invoker can't be portaled to, for obvious reasons possible_targets[avoid_assoc_duplicate_keys("[L.name] ([L.real_name])", teleportnames)] = L diff --git a/code/game/gamemodes/clock_cult/clock_helpers/component_helpers.dm b/code/game/gamemodes/clock_cult/clock_helpers/component_helpers.dm index e04edc42c3..e3c456460c 100644 --- a/code/game/gamemodes/clock_cult/clock_helpers/component_helpers.dm +++ b/code/game/gamemodes/clock_cult/clock_helpers/component_helpers.dm @@ -2,7 +2,7 @@ /proc/generate_cache_component(specific_component_id, atom/A) if(!specific_component_id) specific_component_id = get_weighted_component_id() - clockwork_component_cache[specific_component_id]++ + GLOB.clockwork_component_cache[specific_component_id]++ if(A) var/component_animation_type = get_component_animation_type(specific_component_id) new component_animation_type(get_turf(A)) @@ -13,15 +13,15 @@ /proc/get_weighted_component_id(obj/item/clockwork/slab/storage_slab) . = list() if(storage_slab) - if(clockwork_caches) - for(var/i in clockwork_component_cache) - .[i] = max(MAX_COMPONENTS_BEFORE_RAND - LOWER_PROB_PER_COMPONENT*(clockwork_component_cache[i] + storage_slab.stored_components[i]), 1) + if(GLOB.clockwork_caches) + for(var/i in GLOB.clockwork_component_cache) + .[i] = max(MAX_COMPONENTS_BEFORE_RAND - LOWER_PROB_PER_COMPONENT*(GLOB.clockwork_component_cache[i] + storage_slab.stored_components[i]), 1) else - for(var/i in clockwork_component_cache) + for(var/i in GLOB.clockwork_component_cache) .[i] = max(MAX_COMPONENTS_BEFORE_RAND - LOWER_PROB_PER_COMPONENT*storage_slab.stored_components[i], 1) else - for(var/i in clockwork_component_cache) - .[i] = max(MAX_COMPONENTS_BEFORE_RAND - LOWER_PROB_PER_COMPONENT*clockwork_component_cache[i], 1) + for(var/i in GLOB.clockwork_component_cache) + .[i] = max(MAX_COMPONENTS_BEFORE_RAND - LOWER_PROB_PER_COMPONENT*GLOB.clockwork_component_cache[i], 1) . = pickweight(.) //returns a component name from a component id @@ -37,8 +37,6 @@ return "Replicant Alloy" if(HIEROPHANT_ANSIBLE) return "Hierophant Ansible" - else - return null //returns a component acronym from a component id /proc/get_component_acronym(id) @@ -53,8 +51,6 @@ return "RA" if(HIEROPHANT_ANSIBLE) return "HA" - else - return null //returns a component id from a component name /proc/get_component_id(name) @@ -69,8 +65,6 @@ return REPLICANT_ALLOY if("Hierophant Ansible") return HIEROPHANT_ANSIBLE - else - return null //returns a component spanclass from a component id /proc/get_component_span(id) @@ -127,8 +121,6 @@ return /obj/effect/overlay/temp/ratvar/component/alloy if(HIEROPHANT_ANSIBLE) return /obj/effect/overlay/temp/ratvar/component/ansible - else - return null //returns a type for a component from a component id /proc/get_component_type(id) @@ -142,6 +134,4 @@ if(REPLICANT_ALLOY) return /obj/item/clockwork/component/replicant_alloy if(HIEROPHANT_ANSIBLE) - return /obj/item/clockwork/component/hierophant_ansible - else - return null \ No newline at end of file + return /obj/item/clockwork/component/hierophant_ansible \ No newline at end of file diff --git a/code/game/gamemodes/clock_cult/clock_helpers/hierophant_network.dm b/code/game/gamemodes/clock_cult/clock_helpers/hierophant_network.dm index 47b8178dff..29f2363e40 100644 --- a/code/game/gamemodes/clock_cult/clock_helpers/hierophant_network.dm +++ b/code/game/gamemodes/clock_cult/clock_helpers/hierophant_network.dm @@ -2,7 +2,7 @@ /proc/hierophant_message(message, servantsonly, atom/target) if(!message) return FALSE - for(var/M in mob_list) + for(var/M in GLOB.mob_list) if(!servantsonly && isobserver(M)) if(target) var/link = FOLLOW_LINK(M, target) diff --git a/code/game/gamemodes/clock_cult/clock_helpers/ratvarian_language.dm b/code/game/gamemodes/clock_cult/clock_helpers/ratvarian_language.dm index 3ca0a042b5..fcb30a096d 100644 --- a/code/game/gamemodes/clock_cult/clock_helpers/ratvarian_language.dm +++ b/code/game/gamemodes/clock_cult/clock_helpers/ratvarian_language.dm @@ -101,14 +101,11 @@ List of nuances: /proc/clockwork_say(atom/movable/AM, message, whisper=FALSE) var/list/spans = list(SPAN_ROBOT) - var/old_languages_spoken = AM.languages_spoken - AM.languages_spoken = HUMAN //anyone who can understand HUMAN will hear weird shitty ratvar speak, otherwise it'll get starred out if(isliving(AM)) var/mob/living/L = AM if(!whisper) - L.say(message, "clock", spans) + L.say(message, "clock", spans, language=/datum/language/common) else L.whisper(message) else - AM.say(message) - AM.languages_spoken = old_languages_spoken + AM.say(message, language=/datum/language/common) diff --git a/code/game/gamemodes/clock_cult/clock_helpers/scripture_checks.dm b/code/game/gamemodes/clock_cult/clock_helpers/scripture_checks.dm index 348901e1f0..e5d193d74a 100644 --- a/code/game/gamemodes/clock_cult/clock_helpers/scripture_checks.dm +++ b/code/game/gamemodes/clock_cult/clock_helpers/scripture_checks.dm @@ -2,18 +2,18 @@ /proc/scripture_unlock_check() var/servants = 0 var/unconverted_ai_exists = get_unconverted_ais() - for(var/mob/living/M in living_mob_list) + for(var/mob/living/M in GLOB.living_mob_list) if(is_servant_of_ratvar(M) && (ishuman(M) || issilicon(M))) servants++ . = list(SCRIPTURE_DRIVER = TRUE, SCRIPTURE_SCRIPT = FALSE, SCRIPTURE_APPLICATION = FALSE, SCRIPTURE_REVENANT = FALSE, SCRIPTURE_JUDGEMENT = FALSE) //Drivers: always unlocked - .[SCRIPTURE_SCRIPT] = (servants >= SCRIPT_SERVANT_REQ && clockwork_caches >= SCRIPT_CACHE_REQ) + .[SCRIPTURE_SCRIPT] = (servants >= SCRIPT_SERVANT_REQ && GLOB.clockwork_caches >= SCRIPT_CACHE_REQ) //Script: SCRIPT_SERVANT_REQ or more non-brain servants and SCRIPT_CACHE_REQ or more clockwork caches - .[SCRIPTURE_APPLICATION] = (servants >= APPLICATION_SERVANT_REQ && clockwork_caches >= APPLICATION_CACHE_REQ && clockwork_construction_value >= APPLICATION_CV_REQ) + .[SCRIPTURE_APPLICATION] = (servants >= APPLICATION_SERVANT_REQ && GLOB.clockwork_caches >= APPLICATION_CACHE_REQ && GLOB.clockwork_construction_value >= APPLICATION_CV_REQ) //Application: APPLICATION_SERVANT_REQ or more non-brain servants, APPLICATION_CACHE_REQ or more clockwork caches, and at least APPLICATION_CV_REQ CV - .[SCRIPTURE_REVENANT] = (servants >= REVENANT_SERVANT_REQ && clockwork_caches >= REVENANT_CACHE_REQ && clockwork_construction_value >= REVENANT_CV_REQ) + .[SCRIPTURE_REVENANT] = (servants >= REVENANT_SERVANT_REQ && GLOB.clockwork_caches >= REVENANT_CACHE_REQ && GLOB.clockwork_construction_value >= REVENANT_CV_REQ) //Revenant: REVENANT_SERVANT_REQ or more non-brain servants, REVENANT_CACHE_REQ or more clockwork caches, and at least REVENANT_CV_REQ CV - .[SCRIPTURE_JUDGEMENT] = (servants >= JUDGEMENT_SERVANT_REQ && clockwork_caches >= JUDGEMENT_CACHE_REQ && clockwork_construction_value >= JUDGEMENT_CV_REQ && !unconverted_ai_exists) + .[SCRIPTURE_JUDGEMENT] = (servants >= JUDGEMENT_SERVANT_REQ && GLOB.clockwork_caches >= JUDGEMENT_CACHE_REQ && GLOB.clockwork_construction_value >= JUDGEMENT_CV_REQ && !unconverted_ai_exists) //Judgement: JUDGEMENT_SERVANT_REQ or more non-brain servants, JUDGEMENT_CACHE_REQ or more clockwork caches, at least JUDGEMENT_CV_REQ CV, and there are no living, non-servant ais //reports to servants when scripture is locked or unlocked @@ -26,33 +26,36 @@ /proc/get_unconverted_ais() . = 0 - for(var/ai in ai_list) - var/mob/living/silicon/AI = ai - if(is_servant_of_ratvar(AI) || !isturf(AI.loc) || AI.z != ZLEVEL_STATION) + for(var/ai in GLOB.ai_list) + var/mob/living/silicon/ai/AI = ai + if(AI.deployed_shell && is_servant_of_ratvar(AI.deployed_shell)) + continue + if(is_servant_of_ratvar(AI) || !isturf(AI.loc) || AI.z != ZLEVEL_STATION || AI.stat == DEAD) continue .++ /proc/update_slab_info(obj/item/clockwork/slab/set_slab) generate_all_scripture() var/needs_update = FALSE //if everything needs an update, for whatever reason - for(var/s in all_scripture) - var/datum/clockwork_scripture/S = all_scripture[s] + for(var/s in GLOB.all_scripture) + var/datum/clockwork_scripture/S = GLOB.all_scripture[s] if(S.creation_update()) needs_update = TRUE if(!set_slab || needs_update) - for(var/obj/item/clockwork/slab/S in all_clockwork_objects) + for(var/obj/item/clockwork/slab/S in GLOB.all_clockwork_objects) SStgui.update_uis(S) - S.update_quickbind() + if(needs_update) + S.update_quickbind() else SStgui.update_uis(set_slab) set_slab.update_quickbind() /proc/generate_all_scripture() - if(!all_scripture.len) + if(!GLOB.all_scripture.len) for(var/V in sortList(subtypesof(/datum/clockwork_scripture), /proc/cmp_clockscripture_priority)) var/datum/clockwork_scripture/S = new V - all_scripture[S.type] = S + GLOB.all_scripture[S.type] = S //changes construction value /proc/change_construction_value(amount) - clockwork_construction_value += amount + GLOB.clockwork_construction_value += amount diff --git a/code/game/gamemodes/clock_cult/clock_item.dm b/code/game/gamemodes/clock_cult/clock_item.dm index 66500d4ee5..a785f8121c 100644 --- a/code/game/gamemodes/clock_cult/clock_item.dm +++ b/code/game/gamemodes/clock_cult/clock_item.dm @@ -11,10 +11,10 @@ /obj/item/clockwork/New() ..() ratvar_act() - all_clockwork_objects += src + GLOB.all_clockwork_objects += src /obj/item/clockwork/Destroy() - all_clockwork_objects -= src + GLOB.all_clockwork_objects -= src return ..() /obj/item/clockwork/examine(mob/user) diff --git a/code/game/gamemodes/clock_cult/clock_items/clockwork_armor.dm b/code/game/gamemodes/clock_cult/clock_items/clockwork_armor.dm index ba9e86864c..bde1f4b4d4 100644 --- a/code/game/gamemodes/clock_cult/clock_items/clockwork_armor.dm +++ b/code/game/gamemodes/clock_cult/clock_items/clockwork_armor.dm @@ -11,14 +11,14 @@ /obj/item/clothing/head/helmet/clockwork/New() ..() ratvar_act() - all_clockwork_objects += src + GLOB.all_clockwork_objects += src /obj/item/clothing/head/helmet/clockwork/Destroy() - all_clockwork_objects -= src + GLOB.all_clockwork_objects -= src return ..() /obj/item/clothing/head/helmet/clockwork/ratvar_act() - if(ratvar_awakens) + if(GLOB.ratvar_awakens) armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100) flags |= STOPSPRESSUREDMAGE max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT @@ -67,14 +67,14 @@ /obj/item/clothing/suit/armor/clockwork/New() ..() ratvar_act() - all_clockwork_objects += src + GLOB.all_clockwork_objects += src /obj/item/clothing/suit/armor/clockwork/Destroy() - all_clockwork_objects -= src + GLOB.all_clockwork_objects -= src return ..() /obj/item/clothing/suit/armor/clockwork/ratvar_act() - if(ratvar_awakens) + if(GLOB.ratvar_awakens) armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100) flags |= STOPSPRESSUREDMAGE max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT @@ -128,14 +128,14 @@ /obj/item/clothing/gloves/clockwork/New() ..() ratvar_act() - all_clockwork_objects += src + GLOB.all_clockwork_objects += src /obj/item/clothing/gloves/clockwork/Destroy() - all_clockwork_objects -= src + GLOB.all_clockwork_objects -= src return ..() /obj/item/clothing/gloves/clockwork/ratvar_act() - if(ratvar_awakens) + if(GLOB.ratvar_awakens) armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100) flags |= STOPSPRESSUREDMAGE max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT @@ -181,17 +181,17 @@ /obj/item/clothing/shoes/clockwork/New() ..() ratvar_act() - all_clockwork_objects += src + GLOB.all_clockwork_objects += src /obj/item/clothing/shoes/clockwork/Destroy() - all_clockwork_objects -= src + GLOB.all_clockwork_objects -= src return ..() /obj/item/clothing/shoes/clockwork/negates_gravity() return TRUE /obj/item/clothing/shoes/clockwork/ratvar_act() - if(ratvar_awakens) + if(GLOB.ratvar_awakens) flags |= NOSLIP else flags &= NOSLIP diff --git a/code/game/gamemodes/clock_cult/clock_items/clockwork_proselytizer.dm b/code/game/gamemodes/clock_cult/clock_items/clockwork_proselytizer.dm index d988c68ba7..513f0d5cbd 100644 --- a/code/game/gamemodes/clock_cult/clock_items/clockwork_proselytizer.dm +++ b/code/game/gamemodes/clock_cult/clock_items/clockwork_proselytizer.dm @@ -113,11 +113,11 @@ charge_delay = 2 /obj/item/clockwork/clockwork_proselytizer/ratvar_act() - if(nezbere_invoked) + if(GLOB.nezbere_invoked) charge_rate = 1250 else charge_rate = initial(charge_rate) - if(ratvar_awakens) + if(GLOB.ratvar_awakens) uses_power = FALSE speed_multiplier = initial(speed_multiplier) * 0.25 else @@ -165,7 +165,7 @@ /obj/item/clockwork/clockwork_proselytizer/proc/can_use_power(amount) if(amount == RATVAR_POWER_CHECK) - if(ratvar_awakens || !uses_power) + if(GLOB.ratvar_awakens || !uses_power) return TRUE else return FALSE diff --git a/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm b/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm index 3d0925a000..001a0822d9 100644 --- a/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm +++ b/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm @@ -21,6 +21,7 @@ var/obj/effect/proc_holder/slab/slab_ability //the slab's current bound ability, for certain scripture var/list/quickbound = list(/datum/clockwork_scripture/ranged_ability/geis_prep, /datum/clockwork_scripture/create_object/replicant, \ /datum/clockwork_scripture/create_object/tinkerers_cache) //quickbound scripture, accessed by index + var/maximum_quickbound = 5 //how many quickbound scriptures we can have actions_types = list(/datum/action/item_action/clock/hierophant) /obj/item/clockwork/slab/starter @@ -51,6 +52,7 @@ nonhuman_usable = TRUE quickbound = list(/datum/clockwork_scripture/ranged_ability/judicial_marker, /datum/clockwork_scripture/ranged_ability/linked_vanguard, \ /datum/clockwork_scripture/create_object/tinkerers_cache) + maximum_quickbound = 6 //we usually have one or two unique scriptures, so if ratvar is up let us bind one more actions_types = list() /obj/item/clockwork/slab/cyborg/engineer //five scriptures, plus a proselytizer @@ -81,7 +83,15 @@ quickbound = list(/datum/clockwork_scripture/ranged_ability/linked_vanguard, /datum/clockwork_scripture/spatial_gateway, /datum/clockwork_scripture/channeled/volt_void/cyborg) /obj/item/clockwork/slab/cyborg/access_display(mob/living/user) - to_chat(user, "Use the action buttons to recite your limited set of scripture!") + if(!GLOB.ratvar_awakens) + to_chat(user, "Use the action buttons to recite your limited set of scripture!") + else + ..() + +/obj/item/clockwork/slab/cyborg/ratvar_act() + ..() + if(!GLOB.ratvar_awakens) + SStgui.close_uis(src) /obj/item/clockwork/slab/New() ..() @@ -97,7 +107,7 @@ return ..() /obj/item/clockwork/slab/ratvar_act() - if(ratvar_awakens) + if(GLOB.ratvar_awakens) nonhuman_usable = TRUE else nonhuman_usable = initial(nonhuman_usable) @@ -119,7 +129,7 @@ return var/servants = 0 var/production_slowdown = 0 - for(var/mob/living/M in living_mob_list) + for(var/mob/living/M in GLOB.living_mob_list) if(is_servant_of_ratvar(M) && (ishuman(M) || issilicon(M))) servants++ if(servants > SCRIPT_SERVANT_REQ) @@ -149,11 +159,11 @@ continue var/datum/clockwork_scripture/quickbind_slot = quickbound[i] to_chat(user, "Quickbind button: [initial(quickbind_slot.name)].") - if(clockwork_caches) //show components on examine + if(GLOB.clockwork_caches) //show components on examine to_chat(user, "Stored components (with global cache):") for(var/i in stored_components) to_chat(user, "[get_component_name(i)][i != REPLICANT_ALLOY ? "s":""]: [stored_components[i]] \ - ([stored_components[i] + clockwork_component_cache[i]])") + ([stored_components[i] + GLOB.clockwork_component_cache[i]])") else to_chat(user, "Stored components:") for(var/i in stored_components) @@ -195,9 +205,9 @@ if(!C.component_id) return 0 user.visible_message("[user] inserts [C] into [src].", "You insert [C] into [src]\ - [clockwork_caches ? ", where it is added to the global cache":""].") - if(clockwork_caches) - clockwork_component_cache[C.component_id]++ + [GLOB.clockwork_caches ? ", where it is added to the global cache":""].
") + if(GLOB.clockwork_caches) + GLOB.clockwork_component_cache[C.component_id]++ update_slab_info() else stored_components[C.component_id]++ @@ -207,11 +217,15 @@ return 1 else if(istype(I, /obj/item/clockwork/slab) && ratvarian) var/obj/item/clockwork/slab/S = I + var/needs_update = FALSE for(var/i in stored_components) stored_components[i] += S.stored_components[i] S.stored_components[i] = 0 - update_slab_info(src) - update_slab_info(S) + if(S.stored_components[i]) + needs_update = TRUE + if(needs_update) + update_slab_info(src) + update_slab_info(S) user.visible_message("[user] empties [src] into [S].", "You transfer your slab's components into [S].") else return ..() @@ -265,7 +279,7 @@ ui_interact(user) return TRUE -/obj/item/clockwork/slab/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = inventory_state) +/obj/item/clockwork/slab/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "clockwork_slab", name, 800, 420, master_ui, state) @@ -282,7 +296,7 @@ var/initial_tier = initial(scripture.tier) if(initial_tier != SCRIPTURE_PERIPHERAL) var/list/tiers_of_scripture = scripture_unlock_check() - if(!ratvar_awakens && !no_cost && !tiers_of_scripture[initial_tier]) + if(!GLOB.ratvar_awakens && !no_cost && !tiers_of_scripture[initial_tier]) to_chat(user, "That scripture is not unlocked, and cannot be recited!") return FALSE var/datum/clockwork_scripture/scripture_to_recite = new scripture @@ -294,7 +308,7 @@ //Guide to Serving Ratvar /obj/item/clockwork/slab/proc/recollection() var/list/textlist = list("If you're seeing this, file a bug report.") - if(ratvar_awakens) + if(GLOB.ratvar_awakens) textlist = list("") for(var/i in 1 to 100) textlist += "HONOR RATVAR " @@ -302,7 +316,7 @@ else var/servants = 0 var/production_time = SLAB_PRODUCTION_TIME - for(var/mob/living/M in living_mob_list) + for(var/mob/living/M in GLOB.living_mob_list) if(is_servant_of_ratvar(M) && (ishuman(M) || issilicon(M))) servants++ if(servants > SCRIPT_SERVANT_REQ) @@ -358,11 +372,12 @@ The remaining functions are several buttons in the top left while holding the slab.
From left to right, they are:
\ Hierophant Network, which allows communication to other Servants.
") if(LAZYLEN(quickbound)) - for(var/i in 1 to quickbound.len) - if(!quickbound[i]) - continue - var/datum/clockwork_scripture/quickbind_slot = quickbound[i] - textlist += "A Quickbind slot, currently set to [initial(quickbind_slot.name)].
" + for(var/i in 1 to maximum_quickbound) + if(LAZYLEN(quickbound) < i || !quickbound[i]) + textlist += "A Quickbind slot, currently set to Nothing.
" + else + var/datum/clockwork_scripture/quickbind_slot = quickbound[i] + textlist += "A Quickbind slot, currently set to [initial(quickbind_slot.name)].
" textlist += "
\ Examine the slab or swap to Recital to check the number of components it has available.

\ \ @@ -379,9 +394,9 @@ temp_data += " " else temp_data += " (" - if(clockwork_caches) //if we have caches, display what's in the global cache - for(var/i in clockwork_component_cache) - temp_data += "[get_component_acronym(i)] [data["components"][i] + clockwork_component_cache[i]]" + if(GLOB.clockwork_caches) //if we have caches, display what's in the global cache + for(var/i in GLOB.clockwork_component_cache) + temp_data += "[get_component_acronym(i)] [data["components"][i] + GLOB.clockwork_component_cache[i]]" if(i != HIEROPHANT_ANSIBLE) temp_data += " " else @@ -411,8 +426,8 @@ generate_all_scripture() data["scripture"] = list() - for(var/s in all_scripture) - var/datum/clockwork_scripture/S = all_scripture[s] + for(var/s in GLOB.all_scripture) + var/datum/clockwork_scripture/S = GLOB.all_scripture[s] if(S.tier == selected_scripture) //display only scriptures of the selected tier var/scripture_color = get_component_color_bright(S.primary_component) var/list/temp_info = list("name" = "[S.name]", @@ -456,10 +471,10 @@ selected_scripture = params["category"] if("component") var/list/components = list("Random Components") - for(var/i in clockwork_component_cache) + for(var/i in GLOB.clockwork_component_cache) var/cache_components = 0 - if(clockwork_caches) - cache_components = clockwork_component_cache[i] + if(GLOB.clockwork_caches) + cache_components = GLOB.clockwork_component_cache[i] components["[get_component_name(i)] [(cache_components + stored_components[i])]"] = i var/input_component = input("Choose a component type.", "Target Component") as null|anything in components if(input_component && !..()) @@ -474,8 +489,8 @@ quickbound[found_index] = null //otherwise, leave it as a null so the scripture maintains position update_quickbind() else - var/target_index = input("Position of [initial(path.name)], 1 to 5?", "Input") as num|null - if(isnum(target_index) && target_index > 0 && target_index < 6 && !..()) + var/target_index = input("Position of [initial(path.name)], 1 to [maximum_quickbound]?", "Input") as num|null + if(isnum(target_index) && target_index > 0 && target_index <= maximum_quickbound && !..()) var/datum/clockwork_scripture/S if(LAZYLEN(quickbound) >= target_index) S = quickbound[target_index] @@ -488,6 +503,9 @@ return while(LAZYLEN(quickbound) < index) quickbound += null + var/datum/clockwork_scripture/quickbind_slot = GLOB.all_scripture[quickbound[index]] + if(quickbind_slot && !quickbind_slot.quickbind) + return //we can't unbind things we can't normally bind quickbound[index] = scripture update_quickbind() @@ -500,7 +518,7 @@ continue var/datum/action/item_action/clock/quickbind/Q = new /datum/action/item_action/clock/quickbind(src) Q.scripture_index = i - var/datum/clockwork_scripture/quickbind_slot = all_scripture[quickbound[i]] + var/datum/clockwork_scripture/quickbind_slot = GLOB.all_scripture[quickbound[i]] Q.name = "[quickbind_slot.name] ([Q.scripture_index])" var/list/temp_desc = list() for(var/c in quickbind_slot.consumed_components) //show how much the bound scripture costs diff --git a/code/game/gamemodes/clock_cult/clock_items/judicial_visor.dm b/code/game/gamemodes/clock_cult/clock_items/judicial_visor.dm index 0353984a68..89bc41f169 100644 --- a/code/game/gamemodes/clock_cult/clock_items/judicial_visor.dm +++ b/code/game/gamemodes/clock_cult/clock_items/judicial_visor.dm @@ -15,12 +15,12 @@ /obj/item/clothing/glasses/judicial_visor/New() ..() - all_clockwork_objects += src + GLOB.all_clockwork_objects += src blaster = new(src) blaster.visor = src /obj/item/clothing/glasses/judicial_visor/Destroy() - all_clockwork_objects -= src + GLOB.all_clockwork_objects -= src if(blaster.ranged_ability_user) blaster.remove_ranged_ability() blaster.visor = null @@ -131,7 +131,7 @@ continue V.recharging = TRUE //To prevent exploiting multiple visors to bypass the cooldown V.update_status() - addtimer(CALLBACK(V, /obj/item/clothing/glasses/judicial_visor.proc/recharge_visor, ranged_ability_user), (ratvar_awakens ? visor.recharge_cooldown*0.1 : visor.recharge_cooldown) * 2) + addtimer(CALLBACK(V, /obj/item/clothing/glasses/judicial_visor.proc/recharge_visor, ranged_ability_user), (GLOB.ratvar_awakens ? visor.recharge_cooldown*0.1 : visor.recharge_cooldown) * 2) clockwork_say(ranged_ability_user, text2ratvar("Kneel, heathens!")) ranged_ability_user.visible_message("[ranged_ability_user]'s judicial visor fires a stream of energy at [target], creating a strange mark!", "You direct [visor]'s power to [target]. You must wait for some time before doing this again.") var/turf/targetturf = get_turf(target) @@ -139,7 +139,7 @@ add_logs(ranged_ability_user, targetturf, "created a judicial marker") ranged_ability_user.update_action_buttons_icon() ranged_ability_user.update_inv_glasses() - addtimer(CALLBACK(visor, /obj/item/clothing/glasses/judicial_visor.proc/recharge_visor, ranged_ability_user), ratvar_awakens ? visor.recharge_cooldown*0.1 : visor.recharge_cooldown)//Cooldown is reduced by 10x if Ratvar is up + addtimer(CALLBACK(visor, /obj/item/clothing/glasses/judicial_visor.proc/recharge_visor, ranged_ability_user), GLOB.ratvar_awakens ? visor.recharge_cooldown*0.1 : visor.recharge_cooldown)//Cooldown is reduced by 10x if Ratvar is up remove_ranged_ability() return TRUE diff --git a/code/game/gamemodes/clock_cult/clock_items/ratvarian_spear.dm b/code/game/gamemodes/clock_cult/clock_items/ratvarian_spear.dm index 37c6922b9e..17f5783431 100644 --- a/code/game/gamemodes/clock_cult/clock_items/ratvarian_spear.dm +++ b/code/game/gamemodes/clock_cult/clock_items/ratvarian_spear.dm @@ -25,7 +25,7 @@ return ..() /obj/item/clockwork/ratvarian_spear/ratvar_act() - if(ratvar_awakens) //If Ratvar is alive, the spear is extremely powerful + if(GLOB.ratvar_awakens) //If Ratvar is alive, the spear is extremely powerful force = 25 throwforce = 50 armour_penetration = 10 @@ -40,7 +40,7 @@ timerid = addtimer(CALLBACK(src, .proc/break_spear), RATVARIAN_SPEAR_DURATION, TIMER_STOPPABLE) /obj/item/clockwork/ratvarian_spear/cyborg/ratvar_act() //doesn't break! - if(ratvar_awakens) + if(GLOB.ratvar_awakens) force = 25 throwforce = 50 armour_penetration = 10 diff --git a/code/game/gamemodes/clock_cult/clock_items/soul_vessel.dm b/code/game/gamemodes/clock_cult/clock_items/soul_vessel.dm index 1c5a2dd5f8..4cab0e8a00 100644 --- a/code/game/gamemodes/clock_cult/clock_items/soul_vessel.dm +++ b/code/game/gamemodes/clock_cult/clock_items/soul_vessel.dm @@ -18,21 +18,20 @@ The purpose of your existence is to further the goals of the servants and Ratvar himself. Above all else, serve Ratvar.
" new_mob_message = "The soul vessel emits a jet of steam before its cogwheel smooths out." dead_message = "Its cogwheel, scratched and dented, lies motionless." - fluff_names = list("Judge", "Guard", "Servant", "Smith", "Auger") + possible_names = list("Judge", "Guard", "Servant", "Smith", "Auger") autoping = FALSE resistance_flags = FIRE_PROOF | ACID_PROOF force_replace_ai_name = TRUE -/obj/item/device/mmi/posibrain/soul_vessel/New() +/obj/item/device/mmi/posibrain/soul_vessel/Initialize() ..() - radio.on = 0 + radio.on = FALSE laws = new /datum/ai_laws/ratvar() - braintype = picked_fluff_name - all_clockwork_objects += src - brainmob.languages_spoken = RATVAR + braintype = picked_name + GLOB.all_clockwork_objects += src /obj/item/device/mmi/posibrain/soul_vessel/Destroy() - all_clockwork_objects -= src + GLOB.all_clockwork_objects -= src return ..() /obj/item/device/mmi/posibrain/soul_vessel/examine(mob/user) @@ -49,14 +48,16 @@ /obj/item/device/mmi/posibrain/soul_vessel/attack_self(mob/living/user) if(!is_servant_of_ratvar(user)) to_chat(user, "You fiddle around with [src], to no avail.") - return 0 + return FALSE ..() /obj/item/device/mmi/posibrain/soul_vessel/attack(mob/living/target, mob/living/carbon/human/user) if(!is_servant_of_ratvar(user) || !ishuman(target)) ..() return - if(used || (brainmob && brainmob.key)) + if(QDELETED(brainmob)) + return + if(brainmob.key) to_chat(user, "\"This vessel is filled, friend. Provide it with a body.\"") return if(is_servant_of_ratvar(target)) @@ -95,8 +96,8 @@ if(!prev_fakedeath) H.status_flags &= ~FAKEDEATH H.apply_status_effect(STATUS_EFFECT_SIGILMARK) //let them be affected by vitality matrices - picked_fluff_name = "Slave" - braintype = picked_fluff_name + picked_name = "Slave" + braintype = picked_name brainmob.timeofhostdeath = H.timeofdeath user.visible_message("[user] presses [src] to [H]'s head, ripping through the skull and carefully extracting the brain!", \ "You extract [H]'s consciousness from [H.p_their()] body, trapping it in the soul vessel.") diff --git a/code/game/gamemodes/clock_cult/clock_items/wraith_spectacles.dm b/code/game/gamemodes/clock_cult/clock_items/wraith_spectacles.dm index 9c30c1cbfd..b8c195e306 100644 --- a/code/game/gamemodes/clock_cult/clock_items/wraith_spectacles.dm +++ b/code/game/gamemodes/clock_cult/clock_items/wraith_spectacles.dm @@ -14,10 +14,10 @@ /obj/item/clothing/glasses/wraith_spectacles/New() ..() - all_clockwork_objects += src + GLOB.all_clockwork_objects += src /obj/item/clothing/glasses/wraith_spectacles/Destroy() - all_clockwork_objects -= src + GLOB.all_clockwork_objects -= src return ..() /obj/item/clothing/glasses/wraith_spectacles/attack_self(mob/user) @@ -38,7 +38,7 @@ if(blind_cultist(H)) return if(is_servant_of_ratvar(H)) - to_chat(H, "You push the spectacles down, and all is revealed to you.[ratvar_awakens ? "" : " Your eyes begin to itch - you cannot do this for long."]") + to_chat(H, "You push the spectacles down, and all is revealed to you.[GLOB.ratvar_awakens ? "" : " Your eyes begin to itch - you cannot do this for long."]") var/datum/status_effect/wraith_spectacles/WS = H.has_status_effect(STATUS_EFFECT_WRAITHSPECS) if(WS) WS.apply_eye_damage(H) @@ -57,13 +57,13 @@ return TRUE /obj/item/clothing/glasses/wraith_spectacles/proc/set_vision_vars(update_vision) - invis_view = SEE_INVISIBLE_LIVING + lighting_alpha = null tint = 0 vision_flags = NONE darkness_view = 2 if(!up) if(is_servant_of_ratvar(loc)) - invis_view = SEE_INVISIBLE_NOLIGHTING + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE vision_flags = SEE_MOBS | SEE_TURFS | SEE_OBJS darkness_view = 3 else @@ -83,7 +83,7 @@ return set_vision_vars(TRUE) if(is_servant_of_ratvar(user)) - to_chat(user, "As you put on the spectacles, all is revealed to you.[ratvar_awakens ? "" : " Your eyes begin to itch - you cannot do this for long."]") + to_chat(user, "As you put on the spectacles, all is revealed to you.[GLOB.ratvar_awakens ? "" : " Your eyes begin to itch - you cannot do this for long."]") var/datum/status_effect/wraith_spectacles/WS = user.has_status_effect(STATUS_EFFECT_WRAITHSPECS) if(WS) WS.apply_eye_damage(user) @@ -137,10 +137,10 @@ var/mob/living/carbon/human/H = owner var/glasses_right = istype(H.glasses, /obj/item/clothing/glasses/wraith_spectacles) var/obj/item/clothing/glasses/wraith_spectacles/WS = H.glasses - if(glasses_right && !WS.up && !ratvar_awakens) + if(glasses_right && !WS.up && !GLOB.ratvar_awakens) apply_eye_damage(H) else - if(ratvar_awakens) + if(GLOB.ratvar_awakens) H.cure_nearsighted() H.cure_blind() H.adjust_eye_damage(-eye_damage_done) diff --git a/code/game/gamemodes/clock_cult/clock_mobs.dm b/code/game/gamemodes/clock_cult/clock_mobs.dm index 3538a8a557..a5e7dee4cb 100644 --- a/code/game/gamemodes/clock_cult/clock_mobs.dm +++ b/code/game/gamemodes/clock_cult/clock_mobs.dm @@ -8,14 +8,14 @@ unsuitable_atmos_damage = 0 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) //Robotic damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) - languages_spoken = RATVAR - languages_understood = HUMAN|RATVAR healable = FALSE del_on_death = TRUE speak_emote = list("clanks", "clinks", "clunks", "clangs") verb_ask = "requests" verb_exclaim = "proclaims" verb_yell = "harangues" + initial_languages = list(/datum/language/common, /datum/language/ratvar) + only_speaks_language = /datum/language/ratvar bubble_icon = "clock" light_color = "#E42742" death_sound = 'sound/magic/clockwork/anima_fragment_death.ogg' diff --git a/code/game/gamemodes/clock_cult/clock_mobs/anima_fragment.dm b/code/game/gamemodes/clock_cult/clock_mobs/anima_fragment.dm index a327211d01..cad4695d88 100644 --- a/code/game/gamemodes/clock_cult/clock_mobs/anima_fragment.dm +++ b/code/game/gamemodes/clock_cult/clock_mobs/anima_fragment.dm @@ -28,7 +28,7 @@ /mob/living/simple_animal/hostile/clockwork/fragment/Life() ..() - if(ratvar_awakens) + if(GLOB.ratvar_awakens) adjustHealth(-5) else if(movement_delay_time > world.time) adjustHealth(-0.2) @@ -37,7 +37,7 @@ /mob/living/simple_animal/hostile/clockwork/fragment/Stat() ..() - if(statpanel("Status") && movement_delay_time > world.time && !ratvar_awakens) + if(statpanel("Status") && movement_delay_time > world.time && !GLOB.ratvar_awakens) stat(null, "Movement delay(seconds): [max(round((movement_delay_time - world.time)*0.1, 0.1), 0)]") /mob/living/simple_animal/hostile/clockwork/fragment/death(gibbed) @@ -59,7 +59,7 @@ UnarmedAttack(L) attacktext = previousattacktext changeNext_move(CLICK_CD_MELEE) - if(!ratvar_awakens) + if(!GLOB.ratvar_awakens) adjustHealth(4) adjust_movement_delay(10) //with the above damage, total of 20 movement delay plus speed = 0 due to damage @@ -68,7 +68,7 @@ /mob/living/simple_animal/hostile/clockwork/fragment/movement_delay() . = ..() - if(movement_delay_time > world.time && !ratvar_awakens) + if(movement_delay_time > world.time && !GLOB.ratvar_awakens) . += min((movement_delay_time - world.time) * 0.1, 10) //the more delay we have, the slower we go /mob/living/simple_animal/hostile/clockwork/fragment/adjustHealth(amount) @@ -77,7 +77,7 @@ adjust_movement_delay(amount*2.5) /mob/living/simple_animal/hostile/clockwork/fragment/proc/adjust_movement_delay(amount) - if(ratvar_awakens) //if ratvar is up we ignore movement delay + if(GLOB.ratvar_awakens) //if ratvar is up we ignore movement delay movement_delay_time = 0 else if(movement_delay_time > world.time) movement_delay_time = movement_delay_time + amount diff --git a/code/game/gamemodes/clock_cult/clock_mobs/clockwork_marauder.dm b/code/game/gamemodes/clock_cult/clock_mobs/clockwork_marauder.dm index 203060d263..b0b77ccd62 100644 --- a/code/game/gamemodes/clock_cult/clock_mobs/clockwork_marauder.dm +++ b/code/game/gamemodes/clock_cult/clock_mobs/clockwork_marauder.dm @@ -41,10 +41,10 @@ emerge_from_host(FALSE, TRUE) unbind_from_host() return - if(!ratvar_awakens && host.stat == DEAD) + if(!GLOB.ratvar_awakens && host.stat == DEAD) death() return - if(ratvar_awakens) + if(GLOB.ratvar_awakens) adjustHealth(-50) else adjustHealth(-10) @@ -55,7 +55,7 @@ to_chat(host, "Your marauder is now strong enough to come forward again!") recovering = FALSE else - if(ratvar_awakens) //If Ratvar is alive, marauders don't need a host and are downright impossible to kill + if(GLOB.ratvar_awakens) //If Ratvar is alive, marauders don't need a host and are downright impossible to kill adjustHealth(-5) heal_host() else if(host) @@ -107,7 +107,7 @@ if(iscarbon(host)) resulthealth = round((abs(HEALTH_THRESHOLD_DEAD - host.health) / abs(HEALTH_THRESHOLD_DEAD - host.maxHealth)) * 100) stat(null, "Host Health: [resulthealth]%") - if(ratvar_awakens) + if(GLOB.ratvar_awakens) stat(null, "You are [recovering ? "un" : ""]able to deploy!") else if(resulthealth > MARAUDER_EMERGE_THRESHOLD) @@ -148,7 +148,7 @@ var/resulthealth = round((host.health / host.maxHealth) * 100, 0.5) if(iscarbon(host)) resulthealth = round((abs(HEALTH_THRESHOLD_DEAD - host.health) / abs(HEALTH_THRESHOLD_DEAD - host.maxHealth)) * 100) - if(ratvar_awakens || resulthealth <= MARAUDER_EMERGE_THRESHOLD) + if(GLOB.ratvar_awakens || resulthealth <= MARAUDER_EMERGE_THRESHOLD) new /obj/effect/overlay/temp/heal(host.loc, "#AF0AAF") host.heal_ordered_damage(4, damage_heal_order) @@ -180,7 +180,7 @@ hud_used.healths.maptext = "
[round((health / maxHealth) * 100, 0.5)]%" /mob/living/simple_animal/hostile/clockwork/marauder/proc/update_stats() - if(ratvar_awakens) + if(GLOB.ratvar_awakens) speed = 0 melee_damage_lower = 20 melee_damage_upper = 20 @@ -261,7 +261,7 @@ return ..() /mob/living/simple_animal/hostile/clockwork/marauder/proc/blockOrCounter(mob/target, atom/textobject) - if(ratvar_awakens) //if ratvar has woken, we block nearly everything at a very high chance + if(GLOB.ratvar_awakens) //if ratvar has woken, we block nearly everything at a very high chance blockchance = 90 counterchance = 90 if(prob(blockchance)) @@ -284,7 +284,7 @@ counterchance = min(counterchance + initial(counterchance), 100) else blockchance = min(blockchance + initial(blockchance), 100) - if(ratvar_awakens) + if(GLOB.ratvar_awakens) blockchance = 90 counterchance = 90 @@ -301,7 +301,7 @@ message = "\"[message]\"" //Processed output to_chat(src, "[name_part]: [message]") to_chat(host, "[name_part]: [message]") - for(var/M in mob_list) + for(var/M in GLOB.mob_list) if(isobserver(M)) var/link = FOLLOW_LINK(M, src) to_chat(M, "[link] [name_part] (to [findtextEx(host.name, host.real_name) ? "[host.name]" : "[host.real_name] (as [host.name])"]): [message] ") @@ -329,7 +329,7 @@ if(!host) to_chat(src, "You don't have a host!") return FALSE - if(!ratvar_awakens) + if(!GLOB.ratvar_awakens) var/resulthealth = round((host.health / host.maxHealth) * 100, 0.5) if(iscarbon(host)) resulthealth = round((abs(HEALTH_THRESHOLD_DEAD - host.health) / abs(HEALTH_THRESHOLD_DEAD - host.maxHealth)) * 100) @@ -421,7 +421,7 @@ message = "\"[message]\"" //Processed output to_chat(owner, "[name_part]: [message]") to_chat(linked_marauder, "[name_part]: [message]") - for(var/M in mob_list) + for(var/M in GLOB.mob_list) if(isobserver(M)) var/link = FOLLOW_LINK(M, src) to_chat(M, "[link] [name_part] (to [linked_marauder] ([linked_marauder.true_name])): [message]") diff --git a/code/game/gamemodes/clock_cult/clock_scripture.dm b/code/game/gamemodes/clock_cult/clock_scripture.dm index 41621bcf69..8e688f30aa 100644 --- a/code/game/gamemodes/clock_cult/clock_scripture.dm +++ b/code/game/gamemodes/clock_cult/clock_scripture.dm @@ -58,7 +58,7 @@ Judgement: 12 servants, 5 caches, 300 CV, and any existing AIs are converted or to_chat(invoker, "[slab] refuses to work, displaying the message: \"[slab.busy]!\"") return FALSE slab.busy = "Invocation ([name]) in progress" - if(ratvar_awakens) + if(GLOB.ratvar_awakens) channel_time *= 0.5 //if ratvar has awoken, half channel time and no cost else if(!slab.no_cost) for(var/i in consumed_components) @@ -68,7 +68,7 @@ Judgement: 12 servants, 5 caches, 300 CV, and any existing AIs are converted or slab.stored_components[i]-- used_slab_components[i]++ else - clockwork_component_cache[i]-- + GLOB.clockwork_component_cache[i]-- used_cache_components[i]++ update_slab_info() channel_time *= slab.speed_multiplier @@ -78,14 +78,14 @@ Judgement: 12 servants, 5 caches, 300 CV, and any existing AIs are converted or if(slab) slab.stored_components[i] += consumed_components[i] else //if we can't find a slab add to the global cache - clockwork_component_cache[i] += consumed_components[i] + GLOB.clockwork_component_cache[i] += consumed_components[i] for(var/i in used_cache_components) if(used_cache_components[i]) - clockwork_component_cache[i] += consumed_components[i] + GLOB.clockwork_component_cache[i] += consumed_components[i] update_slab_info() else successful = TRUE - if(slab && !slab.no_cost && !ratvar_awakens) //if the slab exists and isn't debug and ratvar isn't up, log the scripture as being used + if(slab && !slab.no_cost && !GLOB.ratvar_awakens) //if the slab exists and isn't debug and ratvar isn't up, log the scripture as being used feedback_add_details("clockcult_scripture_recited", name) if(slab) slab.busy = null @@ -102,12 +102,12 @@ Judgement: 12 servants, 5 caches, 300 CV, and any existing AIs are converted or /datum/clockwork_scripture/proc/has_requirements() //if we have the components and invokers to do it var/checked_penalty = FALSE - if(!ratvar_awakens && !slab.no_cost) + if(!GLOB.ratvar_awakens && !slab.no_cost) checked_penalty = check_offstation_penalty() var/component_printout = "You lack the components to recite this piece of scripture!" var/failed = FALSE for(var/i in consumed_components) - var/cache_components = clockwork_caches ? clockwork_component_cache[i] : 0 + var/cache_components = GLOB.clockwork_caches ? GLOB.clockwork_component_cache[i] : 0 var/total_components = slab.stored_components[i] + cache_components if(consumed_components[i] && total_components < consumed_components[i]) component_printout += "\nYou have [total_components]/[consumed_components[i]] \ @@ -117,7 +117,7 @@ Judgement: 12 servants, 5 caches, 300 CV, and any existing AIs are converted or component_printout += "" to_chat(invoker, component_printout) return FALSE - if(multiple_invokers_used && !multiple_invokers_optional && !ratvar_awakens && !slab.no_cost) + if(multiple_invokers_used && !multiple_invokers_optional && !GLOB.ratvar_awakens && !slab.no_cost) var/nearby_servants = 0 for(var/mob/living/L in range(1, get_turf(invoker))) if(is_servant_of_ratvar(L) && L.stat == CONSCIOUS && L.can_speak_vocal()) diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_applications.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_applications.dm index b409b7eb5b..efc479f522 100644 --- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_applications.dm +++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_applications.dm @@ -86,7 +86,7 @@ return TRUE if(is_type_in_typecache(I, ratvarian_armor_typecache)) return FALSE - if(!ratvar_awakens && is_type_in_typecache(I, better_armor_typecache)) + if(!GLOB.ratvar_awakens && is_type_in_typecache(I, better_armor_typecache)) return FALSE return user.dropItemToGround(I) @@ -106,7 +106,7 @@ sort_priority = 3 /datum/clockwork_scripture/memory_allocation/check_special_requirements() - for(var/mob/living/simple_animal/hostile/clockwork/marauder/M in all_clockwork_mobs) + for(var/mob/living/simple_animal/hostile/clockwork/marauder/M in GLOB.all_clockwork_mobs) if(M.host == invoker) to_chat(invoker, "You can only house one marauder at a time!") return FALSE @@ -135,7 +135,7 @@ if(!check_special_requirements()) return FALSE to_chat(invoker, "The tendril shivers slightly as it selects a marauder...") - var/list/marauder_candidates = pollCandidates("Do you want to play as the clockwork marauder of [invoker.real_name]?", ROLE_SERVANT_OF_RATVAR, null, FALSE, 50) + var/list/marauder_candidates = pollCandidates("Do you want to play as the clockwork marauder of [invoker.real_name]?", ROLE_SERVANT_OF_RATVAR, null, FALSE, 50, POLL_IGNORE_CLOCKWORK_MARAUDER) if(!check_special_requirements()) return FALSE if(!marauder_candidates.len) @@ -281,13 +281,13 @@ /datum/clockwork_scripture/create_object/tinkerers_daemon/check_special_requirements() var/servants = 0 - for(var/mob/living/L in living_mob_list) + for(var/mob/living/L in GLOB.living_mob_list) if(is_servant_of_ratvar(L)) servants++ - if(servants * 0.2 < clockwork_daemons) + if(servants * 0.2 < GLOB.clockwork_daemons) to_chat(invoker, "\"Daemons are already disabled, making more of them would be a waste.\"") return FALSE - if(servants * 0.2 < clockwork_daemons+1) + if(servants * 0.2 < GLOB.clockwork_daemons+1) to_chat(invoker, "\"This daemon would be useless, friend.\"") return FALSE return ..() diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_cyborg.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_cyborg.dm index c5de8550e9..db5260a8a0 100644 --- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_cyborg.dm +++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_cyborg.dm @@ -17,11 +17,20 @@ timeout_time = 50 /datum/clockwork_scripture/ranged_ability/linked_vanguard/check_special_requirements() - if(islist(invoker.stun_absorption) && invoker.stun_absorption["vanguard"] && invoker.stun_absorption["vanguard"]["end_time"] > world.time) + if(!GLOB.ratvar_awakens && islist(invoker.stun_absorption) && invoker.stun_absorption["vanguard"] && invoker.stun_absorption["vanguard"]["end_time"] > world.time) to_chat(invoker, "You are already shielded by a Vanguard!") return FALSE return TRUE +/datum/clockwork_scripture/ranged_ability/linked_vanguard/scripture_effects() + if(GLOB.ratvar_awakens) //hey, ratvar's up! give everybody stun immunity. + for(var/mob/living/L in view(7, get_turf(invoker))) + if(L.stat != DEAD && is_servant_of_ratvar(L)) + L.apply_status_effect(STATUS_EFFECT_VANGUARD) + CHECK_TICK + return TRUE + return ..() + //Judicial Marker: places a judicial marker at a target location /datum/clockwork_scripture/ranged_ability/judicial_marker name = "Judicial Marker" @@ -40,3 +49,4 @@ /datum/clockwork_scripture/channeled/volt_void/cyborg quickbind_desc = "Allows you to fire energy rays at target locations using your own power. Failing to fire causes backlash.
Maximum 4 chants." tier = SCRIPTURE_PERIPHERAL + quickbind = FALSE diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm index 1cbf36755e..023cd50dd1 100644 --- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm +++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm @@ -74,13 +74,19 @@ quickbind_desc = "Allows you to temporarily absorb stuns. All stuns absorbed will affect you when disabled." /datum/clockwork_scripture/vanguard/check_special_requirements() - if(islist(invoker.stun_absorption) && invoker.stun_absorption["vanguard"] && invoker.stun_absorption["vanguard"]["end_time"] > world.time) + if(!GLOB.ratvar_awakens && islist(invoker.stun_absorption) && invoker.stun_absorption["vanguard"] && invoker.stun_absorption["vanguard"]["end_time"] > world.time) to_chat(invoker, "You are already shielded by a Vanguard!") return FALSE return TRUE /datum/clockwork_scripture/vanguard/scripture_effects() - invoker.apply_status_effect(STATUS_EFFECT_VANGUARD) + if(GLOB.ratvar_awakens) + for(var/mob/living/L in view(7, get_turf(invoker))) + if(L.stat != DEAD && is_servant_of_ratvar(L)) + L.apply_status_effect(STATUS_EFFECT_VANGUARD) + CHECK_TICK + else + invoker.apply_status_effect(STATUS_EFFECT_VANGUARD) return TRUE @@ -128,8 +134,8 @@ /datum/clockwork_scripture/ranged_ability/geis_prep/run_scripture() var/servants = 0 - if(!ratvar_awakens) - for(var/mob/living/M in all_clockwork_mobs) + if(!GLOB.ratvar_awakens) + for(var/mob/living/M in GLOB.all_clockwork_mobs) if(ishuman(M) || issilicon(M)) servants++ if(servants > SCRIPT_SERVANT_REQ) @@ -159,8 +165,8 @@ /datum/clockwork_scripture/geis/run_scripture() var/servants = 0 - if(!ratvar_awakens) - for(var/mob/living/M in all_clockwork_mobs) + if(!GLOB.ratvar_awakens) + for(var/mob/living/M in GLOB.all_clockwork_mobs) if(ishuman(M) || issilicon(M)) servants++ if(target.buckled) @@ -266,7 +272,7 @@ var/static/prev_cost = 0 /datum/clockwork_scripture/create_object/tinkerers_cache/creation_update() - var/cache_cost_increase = min(round(clockwork_caches*0.25), 5) + var/cache_cost_increase = min(round(GLOB.clockwork_caches*0.25), 5) if(cache_cost_increase != prev_cost) prev_cost = cache_cost_increase consumed_components = list(BELLIGERENT_EYE = 0, VANGUARD_COGWHEEL = 0, GEIS_CAPACITOR = 0, REPLICANT_ALLOY = 1, HIEROPHANT_ANSIBLE = 0) @@ -279,14 +285,14 @@ //Wraith Spectacles: Creates a pair of wraith spectacles, which grant xray vision but damage vision slowly. /datum/clockwork_scripture/create_object/wraith_spectacles - descname = "Xray Vision Glasses" + descname = "Limited Xray Vision Glasses" name = "Wraith Spectacles" - desc = "Fabricates a pair of glasses that provides true sight but quickly damage vision, eventually causing blindness if worn for too long." + desc = "Fabricates a pair of glasses which grant true sight but cause gradual vision loss." invocations = list("Show the truth of this world to me!") channel_time = 10 whispered = TRUE object_path = /obj/item/clothing/glasses/wraith_spectacles - creator_message = "You form a pair of wraith spectacles, which will grant true sight when worn." + creator_message = "You form a pair of wraith spectacles, which grant true sight but cause gradual vision loss." usage_tip = "\"True sight\" means that you are able to see through walls and in darkness." tier = SCRIPTURE_DRIVER space_allowed = TRUE diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_judgement.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_judgement.dm index 1df9996de6..e7beff846f 100644 --- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_judgement.dm +++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_judgement.dm @@ -2,17 +2,17 @@ // JUDGEMENT // /////////////// -//Ark of the Clockwork Justiciar: Creates a Gateway to the Celestial Derelict, either summoning ratvar or proselytizing everything. +//Ark of the Clockwork Justiciar: Creates a Gateway to the Celestial Derelict, summoning ratvar. /datum/clockwork_scripture/create_object/ark_of_the_clockwork_justiciar descname = "Structure, Win Condition" name = "Ark of the Clockwork Justiciar" desc = "Tears apart a rift in spacetime to Reebe, the Celestial Derelict, using a massive amount of components.\n\ - This gateway will either call forth Ratvar from his exile if that is the task He has set you, or proselytize the entire station if it is not." + This gateway will, after some time, call forth Ratvar from his exile and massively empower all scriptures and tools." invocations = list("ARMORER! FRIGHT! AMPERAGE! VANGUARD! I CALL UPON YOU!!", \ "THE TIME HAS COME FOR OUR MASTER TO BREAK THE CHAINS OF EXILE!!", \ "LEND US YOUR AID! ENGINE COMES!!") channel_time = 150 - consumed_components = list(BELLIGERENT_EYE = 3, VANGUARD_COGWHEEL = 3, GEIS_CAPACITOR = 3, REPLICANT_ALLOY = 3, HIEROPHANT_ANSIBLE = 3) + consumed_components = list(BELLIGERENT_EYE = ARK_SUMMON_COST, VANGUARD_COGWHEEL = ARK_SUMMON_COST, GEIS_CAPACITOR = ARK_SUMMON_COST, REPLICANT_ALLOY = ARK_SUMMON_COST, HIEROPHANT_ANSIBLE = ARK_SUMMON_COST) invokers_required = 6 multiple_invokers_used = TRUE object_path = /obj/structure/destructible/clockwork/massive/celestial_gateway @@ -22,31 +22,21 @@ tier = SCRIPTURE_JUDGEMENT sort_priority = 1 -/datum/clockwork_scripture/create_object/ark_of_the_clockwork_justiciar/New() - if(ticker && ticker.mode && ticker.mode.clockwork_objective != CLOCKCULT_GATEWAY) - invocations = list("ARMORER! FRIGHT! AMPERAGE! VANGUARD! I CALL UPON YOU!!", \ - "THIS STATION WILL BE A BEACON OF HOPE IN THE DARKNESS OF SPACE!!", \ - "HELP US MAKE THIS SHOW ENGINE'S GLORY!!") - ..() - /datum/clockwork_scripture/create_object/ark_of_the_clockwork_justiciar/check_special_requirements() if(!slab.no_cost) - if(ratvar_awakens) + if(GLOB.ratvar_awakens) to_chat(invoker, "\"I am already here, idiot.\"") return FALSE - for(var/obj/structure/destructible/clockwork/massive/celestial_gateway/G in all_clockwork_objects) + for(var/obj/structure/destructible/clockwork/massive/celestial_gateway/G in GLOB.all_clockwork_objects) var/area/gate_area = get_area(G) - to_chat(invoker, "There is already a gateway at [gate_area.map_name]!") + to_chat(invoker, "There is already an Ark at [gate_area.map_name]!") return FALSE var/area/A = get_area(invoker) var/turf/T = get_turf(invoker) if(!T || T.z != ZLEVEL_STATION || istype(A, /area/shuttle) || !A.blob_allowed) to_chat(invoker, "You must be on the station to activate the Ark!") return FALSE - if(clockwork_gateway_activated) - if(ticker && ticker.mode && ticker.mode.clockwork_objective != CLOCKCULT_GATEWAY) - to_chat(invoker, "\"Look upon his works. Is it not glorious?\"") - else - to_chat(invoker, "Ratvar's recent banishment renders him too weak to be wrung forth from Reebe!") + if(GLOB.clockwork_gateway_activated) + to_chat(invoker, "Ratvar's recent banishment renders him too weak to be wrung forth from Reebe!") return FALSE return ..() diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_revenant.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_revenant.dm index 86d51a97dc..faab84befe 100644 --- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_revenant.dm +++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_revenant.dm @@ -16,7 +16,7 @@ sort_priority = 2 /datum/clockwork_scripture/invoke_inathneq/check_special_requirements() - if(!slab.no_cost && clockwork_generals_invoked["inath-neq"] > world.time) + if(!slab.no_cost && GLOB.clockwork_generals_invoked["inath-neq"] > world.time) to_chat(invoker, "\"[text2ratvar("I cannot lend you my aid yet, champion. Please be careful.")]\"\n\ Inath-neq has already been invoked recently! You must wait several minutes before calling upon the Resonant Cogwheel.") return FALSE @@ -25,7 +25,7 @@ /datum/clockwork_scripture/invoke_inathneq/scripture_effects() new/obj/effect/clockwork/general_marker/inathneq(get_turf(invoker)) hierophant_message("[text2ratvar("Vanguard: \"I lend you my aid, champions! Let glory guide your blows!")]\"", FALSE, invoker) - clockwork_generals_invoked["inath-neq"] = world.time + CLOCKWORK_GENERAL_COOLDOWN + GLOB.clockwork_generals_invoked["inath-neq"] = world.time + CLOCKWORK_GENERAL_COOLDOWN playsound(invoker, 'sound/magic/clockwork/invoke_general.ogg', 50, 0) if(invoker.real_name == "Lucio") clockwork_say(invoker, text2ratvar("Aww, let's break it DOWN!!")) @@ -56,11 +56,11 @@ "\"What a waste of my power.\"", "\"I'm sure I could just control these minds instead, but they never ask.\"") /datum/clockwork_scripture/invoke_sevtug/check_special_requirements() - if(!slab.no_cost && clockwork_generals_invoked["sevtug"] > world.time) + if(!slab.no_cost && GLOB.clockwork_generals_invoked["sevtug"] > world.time) to_chat(invoker, "\"[text2ratvar("Is it really so hard - even for a simpleton like you - to grasp the concept of waiting?")]\"\n\ Sevtug has already been invoked recently! You must wait several minutes before calling upon the Formless Pariah.") return FALSE - if(!slab.no_cost && ratvar_awakens) + if(!slab.no_cost && GLOB.ratvar_awakens) to_chat(invoker, "\"[text2ratvar("Do you really think anything I can do right now will compare to Engine's power?")]\"\n\ Sevtug will not grant his power while Ratvar's dwarfs his own!") return FALSE @@ -69,11 +69,11 @@ /datum/clockwork_scripture/invoke_sevtug/scripture_effects() new/obj/effect/clockwork/general_marker/sevtug(get_turf(invoker)) hierophant_message("[text2ratvar("Fright: \"I heed your call, idiots. Get going and use this chance while it lasts!")]\"", FALSE, invoker) - clockwork_generals_invoked["sevtug"] = world.time + GLOBAL_CLOCKWORK_GENERAL_COOLDOWN + GLOB.clockwork_generals_invoked["sevtug"] = world.time + GLOBAL_CLOCKWORK_GENERAL_COOLDOWN playsound(invoker, 'sound/magic/clockwork/invoke_general.ogg', 50, 0) var/hum = get_sfx('sound/effects/screech.ogg') //like playsound, same sound for everyone affected var/turf/T = get_turf(invoker) - for(var/mob/living/carbon/human/H in living_mob_list) + for(var/mob/living/carbon/human/H in GLOB.living_mob_list) if(H.z == invoker.z && !is_servant_of_ratvar(H)) var/distance = 0 distance += get_dist(T, get_turf(H)) @@ -118,11 +118,11 @@ multiple_invokers_used = TRUE /datum/clockwork_scripture/invoke_nezbere/check_special_requirements() - if(!slab.no_cost && clockwork_generals_invoked["nezbere"] > world.time) + if(!slab.no_cost && GLOB.clockwork_generals_invoked["nezbere"] > world.time) to_chat(invoker, "\"[text2ratvar("Not just yet, friend. Patience is a virtue.")]\"\n\ Nezbere has already been invoked recently! You must wait several minutes before calling upon the Brass Eidolon.") return FALSE - if(!slab.no_cost && ratvar_awakens) + if(!slab.no_cost && GLOB.ratvar_awakens) to_chat(invoker, "\"[text2ratvar("Our master is here already. You do not require my help, friend.")]\"\n\ There is no need for Nezbere's assistance while Ratvar is risen!") return FALSE @@ -131,17 +131,19 @@ /datum/clockwork_scripture/invoke_nezbere/scripture_effects() new/obj/effect/clockwork/general_marker/nezbere(get_turf(invoker)) hierophant_message("[text2ratvar("Armorer: \"I heed your call, champions. May your artifacts bring ruin upon the heathens that oppose our master!")]\"", FALSE, invoker) - clockwork_generals_invoked["nezbere"] = world.time + GLOBAL_CLOCKWORK_GENERAL_COOLDOWN + GLOB.clockwork_generals_invoked["nezbere"] = world.time + GLOBAL_CLOCKWORK_GENERAL_COOLDOWN playsound(invoker, 'sound/magic/clockwork/invoke_general.ogg', 50, 0) - nezbere_invoked++ - for(var/obj/O in all_clockwork_objects) + GLOB.nezbere_invoked++ + for(var/obj/O in GLOB.all_clockwork_objects) O.ratvar_act() - spawn(600) - nezbere_invoked-- - for(var/obj/O in all_clockwork_objects) - O.ratvar_act() + addtimer(CALLBACK(GLOBAL_PROC, /proc/reset_nezbere_invocation), 600) return TRUE +/proc/reset_nezbere_invocation() + GLOB.nezbere_invoked-- + for(var/obj/O in GLOB.all_clockwork_objects) + O.ratvar_act() + //Invoke Nzcrentr, the Eternal Thunderbolt: Imbues an immense amount of energy into the invoker. After several seconds, everyone near the invoker will be hit with a devastating lightning blast. /datum/clockwork_scripture/invoke_nzcrentr @@ -158,7 +160,7 @@ sort_priority = 5 /datum/clockwork_scripture/invoke_nzcrentr/check_special_requirements() - if(!slab.no_cost && clockwork_generals_invoked["nzcrentr"] > world.time) + if(!slab.no_cost && GLOB.clockwork_generals_invoked["nzcrentr"] > world.time) to_chat(invoker, "\"[text2ratvar("The boss says you have to wait. Hey, do you think he would mind if I killed you? ...He would? Ok.")]\"\n\ Nzcrentr has already been invoked recently! You must wait several minutes before calling upon the Eternal Thunderbolt.") return FALSE @@ -166,7 +168,7 @@ /datum/clockwork_scripture/invoke_nzcrentr/scripture_effects() new/obj/effect/clockwork/general_marker/nzcrentr(get_turf(invoker)) - clockwork_generals_invoked["nzcrentr"] = world.time + CLOCKWORK_GENERAL_COOLDOWN + GLOB.clockwork_generals_invoked["nzcrentr"] = world.time + CLOCKWORK_GENERAL_COOLDOWN hierophant_message("[text2ratvar("Amperage: \"[invoker.real_name] has called forth my power. Hope [invoker.p_they()] [invoker.p_do()] not shatter under it!")]\"", FALSE, invoker) invoker.visible_message("[invoker] begins to radiate a blinding light!", \ "\"[text2ratvar("The boss says it's okay to do this. Don't blame me if you die from it.")]\"\n\ diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm index 9c098d6d8d..4fd4e629a1 100644 --- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm +++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm @@ -180,17 +180,13 @@ owner.visible_message("A strange spear materializes in [owner]'s hands!", "You call forth your spear!") var/obj/item/clockwork/ratvarian_spear/R = new(get_turf(usr)) owner.put_in_hands(R) - if(!ratvar_awakens) + if(!GLOB.ratvar_awakens) to_chat(owner, "Your spear begins to break down in this plane of existence. You can't use it for long!") cooldown = base_cooldown + world.time owner.update_action_buttons_icon() - addtimer(CALLBACK(src, .proc/update_actions), base_cooldown) + addtimer(CALLBACK(owner, /mob.proc/update_action_buttons_icon), base_cooldown) return TRUE -/datum/action/innate/function_call/proc/update_actions() - if(owner) - owner.update_action_buttons_icon() - //Spatial Gateway: Allows the invoker to teleport themselves and any nearby allies to a conscious servant or clockwork obelisk. /datum/clockwork_scripture/spatial_gateway @@ -215,13 +211,14 @@ to_chat(invoker, "You must not be inside an object to use this scripture!") return FALSE var/other_servants = 0 - for(var/mob/living/L in living_mob_list) + for(var/mob/living/L in GLOB.living_mob_list) if(is_servant_of_ratvar(L) && !L.stat && L != invoker) other_servants++ - for(var/obj/structure/destructible/clockwork/powered/clockwork_obelisk/O in all_clockwork_objects) - other_servants++ + for(var/obj/structure/destructible/clockwork/powered/clockwork_obelisk/O in GLOB.all_clockwork_objects) + if(O.anchored) + other_servants++ if(!other_servants) - to_chat(invoker, "There are no other servants or clockwork obelisks!") + to_chat(invoker, "There are no other conscious servants or anchored clockwork obelisks!") return FALSE return TRUE @@ -232,7 +229,7 @@ if(!L.stat && is_servant_of_ratvar(L)) portal_uses++ duration += 40 //4 seconds - if(ratvar_awakens) + if(GLOB.ratvar_awakens) portal_uses = max(portal_uses, 100) //Very powerful if Ratvar has been summoned duration = max(duration, 100) return slab.procure_gateway(invoker, duration, portal_uses) @@ -266,7 +263,7 @@ var/turf/T = get_turf(invoker) if(!ray.run_scripture() && slab && invoker) if(can_recite() && T == get_turf(invoker)) - if(!ratvar_awakens) + if(!GLOB.ratvar_awakens) var/obj/structure/destructible/clockwork/powered/volt_checker/VC = new/obj/structure/destructible/clockwork/powered/volt_checker(get_turf(invoker)) var/multiplier = 0.5 var/usable_power = min(Floor(VC.total_accessable_power() * 0.2, MIN_CLOCKCULT_POWER), 1000) diff --git a/code/game/gamemodes/clock_cult/clock_structure.dm b/code/game/gamemodes/clock_cult/clock_structure.dm index 5eda70a8f7..f95b6e2d16 100644 --- a/code/game/gamemodes/clock_cult/clock_structure.dm +++ b/code/game/gamemodes/clock_cult/clock_structure.dm @@ -21,15 +21,15 @@ /obj/structure/destructible/clockwork/New() ..() change_construction_value(construction_value) - all_clockwork_objects += src + GLOB.all_clockwork_objects += src /obj/structure/destructible/clockwork/Destroy() change_construction_value(-construction_value) - all_clockwork_objects -= src + GLOB.all_clockwork_objects -= src return ..() /obj/structure/destructible/clockwork/ratvar_act() - if(ratvar_awakens || clockwork_gateway_activated) + if(GLOB.ratvar_awakens || GLOB.clockwork_gateway_activated) obj_integrity = max_integrity /obj/structure/destructible/clockwork/narsie_act() @@ -78,7 +78,7 @@ return ..() /obj/structure/destructible/clockwork/proc/get_efficiency_mod(increasing) - if(ratvar_awakens) + if(GLOB.ratvar_awakens) if(increasing) return 0.5 return 2 @@ -144,10 +144,10 @@ /obj/structure/destructible/clockwork/massive/New() ..() - poi_list += src + GLOB.poi_list += src /obj/structure/destructible/clockwork/massive/Destroy() - poi_list -= src + GLOB.poi_list -= src return ..() /obj/structure/destructible/clockwork/massive/singularity_pull(S, current_size) @@ -177,7 +177,7 @@ /obj/structure/destructible/clockwork/powered/ratvar_act() ..() - if(nezbere_invoked) + if(GLOB.nezbere_invoked) needs_power = FALSE else needs_power = initial(needs_power) @@ -225,7 +225,7 @@ new /obj/effect/overlay/temp/emp(loc) /obj/structure/destructible/clockwork/powered/proc/total_accessable_power() //how much power we have and can use - if(!needs_power || ratvar_awakens) + if(!needs_power || GLOB.ratvar_awakens) return INFINITY //oh yeah we've got power why'd you ask var/power = 0 @@ -237,7 +237,7 @@ var/power = 0 var/area/A = get_area(src) var/area/targetAPCA - for(var/obj/machinery/power/apc/APC in apcs_list) + for(var/obj/machinery/power/apc/APC in GLOB.apcs_list) var/area/APCA = get_area(APC) if(APCA == A) target_apc = APC @@ -259,7 +259,7 @@ /obj/structure/destructible/clockwork/powered/proc/try_use_power(amount) //try to use an amount of power - if(!needs_power || ratvar_awakens) + if(!needs_power || GLOB.ratvar_awakens) return 1 if(amount <= 0) return FALSE diff --git a/code/game/gamemodes/clock_cult/clock_structures/ark_of_the_clockwork_justicar.dm b/code/game/gamemodes/clock_cult/clock_structures/ark_of_the_clockwork_justicar.dm index 584145b88f..c088c8cd41 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/ark_of_the_clockwork_justicar.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/ark_of_the_clockwork_justicar.dm @@ -1,6 +1,6 @@ //The gateway to Reebe, from which Ratvar emerges. /obj/structure/destructible/clockwork/massive/celestial_gateway - name = "gateway to the Celestial Derelict" + name = "ark of the Clockwork Justicar" desc = "A massive, thrumming rip in spacetime." clockwork_desc = "A portal to the Celestial Derelict. Massive and intimidating, it is the only thing that can both transport Ratvar and withstand the massive amount of energy he emits." obj_integrity = 500 @@ -19,10 +19,9 @@ var/second_sound_played = FALSE var/third_sound_played = FALSE var/fourth_sound_played = FALSE - var/ratvar_portal = TRUE //if the gateway actually summons ratvar or just produces a hugeass conversion burst var/obj/effect/clockwork/overlay/gateway_glow/glow var/obj/effect/countdown/clockworkgate/countdown - var/list/required_components = list(BELLIGERENT_EYE = 7, VANGUARD_COGWHEEL = 7, GEIS_CAPACITOR = 7, REPLICANT_ALLOY = 7, HIEROPHANT_ANSIBLE = 7) + var/list/required_components = list(BELLIGERENT_EYE = ARK_CONSUME_COST, VANGUARD_COGWHEEL = ARK_CONSUME_COST, GEIS_CAPACITOR = ARK_CONSUME_COST, REPLICANT_ALLOY = ARK_CONSUME_COST, HIEROPHANT_ANSIBLE = ARK_CONSUME_COST) /obj/structure/destructible/clockwork/massive/celestial_gateway/New() ..() @@ -30,33 +29,20 @@ /obj/structure/destructible/clockwork/massive/celestial_gateway/proc/spawn_animation() var/turf/T = get_turf(src) - var/objective_is_gateway = (ticker && ticker.mode && ticker.mode.clockwork_objective == CLOCKCULT_GATEWAY) new/obj/effect/clockwork/general_marker/inathneq(T) - if(objective_is_gateway) - hierophant_message("\"[text2ratvar("Engine, come forth and show your servants your mercy")]!\"") - else - hierophant_message("\"[text2ratvar("We will show all the mercy of Engine")]!\"") + hierophant_message("\"[text2ratvar("Engine, come forth and show your servants your mercy")]!\"") playsound(T, 'sound/magic/clockwork/invoke_general.ogg', 30, 0) sleep(10) new/obj/effect/clockwork/general_marker/sevtug(T) - if(objective_is_gateway) - hierophant_message("\"[text2ratvar("Engine, come forth and show this station your decorating skills")]!\"") - else - hierophant_message("\"[text2ratvar("We will show all Engine's decorating skills")]!\"") + hierophant_message("\"[text2ratvar("Engine, come forth and show this station your decorating skills")]!\"") playsound(T, 'sound/magic/clockwork/invoke_general.ogg', 45, 0) sleep(10) new/obj/effect/clockwork/general_marker/nezbere(T) - if(objective_is_gateway) - hierophant_message("\"[text2ratvar("Engine, come forth and shine your light across this realm")]!!\"") - else - hierophant_message("\"[text2ratvar("We will show all Engine's light")]!!\"") + hierophant_message("\"[text2ratvar("Engine, come forth and shine your light across this realm")]!!\"") playsound(T, 'sound/magic/clockwork/invoke_general.ogg', 60, 0) sleep(10) new/obj/effect/clockwork/general_marker/nzcrentr(T) - if(objective_is_gateway) - hierophant_message("\"[text2ratvar("Engine, come forth")].\"") - else - hierophant_message("\"[text2ratvar("We will show all Engine's power")].\"") + hierophant_message("\"[text2ratvar("Engine, come forth")].\"") playsound(T, 'sound/magic/clockwork/invoke_general.ogg', 75, 0) sleep(10) playsound(T, 'sound/magic/clockwork/invoke_general.ogg', 100, 0) @@ -74,9 +60,7 @@ countdown = new(src) countdown.start() var/area/gate_area = get_area(src) - hierophant_message("A gateway to the Celestial Derelict has been created in [gate_area.map_name]!", FALSE, src) - if(!objective_is_gateway) - ratvar_portal = FALSE + hierophant_message("An Ark of the Clockwork Justicar has been created in [gate_area.map_name]!", FALSE, src) SSshuttle.registerHostileEnvironment(src) START_PROCESSING(SSprocessing, src) @@ -84,7 +68,7 @@ STOP_PROCESSING(SSprocessing, src) if(!purpose_fulfilled) var/area/gate_area = get_area(src) - hierophant_message("A gateway to the Celestial Derelict has fallen at [gate_area.map_name]!") + hierophant_message("An Ark of the Clockwork Justicar has fallen at [gate_area.map_name]!") send_to_playing_players(sound(null, 0, channel = 8)) var/was_stranded = SSshuttle.emergency.mode == SHUTTLE_STRANDED SSshuttle.clearHostileEnvironment(src) @@ -179,14 +163,14 @@ to_chat(user, "[get_component_name(i)][i != REPLICANT_ALLOY ? "s":""]: \ [required_components[i]]") else - to_chat(user, "Seconds until [ratvar_portal ? "Ratvar's arrival":"Proselytization"]: [get_arrival_text(TRUE)]") + to_chat(user, "Seconds until Ratvar's arrival: [get_arrival_text(TRUE)]") switch(progress_in_seconds) if(-INFINITY to GATEWAY_REEBE_FOUND) to_chat(user, "It's still opening.") if(GATEWAY_REEBE_FOUND to GATEWAY_RATVAR_COMING) to_chat(user, "It's reached the Celestial Derelict and is drawing power from it.") if(GATEWAY_RATVAR_COMING to INFINITY) - to_chat(user, "[ratvar_portal ? "Ratvar is coming through the gateway":"The gateway is glowing with massed power"]!") + to_chat(user, "Ratvar is coming through the gateway!") else switch(progress_in_seconds) if(-INFINITY to GATEWAY_REEBE_FOUND) @@ -194,11 +178,11 @@ if(GATEWAY_REEBE_FOUND to GATEWAY_RATVAR_COMING) to_chat(user, "It seems to be leading somewhere.") if(GATEWAY_RATVAR_COMING to INFINITY) - to_chat(user, "[ratvar_portal ? "Something is coming through":"It's glowing brightly"]!") + to_chat(user, "Something is coming through!") /obj/structure/destructible/clockwork/massive/celestial_gateway/process() if(!first_sound_played || prob(7)) - for(var/M in player_list) + for(var/M in GLOB.player_list) if(M && !isnewplayer(M)) to_chat(M, "You hear otherworldly sounds from the [dir2text(get_dir(get_turf(M), get_turf(src)))]...") if(!obj_integrity) @@ -227,9 +211,9 @@ var/used_components = FALSE for(var/i in required_components) if(required_components[i]) - var/to_use = min(clockwork_component_cache[i], required_components[i]) + var/to_use = min(GLOB.clockwork_component_cache[i], required_components[i]) required_components[i] -= to_use - clockwork_component_cache[i] -= to_use + GLOB.clockwork_component_cache[i] -= to_use if(to_use) used_components = TRUE if(used_components) @@ -276,39 +260,28 @@ animate(glow, transform = matrix() * 3, alpha = 0, time = 5) var/turf/startpoint = get_turf(src) QDEL_IN(src, 3) - if(ratvar_portal) - sleep(3) - clockwork_gateway_activated = TRUE - new/obj/structure/destructible/clockwork/massive/ratvar(startpoint) - else - INVOKE_ASYNC(SSshuttle.emergency, /obj/docking_port/mobile/emergency.proc/request, null, 0) //call the shuttle immediately - sleep(3) - clockwork_gateway_activated = TRUE - send_to_playing_players("\"[text2ratvar("Behold")]!\"\n\"[text2ratvar("See Engine's mercy")]!\"\n\ - \"[text2ratvar("Observe Engine's design skills")]!\"\n\"[text2ratvar("Behold Engine's light")]!!\"\n\ - \"[text2ratvar("Gaze upon Engine's power")]!\"") - send_to_playing_players('sound/magic/clockwork/invoke_general.ogg') - var/x0 = startpoint.x - var/y0 = startpoint.y - for(var/I in spiral_range_turfs(255, startpoint)) - var/turf/T = I - if(!T) - continue - var/dist = cheap_hypotenuse(T.x, T.y, x0, y0) - if(dist < 100) - dist = TRUE - else - dist = FALSE - T.ratvar_act(dist) - CHECK_TICK - for(var/mob/living/L in living_mob_list) - L.ratvar_act() - for(var/I in all_clockwork_mobs) - var/mob/M = I - if(M.stat == CONSCIOUS) - clockwork_say(M, text2ratvar(pick("Purge all untruths and honor Engine!", "All glory to Engine's light!", "Engine's power is unmatched!"))) + sleep(3) + GLOB.clockwork_gateway_activated = TRUE + new/obj/structure/destructible/clockwork/massive/ratvar(startpoint) + send_to_playing_players("\"[text2ratvar("See Engine's mercy")]!\"\n\ + \"[text2ratvar("Observe Engine's design skills")]!\"\n\"[text2ratvar("Behold Engine's light")]!!\"\n\ + \"[text2ratvar("Gaze upon Engine's power")].\"") + send_to_playing_players('sound/magic/clockwork/invoke_general.ogg') + var/x0 = startpoint.x + var/y0 = startpoint.y + for(var/I in spiral_range_turfs(255, startpoint)) + var/turf/T = I + if(!T) + continue + var/dist = cheap_hypotenuse(T.x, T.y, x0, y0) + if(dist < 100) + dist = TRUE + else + dist = FALSE + T.ratvar_act(dist, TRUE) + CHECK_TICK -//the actual appearance of the Gateway to the Celestial Derelict; an object so the edges of the gate can be clicked through. +//the actual appearance of the Ark of the Clockwork Justicar; an object so the edges of the gate can be clicked through. /obj/effect/clockwork/overlay/gateway_glow icon = 'icons/effects/96x96.dmi' icon_state = "clockwork_gateway_charging" diff --git a/code/game/gamemodes/clock_cult/clock_structures/interdiction_lens.dm b/code/game/gamemodes/clock_cult/clock_structures/interdiction_lens.dm index 56e2736cd4..1082e021c0 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/interdiction_lens.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/interdiction_lens.dm @@ -19,9 +19,9 @@ var/interdiction_range = 14 //how large an area it drains and disables in var/static/list/rage_messages = list("...", "Disgusting.", "Die.", "Foul.", "Worthless.", "Mortal.", "Unfit.", "Weak.", "Fragile.", "Useless.", "Leave my sight!") -/obj/structure/destructible/clockwork/powered/interdiction_lens/New() +/obj/structure/destructible/clockwork/powered/interdiction_lens/Initialize() ..() - set_light(1.4, 0.8, "#F42B9D") + update_current_glow() /obj/structure/destructible/clockwork/powered/interdiction_lens/examine(mob/user) ..() @@ -30,12 +30,25 @@ if(is_servant_of_ratvar(user) || isobserver(user)) to_chat(user, "If it fails to drain any electronics or has nothing to return power to, it will disable itself for [round(recharge_time/600, 1)] minutes.") +/obj/structure/destructible/clockwork/powered/interdiction_lens/update_anchored(mob/user, do_damage) + ..() + update_current_glow() + /obj/structure/destructible/clockwork/powered/interdiction_lens/toggle(fast_process, mob/living/user) . = ..() + update_current_glow() + +/obj/structure/destructible/clockwork/powered/interdiction_lens/proc/update_current_glow() if(active) - set_light(2, 1.6, "#EE54EE") + if(disabled) + set_light(2, 1.6, "#151200") + else + set_light(2, 1.6, "#EE54EE") else - set_light(1.4, 0.8, "#F42B9D") + if(anchored) + set_light(1.4, 0.8, "#F42B9D") + else + set_light(0) /obj/structure/destructible/clockwork/powered/interdiction_lens/attack_hand(mob/living/user) if(user.canUseTopic(src, !issilicon(user), NO_DEXTERY)) @@ -45,7 +58,7 @@ toggle(0, user) /obj/structure/destructible/clockwork/powered/interdiction_lens/forced_disable(bad_effects) - if(disabled) + if(disabled || !anchored) return FALSE if(!active) toggle(0) @@ -53,8 +66,8 @@ recharging = world.time + recharge_time flick("interdiction_lens_discharged", src) icon_state = "interdiction_lens_inactive" - set_light(2, 1.6, "#151200") disabled = TRUE + update_current_glow() return TRUE /obj/structure/destructible/clockwork/powered/interdiction_lens/process() @@ -84,7 +97,7 @@ var/efficiency = get_efficiency_mod() var/rage_modifier = get_efficiency_mod(TRUE) - for(var/i in ai_list) + for(var/i in GLOB.ai_list) var/mob/living/silicon/ai/AI = i if(AI && AI.stat != DEAD && !is_servant_of_ratvar(AI)) unconverted_ai = TRUE diff --git a/code/game/gamemodes/clock_cult/clock_structures/ocular_warden.dm b/code/game/gamemodes/clock_cult/clock_structures/ocular_warden.dm index da2483883e..a6455701b1 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/ocular_warden.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/ocular_warden.dm @@ -47,10 +47,10 @@ /obj/structure/destructible/clockwork/ocular_warden/ratvar_act() ..() - if(ratvar_awakens) + if(GLOB.ratvar_awakens) damage_per_tick = 10 sight_range = 6 - else if(nezbere_invoked) + else if(GLOB.nezbere_invoked) damage_per_tick = 5 sight_range = 5 else @@ -80,7 +80,7 @@ else L.playsound_local(null,'sound/machines/clockcult/ocularwarden-dot2.ogg',50,1) L.adjustFireLoss((!iscultist(L) ? damage_per_tick : damage_per_tick * 2) * get_efficiency_mod()) //Nar-Sian cultists take additional damage - if(ratvar_awakens && L) + if(GLOB.ratvar_awakens && L) L.adjust_fire_stacks(damage_per_tick) L.IgniteMob() else if(istype(target,/obj/mecha)) @@ -97,7 +97,7 @@ visible_message("[src] swivels to face [target]!") if(isliving(target)) var/mob/living/L = target - to_chat(L, "\"I SEE YOU!\"\n[src]'s gaze [ratvar_awakens ? "melts you alive" : "burns you"]!") + to_chat(L, "\"I SEE YOU!\"\n[src]'s gaze [GLOB.ratvar_awakens ? "melts you alive" : "burns you"]!") else if(istype(target,/obj/mecha)) var/obj/mecha/M = target to_chat(M.occupant, "\"I SEE YOU!\"" ) @@ -105,7 +105,7 @@ if(prob(50)) visible_message("[src][pick(idle_messages)]") else - setDir(pick(cardinal))//Random rotation + setDir(pick(GLOB.cardinal))//Random rotation /obj/structure/destructible/clockwork/ocular_warden/proc/acquire_nearby_targets() . = list() @@ -131,7 +131,7 @@ else if(!L.mind) continue . += L - for(var/N in mechas_list) + for(var/N in GLOB.mechas_list) var/obj/mecha/M = N if(get_dist(M, src) <= sight_range && M.occupant && !is_servant_of_ratvar(M.occupant) && (M in view(sight_range, src))) . += M diff --git a/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm b/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm index 969e3e23e4..4b6db708f6 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm @@ -15,11 +15,12 @@ var/atom/prey //Whatever Ratvar is chasing var/clashing = FALSE //If Ratvar is FUCKING FIGHTING WITH NAR-SIE var/proselytize_range = 10 + dangerous_possession = TRUE /obj/structure/destructible/clockwork/massive/ratvar/New() ..() - ratvar_awakens++ - for(var/obj/O in all_clockwork_objects) + GLOB.ratvar_awakens++ + for(var/obj/O in GLOB.all_clockwork_objects) O.ratvar_act() START_PROCESSING(SSobj, src) send_to_playing_players("\"[text2ratvar("ONCE AGAIN MY LIGHT SHALL SHINE ACROSS THIS PATHETIC REALM")]!!\"") @@ -27,11 +28,11 @@ var/image/alert_overlay = image('icons/effects/clockwork_effects.dmi', "ratvar_alert") var/area/A = get_area(src) notify_ghosts("The Justiciar's light calls to you! Reach out to Ratvar in [A.name] to be granted a shell to spread his glory!", null, source = src, alert_overlay = alert_overlay) - addtimer(CALLBACK(SSshuttle.emergency, /obj/docking_port/mobile/emergency..proc/request, null, 0.1), 50) + INVOKE_ASYNC(SSshuttle.emergency, /obj/docking_port/mobile/emergency..proc/request, null, 0) /obj/structure/destructible/clockwork/massive/ratvar/Destroy() - ratvar_awakens-- - for(var/obj/O in all_clockwork_objects) + GLOB.ratvar_awakens-- + for(var/obj/O in GLOB.all_clockwork_objects) O.ratvar_act() STOP_PROCESSING(SSobj, src) send_to_playing_players("\"NO! I will not... be... banished... again...\"") @@ -62,27 +63,30 @@ T.ratvar_act() for(var/I in circleviewturfs(src, round(proselytize_range * 0.5))) var/turf/T = I - T.ratvar_act(1) - var/dir_to_step_in = pick(cardinal) + T.ratvar_act(TRUE) + var/dir_to_step_in = pick(GLOB.cardinal) + var/list/meals = list() + for(var/mob/living/L in GLOB.living_mob_list) //we want to know who's alive so we don't lose and retarget a single person + if(L.z == z && !is_servant_of_ratvar(L) && L.mind) + meals += L if(!prey) - for(var/obj/singularity/narsie/N in singularities) + for(var/obj/singularity/narsie/N in GLOB.singularities) if(N.z == z) prey = N break - if(!prey) //In case there's a Nar-Sie - var/list/meals = list() - for(var/mob/living/L in living_mob_list) - if(L.z == z && !is_servant_of_ratvar(L) && L.mind) - meals += L - if(meals.len) - prey = pick(meals) - to_chat(prey, "\"You will do.\"\n\ - Something very large and very malevolent begins lumbering its way towards you...") - prey << 'sound/effects/ratvar_reveal.ogg' + if(!prey && LAZYLEN(meals)) + prey = pick(meals) + to_chat(prey, "\"You will do, heretic.\"\n\ + ") + prey << 'sound/effects/ratvar_reveal.ogg' else - if((!istype(prey, /obj/singularity/narsie) && prob(10)) || is_servant_of_ratvar(prey) || prey.z != z) - to_chat(prey, "\"How dull. Leave me.\"\n\ - You feel tremendous relief as a set of horrible eyes loses sight of you...") + if((!istype(prey, /obj/singularity/narsie) && prob(10) && LAZYLEN(meals) > 1) || prey.z != z || !(prey in meals)) + if(is_servant_of_ratvar(prey)) + to_chat(prey, "\"Serve me well.\"\n\ + You feel great joy as your god turns His eye to another heretic...") + else + to_chat(prey, "\"No matter. I will find you later, heretic.\"\n\ + You feel tremendous relief as the crushing focus relents...") prey = null else dir_to_step_in = get_dir(src, prey) //Unlike Nar-Sie, Ratvar ruthlessly chases down his target @@ -109,13 +113,13 @@ while(src && narsie) send_to_playing_players('sound/magic/clockwork/ratvar_attack.ogg') sleep(5.2) - for(var/mob/M in mob_list) + for(var/mob/M in GLOB.mob_list) if(!isnewplayer(M)) flash_color(M, flash_color="#966400", flash_time=1) shake_camera(M, 4, 3) - var/ratvar_chance = min(ticker.mode.servants_of_ratvar.len, 50) - var/narsie_chance = ticker.mode.cult.len - for(var/mob/living/simple_animal/hostile/construct/harvester/C in player_list) + var/ratvar_chance = min(SSticker.mode.servants_of_ratvar.len, 50) + var/narsie_chance = SSticker.mode.cult.len + for(var/mob/living/simple_animal/hostile/construct/harvester/C in GLOB.player_list) narsie_chance++ ratvar_chance = rand(base_victory_chance, ratvar_chance) narsie_chance = rand(base_victory_chance, min(narsie_chance, 50)) @@ -125,7 +129,7 @@ sleep(rand(2,5)) send_to_playing_players('sound/magic/clockwork/narsie_attack.ogg') sleep(7.4) - for(var/mob/M in mob_list) + for(var/mob/M in GLOB.mob_list) if(!isnewplayer(M)) flash_color(M, flash_color="#C80000", flash_time=1) shake_camera(M, 4, 3) diff --git a/code/game/gamemodes/clock_cult/clock_structures/taunting_trail.dm b/code/game/gamemodes/clock_cult/clock_structures/taunting_trail.dm index 16afbae154..3016a210dc 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/taunting_trail.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/taunting_trail.dm @@ -20,13 +20,13 @@ timerid = QDEL_IN(src, 15) var/obj/structure/destructible/clockwork/taunting_trail/Tt = locate(/obj/structure/destructible/clockwork/taunting_trail) in loc if(Tt && Tt != src) - if(!step(src, pick(alldirs))) + if(!step(src, pick(GLOB.alldirs))) qdel(Tt) else for(var/obj/structure/destructible/clockwork/taunting_trail/TT in loc) if(TT != src) qdel(TT) - setDir(pick(cardinal)) + setDir(pick(GLOB.cardinal)) transform = matrix()*1.25 animate(src, alpha = 100, time = 15) diff --git a/code/game/gamemodes/clock_cult/clock_structures/tinkerers_cache.dm b/code/game/gamemodes/clock_cult/clock_structures/tinkerers_cache.dm index ad1f0a91df..7583428505 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/tinkerers_cache.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/tinkerers_cache.dm @@ -13,19 +13,21 @@ light_color = "#C2852F" var/wall_generation_cooldown var/turf/closed/wall/clockwork/linkedwall //if we've got a linked wall and are producing + var/static/linked_caches = 0 //how many caches are linked to walls; affects how fast components are produced /obj/structure/destructible/clockwork/cache/New() ..() START_PROCESSING(SSobj, src) - clockwork_caches++ + GLOB.clockwork_caches++ update_slab_info() set_light(2, 0.7) /obj/structure/destructible/clockwork/cache/Destroy() - clockwork_caches-- + GLOB.clockwork_caches-- update_slab_info() STOP_PROCESSING(SSobj, src) if(linkedwall) + linked_caches-- linkedwall.linkedcache = null linkedwall = null return ..() @@ -33,18 +35,20 @@ /obj/structure/destructible/clockwork/cache/process() if(!anchored) if(linkedwall) + linked_caches-- linkedwall.linkedcache = null linkedwall = null return for(var/turf/closed/wall/clockwork/C in range(4, src)) if(!C.linkedcache && !linkedwall) + linked_caches++ C.linkedcache = src linkedwall = C - wall_generation_cooldown = world.time + (CACHE_PRODUCTION_TIME * get_efficiency_mod(TRUE)) + wall_generation_cooldown = world.time + get_production_time() visible_message("[src] starts to whirr in the presence of [C]...") break if(linkedwall && wall_generation_cooldown <= world.time) - wall_generation_cooldown = world.time + (CACHE_PRODUCTION_TIME * get_efficiency_mod(TRUE)) + wall_generation_cooldown = world.time + get_production_time() var/component_id = generate_cache_component(null, src) playsound(linkedwall, 'sound/magic/clockwork/fellowship_armory.ogg', rand(15, 20), 1, -3, 1, 1) visible_message("Something cl[pick("ank", "ink", "unk", "ang")]s around inside of [src]...") @@ -57,7 +61,7 @@ if(!anchored) to_chat(user, "[src] needs to be secured to place [C] into it!") else - clockwork_component_cache[C.component_id]++ + GLOB.clockwork_component_cache[C.component_id]++ update_slab_info() to_chat(user, "You add [C] to [src].") user.drop_item() @@ -69,7 +73,7 @@ to_chat(user, "[src] needs to be secured to offload your slab's components into it!") else for(var/i in S.stored_components) - clockwork_component_cache[i] += S.stored_components[i] + GLOB.clockwork_component_cache[i] += S.stored_components[i] S.stored_components[i] = 0 update_slab_info() user.visible_message("[user] empties [S] into [src].", "You offload your slab's components into [src].") @@ -102,9 +106,12 @@ ..() if(is_servant_of_ratvar(user) || isobserver(user)) if(linkedwall) - to_chat(user, "It is linked to a Clockwork Wall and will generate a component every [round((CACHE_PRODUCTION_TIME * 0.1) * get_efficiency_mod(TRUE), 0.1)] seconds!") + to_chat(user, "It is linked to a Clockwork Wall and will generate a component every [round(get_production_time() * 0.1, 0.1)] seconds!") else to_chat(user, "It is unlinked! Construct a Clockwork Wall nearby to generate components!") to_chat(user, "Stored components:") - for(var/i in clockwork_component_cache) - to_chat(user, "[get_component_name(i)][i != REPLICANT_ALLOY ? "s":""]: [clockwork_component_cache[i]]") + for(var/i in GLOB.clockwork_component_cache) + to_chat(user, "[get_component_name(i)][i != REPLICANT_ALLOY ? "s":""]: [GLOB.clockwork_component_cache[i]]") + +/obj/structure/destructible/clockwork/cache/proc/get_production_time() + return (CACHE_PRODUCTION_TIME + (ACTIVE_CACHE_SLOWDOWN * linked_caches)) * get_efficiency_mod(TRUE) diff --git a/code/game/gamemodes/clock_cult/clock_structures/tinkerers_daemon.dm b/code/game/gamemodes/clock_cult/clock_structures/tinkerers_daemon.dm index ab557dd36a..6dc8741a3d 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/tinkerers_daemon.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/tinkerers_daemon.dm @@ -22,15 +22,15 @@ /obj/structure/destructible/clockwork/powered/tinkerers_daemon/New() ..() - clockwork_daemons++ + GLOB.clockwork_daemons++ /obj/structure/destructible/clockwork/powered/tinkerers_daemon/Destroy() - clockwork_daemons-- + GLOB.clockwork_daemons-- return ..() /obj/structure/destructible/clockwork/powered/tinkerers_daemon/ratvar_act() ..() - if(nezbere_invoked) + if(GLOB.nezbere_invoked) production_time = 0 production_cooldown = initial(production_cooldown) * 0.5 if(!active) @@ -47,8 +47,8 @@ else to_chat(user, "It is currently producing random components.") to_chat(user, "It will produce a component every [round((production_cooldown*0.1) * get_efficiency_mod(TRUE), 0.1)] seconds and requires at least the following power for each component type:") - for(var/i in clockwork_component_cache) - to_chat(user, "[get_component_name(i)]: [get_component_cost(i)]W ([clockwork_component_cache[i]] exist[clockwork_component_cache[i] == 1 ? "s" : ""])") + for(var/i in GLOB.clockwork_component_cache) + to_chat(user, "[get_component_name(i)]: [get_component_cost(i)]W ([GLOB.clockwork_component_cache[i]] exist[GLOB.clockwork_component_cache[i] == 1 ? "s" : ""])") /obj/structure/destructible/clockwork/powered/tinkerers_daemon/forced_disable(bad_effects) if(active) @@ -72,17 +72,17 @@ to_chat(user, "[src] needs to be secured to the floor before it can be activated!") return FALSE var/servants = 0 - for(var/mob/living/L in living_mob_list) + for(var/mob/living/L in GLOB.living_mob_list) if(is_servant_of_ratvar(L)) servants++ - if(servants * 0.2 < clockwork_daemons) + if(servants * 0.2 < GLOB.clockwork_daemons) to_chat(user, "\"There are too few servants for this daemon to work.\"") return - if(!clockwork_caches) + if(!GLOB.clockwork_caches) to_chat(user, "\"You require a cache for this daemon to operate. Get to it.\"") return var/min_power_usable = 0 - for(var/i in clockwork_component_cache) + for(var/i in GLOB.clockwork_component_cache) if(!min_power_usable) min_power_usable = get_component_cost(i) else @@ -94,15 +94,15 @@ switch(choice) if("Specific Component") var/list/components = list() - for(var/i in clockwork_component_cache) + for(var/i in GLOB.clockwork_component_cache) components["[get_component_name(i)] ([get_component_cost(i)]W)"] = i var/input_component = input(user, "Choose a component type.", name) as null|anything in components component_id_to_produce = components[input_component] servants = 0 - for(var/mob/living/L in living_mob_list) + for(var/mob/living/L in GLOB.living_mob_list) if(is_servant_of_ratvar(L)) servants++ - if(!is_servant_of_ratvar(user) || !user.canUseTopic(src, !issilicon(user), NO_DEXTERY) || active || !clockwork_caches || servants * 0.2 < clockwork_daemons) + if(!is_servant_of_ratvar(user) || !user.canUseTopic(src, !issilicon(user), NO_DEXTERY) || active || !GLOB.clockwork_caches || servants * 0.2 < GLOB.clockwork_daemons) return if(!component_id_to_produce) to_chat(user, "You decide not to select a component and activate the daemon.") @@ -136,24 +136,24 @@ set_light(0) /obj/structure/destructible/clockwork/powered/tinkerers_daemon/proc/get_component_cost(id) - return max(MIN_CLOCKCULT_POWER*2, (MIN_CLOCKCULT_POWER*2) * (1 + round(clockwork_component_cache[id] * 0.2))) + return max(MIN_CLOCKCULT_POWER*2, (MIN_CLOCKCULT_POWER*2) * (1 + round(GLOB.clockwork_component_cache[id] * 0.2))) /obj/structure/destructible/clockwork/powered/tinkerers_daemon/process() var/servants = 0 - for(var/mob/living/L in living_mob_list) + for(var/mob/living/L in GLOB.living_mob_list) if(is_servant_of_ratvar(L)) servants++ . = ..() var/min_power_usable = 0 if(!component_id_to_produce) - for(var/i in clockwork_component_cache) + for(var/i in GLOB.clockwork_component_cache) if(!min_power_usable) min_power_usable = get_component_cost(i) else min_power_usable = min(min_power_usable, get_component_cost(i)) else min_power_usable = get_component_cost(component_id_to_produce) - if(!clockwork_caches || servants * 0.2 < clockwork_daemons || . < min_power_usable) //if we don't have enough to produce the lowest or what we chose to produce, cancel out + if(!GLOB.clockwork_caches || servants * 0.2 < GLOB.clockwork_daemons || . < min_power_usable) //if we don't have enough to produce the lowest or what we chose to produce, cancel out forced_disable(FALSE) return if(production_time <= world.time) @@ -163,7 +163,7 @@ if(!try_use_power(get_component_cost(component_to_generate))) component_to_generate = null if(!component_id_to_produce) - for(var/i in clockwork_component_cache) + for(var/i in GLOB.clockwork_component_cache) if(try_use_power(get_component_cost(i))) //if we fail but are producing random, try and get a different component to produce component_to_generate = i break diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index cbfa2e42e7..65dcb863eb 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -8,8 +8,8 @@ return istype(M) && M.has_antag_datum(/datum/antagonist/cultist, TRUE) /proc/is_sacrifice_target(datum/mind/mind) - if(ticker.mode.name == "cult") - var/datum/game_mode/cult/cult_mode = ticker.mode + if(SSticker.mode.name == "cult") + var/datum/game_mode/cult/cult_mode = SSticker.mode if(mind == cult_mode.sacrifice_target) return 1 return 0 @@ -104,7 +104,7 @@ var/list/possible_targets = get_unconvertables() if(!possible_targets.len) message_admins("Cult Sacrifice: Could not find unconvertable target, checking for convertable target.") - for(var/mob/living/carbon/human/player in player_list) + for(var/mob/living/carbon/human/player in GLOB.player_list) if(player.mind && !(player.mind in cultists_to_cult)) possible_targets += player.mind if(possible_targets.len > 0) @@ -175,18 +175,18 @@ return TRUE /datum/game_mode/proc/update_cult_icons_added(datum/mind/cult_mind) - var/datum/atom_hud/antag/culthud = huds[ANTAG_HUD_CULT] + var/datum/atom_hud/antag/culthud = GLOB.huds[ANTAG_HUD_CULT] culthud.join_hud(cult_mind.current) set_antag_hud(cult_mind.current, "cult") /datum/game_mode/proc/update_cult_icons_removed(datum/mind/cult_mind) - var/datum/atom_hud/antag/culthud = huds[ANTAG_HUD_CULT] + var/datum/atom_hud/antag/culthud = GLOB.huds[ANTAG_HUD_CULT] culthud.leave_hud(cult_mind.current) set_antag_hud(cult_mind.current, null) /datum/game_mode/cult/proc/get_unconvertables() var/list/ucs = list() - for(var/mob/living/carbon/human/player in player_list) + for(var/mob/living/carbon/human/player in GLOB.player_list) if(player.mind && !is_convertable_to_cult(player) && !(player.mind in cultists_to_cult)) ucs += player.mind return ucs @@ -198,7 +198,7 @@ if(cult_objectives.Find("eldergod")) cult_fail += eldergod //1 by default, 0 if the elder god has been summoned at least once if(cult_objectives.Find("sacrifice")) - if(sacrifice_target && !sacrificed.Find(sacrifice_target)) //if the target has been sacrificed, ignore this step. otherwise, add 1 to cult_fail + if(sacrifice_target && !GLOB.sacrificed.Find(sacrifice_target)) //if the target has been GLOB.sacrificed, ignore this step. otherwise, add 1 to cult_fail cult_fail++ return cult_fail //if any objectives aren't met, failure @@ -237,14 +237,14 @@ if(!check_survive()) explanation = "Make sure at least [acolytes_needed] acolytes escape on the shuttle. ([acolytes_survived] escaped) Success!" feedback_add_details("cult_objective","cult_survive|SUCCESS|[acolytes_needed]") - ticker.news_report = CULT_ESCAPE + SSticker.news_report = CULT_ESCAPE else explanation = "Make sure at least [acolytes_needed] acolytes escape on the shuttle. ([acolytes_survived] escaped) Fail." feedback_add_details("cult_objective","cult_survive|FAIL|[acolytes_needed]") - ticker.news_report = CULT_FAILURE + SSticker.news_report = CULT_FAILURE if("sacrifice") if(sacrifice_target) - if(sacrifice_target in sacrificed) + if(sacrifice_target in GLOB.sacrificed) explanation = "Sacrifice [sacrifice_target.name], the [sacrifice_target.assigned_role]. Success!" feedback_add_details("cult_objective","cult_sacrifice|SUCCESS") else if(sacrifice_target && sacrifice_target.current) @@ -257,11 +257,11 @@ if(!eldergod) explanation = "Summon Nar-Sie. Success!" feedback_add_details("cult_objective","cult_narsie|SUCCESS") - ticker.news_report = CULT_SUMMON + SSticker.news_report = CULT_SUMMON else explanation = "Summon Nar-Sie. Fail." feedback_add_details("cult_objective","cult_narsie|FAIL") - ticker.news_report = CULT_FAILURE + SSticker.news_report = CULT_FAILURE text += "
Objective #[obj_count]: [explanation]" to_chat(world, text) @@ -270,7 +270,7 @@ /datum/game_mode/proc/auto_declare_completion_cult() - if( cult.len || (ticker && istype(ticker.mode,/datum/game_mode/cult)) ) + if( cult.len || (SSticker && istype(SSticker.mode,/datum/game_mode/cult)) ) var/text = "
The cultists were:" for(var/datum/mind/cultist in cult) text += printplayer(cultist) diff --git a/code/game/gamemodes/cult/cult_comms.dm b/code/game/gamemodes/cult/cult_comms.dm index 3a70735e1e..40c7bbece8 100644 --- a/code/game/gamemodes/cult/cult_comms.dm +++ b/code/game/gamemodes/cult/cult_comms.dm @@ -17,22 +17,17 @@ return cultist_commune(usr, input) - return /proc/cultist_commune(mob/living/user, message) if(!message) return - if(!ishuman(user)) - user.say("O bidai nabora se[pick("'","`")]sma!") - user.say(html_decode(message)) - else - user.whisper("O bidai nabora se[pick("'","`")]sma!") - user.whisper(html_decode(message)) + user.whisper("O bidai nabora se[pick("'","`")]sma!") + user.whisper(html_decode(message)) var/my_message = "[(ishuman(user) ? "Acolyte" : "Construct")] [findtextEx(user.name, user.real_name) ? user.name : "[user.real_name] (as [user.name])"]: [message]" - for(var/mob/M in mob_list) + for(var/mob/M in GLOB.mob_list) if(iscultist(M)) to_chat(M, my_message) - else if(M in dead_mob_list) + else if(M in GLOB.dead_mob_list) var/link = FOLLOW_LINK(M, user) to_chat(M, "[link] [my_message]") diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index 6914ad760c..a46074988d 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -328,7 +328,7 @@ return if(!iscultist(user)) user.dropItemToGround(src, TRUE) - step(src, pick(alldirs)) + step(src, pick(GLOB.alldirs)) to_chat(user, "\The [src] flickers out of your hands, your connection to this dimension is too strong!") return @@ -375,7 +375,7 @@ if(istype(A, /obj/item)) var/list/cultists = list() - for(var/datum/mind/M in ticker.mode.cult) + for(var/datum/mind/M in SSticker.mode.cult) if(M.current && M.current.stat != DEAD) cultists |= M.current var/mob/living/cultist_to_receive = input(user, "Who do you wish to call to [src]?", "Followers of the Geometer") as null|anything in (cultists - user) @@ -403,5 +403,4 @@ else ..() to_chat(user, "\The [src] can only transport items!") - return diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm index d88d0e9e05..51c622858d 100644 --- a/code/game/gamemodes/cult/cult_structures.dm +++ b/code/game/gamemodes/cult/cult_structures.dm @@ -122,12 +122,6 @@ to_chat(user, "You work the forge as dark knowledge guides your hands, creating [N]!") -var/list/blacklisted_pylon_turfs = typecacheof(list( - /turf/closed, - /turf/open/floor/engine/cult, - /turf/open/space, - /turf/open/floor/plating/lava, - /turf/open/chasm)) /obj/structure/destructible/cult/pylon name = "pylon" @@ -177,6 +171,12 @@ var/list/blacklisted_pylon_turfs = typecacheof(list( if(istype(T, /turf/open/floor/engine/cult)) cultturfs |= T continue + var/static/list/blacklisted_pylon_turfs = typecacheof(list( + /turf/closed, + /turf/open/floor/engine/cult, + /turf/open/space, + /turf/open/floor/plating/lava, + /turf/open/chasm)) if(is_type_in_typecache(T, blacklisted_pylon_turfs)) continue else diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index e933f951ec..0340c94af3 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -15,11 +15,12 @@ This file contains the arcane tome files. /obj/item/weapon/tome/New() ..() - if(!LAZYLEN(rune_types)) - rune_types = list() + if(!LAZYLEN(GLOB.rune_types)) + GLOB.rune_types = list() + var/static/list/non_revealed_runes = (subtypesof(/obj/effect/rune) - /obj/effect/rune/malformed) for(var/i_can_do_loops_now_thanks_remie in non_revealed_runes) var/obj/effect/rune/R = i_can_do_loops_now_thanks_remie - rune_types[initial(R.cultist_name)] = R //Uses the cultist name for displaying purposes + GLOB.rune_types[initial(R.cultist_name)] = R //Uses the cultist name for displaying purposes /obj/item/weapon/tome/examine(mob/user) ..() @@ -180,10 +181,10 @@ This file contains the arcane tome files. if(!check_rune_turf(Turf, user)) return - entered_rune_name = input(user, "Choose a rite to scribe.", "Sigils of Power") as null|anything in rune_types + entered_rune_name = input(user, "Choose a rite to scribe.", "Sigils of Power") as null|anything in GLOB.rune_types if(!src || QDELETED(src) || !Adjacent(user) || user.incapacitated() || !check_rune_turf(Turf, user)) return - rune_to_scribe = rune_types[entered_rune_name] + rune_to_scribe = GLOB.rune_types[entered_rune_name] if(!rune_to_scribe) return if(initial(rune_to_scribe.req_keyword)) @@ -196,12 +197,12 @@ This file contains the arcane tome files. if(!src || QDELETED(src) || !Adjacent(user) || user.incapacitated() || !check_rune_turf(Turf, user)) return if(ispath(rune_to_scribe, /obj/effect/rune/narsie)) - if(ticker.mode.name == "cult") - var/datum/game_mode/cult/cult_mode = ticker.mode + if(SSticker.mode.name == "cult") + var/datum/game_mode/cult/cult_mode = SSticker.mode if(!("eldergod" in cult_mode.cult_objectives)) to_chat(user, "Nar-Sie does not wish to be summoned!") return - if(cult_mode.sacrifice_target && !(cult_mode.sacrifice_target in sacrificed)) + if(cult_mode.sacrifice_target && !(cult_mode.sacrifice_target in GLOB.sacrificed)) to_chat(user, "The sacrifice is not complete. The portal would lack the power to open if you tried!") return if(!cult_mode.eldergod) @@ -244,6 +245,7 @@ This file contains the arcane tome files. if(S && !QDELETED(S)) qdel(S) var/obj/effect/rune/R = new rune_to_scribe(Turf, chosen_keyword) + R.add_mob_blood(user) to_chat(user, "The [lowertext(R.cultist_name)] rune [R.cultist_desc]") feedback_add_details("cult_runes_scribed", R.cultist_name) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index c612f10a5c..e58a7912b2 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -1,7 +1,7 @@ -/var/list/sacrificed = list() //a mixed list of minds and mobs -var/list/non_revealed_runes = (subtypesof(/obj/effect/rune) - /obj/effect/rune/malformed) -var/global/list/rune_types //Every rune that can be drawn by tomes - +GLOBAL_LIST_EMPTY(sacrificed) //a mixed list of minds and mobs +GLOBAL_LIST(rune_types) //Every rune that can be drawn by tomes +GLOBAL_LIST_EMPTY(teleport_runes) +GLOBAL_LIST_EMPTY(wall_runes) /* This file contains runes. @@ -58,13 +58,10 @@ To draw a rune, use an arcane tome. if(istype(I, /obj/item/weapon/tome) && iscultist(user)) to_chat(user, "You carefully erase the [lowertext(cultist_name)] rune.") qdel(src) - return else if(istype(I, /obj/item/weapon/nullrod)) user.say("BEGONE FOUL MAGIKS!!") to_chat(user, "You disrupt the magic of [src] with [I].") qdel(src) - return - return /obj/effect/rune/attack_hand(mob/living/user) if(!iscultist(user)) @@ -143,20 +140,20 @@ structure_check() searches for nearby cultist structures required for the invoca do_invoke_glow() /obj/effect/rune/proc/do_invoke_glow() + set waitfor = FALSE var/oldtransform = transform - spawn(0) //animate is a delay, we want to avoid being delayed - animate(src, transform = matrix()*2, alpha = 0, time = 5) //fade out - animate(transform = oldtransform, alpha = 255, time = 0) + animate(src, transform = matrix()*2, alpha = 0, time = 5) //fade out + sleep(5) + animate(src, transform = oldtransform, alpha = 255, time = 0) /obj/effect/rune/proc/fail_invoke() //This proc contains the effects of a rune if it is not invoked correctly, through either invalid wording or not enough cultists. By default, it's just a basic fizzle. visible_message("The markings pulse with a \ small flash of red light, then fall dark.") - spawn(0) //animate is a delay, we want to avoid being delayed - var/oldcolor = color - color = rgb(255, 0, 0) - animate(src, color = oldcolor, time = 5) - addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 5) + var/oldcolor = color + color = rgb(255, 0, 0) + animate(src, color = oldcolor, time = 5) + addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 5) //Malformed Rune: This forms if a rune is not drawn correctly. Invoking it does nothing but hurt the user. /obj/effect/rune/malformed @@ -179,7 +176,7 @@ structure_check() searches for nearby cultist structures required for the invoca /mob/proc/null_rod_check() //The null rod, if equipped, will protect the holder from the effects of most runes var/obj/item/weapon/nullrod/N = locate() in src - if(N && !ratvar_awakens) //If Nar-Sie or Ratvar are alive, null rods won't protect you + if(N && !GLOB.ratvar_awakens) //If Nar-Sie or Ratvar are alive, null rods won't protect you return N return 0 @@ -247,7 +244,6 @@ structure_check() searches for nearby cultist structures required for the invoca if(!P.info && !istype(P, /obj/item/weapon/paper/talisman)) . |= P -var/list/teleport_runes = list() /obj/effect/rune/teleport cultist_name = "Teleport" cultist_desc = "warps everything above it to another chosen teleport rune." @@ -262,17 +258,17 @@ var/list/teleport_runes = list() var/area/A = get_area(src) var/locname = initial(A.name) listkey = set_keyword ? "[set_keyword] [locname]":"[locname]" - teleport_runes += src + GLOB.teleport_runes += src /obj/effect/rune/teleport/Destroy() - teleport_runes -= src + GLOB.teleport_runes -= src return ..() /obj/effect/rune/teleport/invoke(var/list/invokers) var/mob/living/user = invokers[1] //the first invoker is always the user var/list/potential_runes = list() var/list/teleportnames = list() - for(var/R in teleport_runes) + for(var/R in GLOB.teleport_runes) var/obj/effect/rune/teleport/T = R if(T != src && (T.z <= ZLEVEL_SPACEMAX)) potential_runes[avoid_assoc_duplicate_keys(T.listkey, teleportnames)] = T @@ -392,7 +388,7 @@ var/list/teleport_runes = list() convertee.visible_message("[convertee] writhes in pain \ [brutedamage || burndamage ? "even as [convertee.p_their()] wounds heal and close" : "as the markings below [convertee.p_them()] glow a bloody red"]!", \ "AAAAAAAAAAAAAA-") - ticker.mode.add_cultist(convertee.mind, 1) + SSticker.mode.add_cultist(convertee.mind, 1) new /obj/item/weapon/tome(get_turf(src)) convertee.mind.special_role = "Cultist" to_chat(convertee, "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible, truth. The veil of reality has been ripped away \ @@ -410,11 +406,11 @@ var/list/teleport_runes = list() var/sacrifice_fulfilled = FALSE if(sacrificial.mind) - sacrificed += sacrificial.mind + GLOB.sacrificed += sacrificial.mind if(is_sacrifice_target(sacrificial.mind)) sacrifice_fulfilled = TRUE else - sacrificed += sacrificial + GLOB.sacrificed += sacrificial new /obj/effect/overlay/temp/cult/sac(get_turf(src)) for(var/M in invokers) @@ -459,10 +455,10 @@ var/list/teleport_runes = list() /obj/effect/rune/narsie/New() . = ..() - poi_list |= src + GLOB.poi_list |= src /obj/effect/rune/narsie/Destroy() - poi_list -= src + GLOB.poi_list -= src . = ..() /obj/effect/rune/narsie/talismanhide() //can't hide this, and you wouldn't want to @@ -476,8 +472,8 @@ var/list/teleport_runes = list() var/datum/game_mode/cult/cult_mode - if(ticker.mode.name == "cult") - cult_mode = ticker.mode + if(SSticker.mode.name == "cult") + cult_mode = SSticker.mode if(!cult_mode && !ignore_gamemode) for(var/M in invokers) @@ -486,7 +482,7 @@ var/list/teleport_runes = list() log_game("Summon Nar-Sie rune failed - gametype is not cult") return - if(locate(/obj/singularity/narsie) in poi_list) + if(locate(/obj/singularity/narsie) in GLOB.poi_list) for(var/M in invokers) to_chat(M, "Nar-Sie is already on this plane!") log_game("Summon Nar-Sie rune failed - already summoned") @@ -510,15 +506,13 @@ var/list/teleport_runes = list() log_game("Summon Narsie rune erased by [user.mind.key] (ckey) with a tome") message_admins("[key_name_admin(user)] erased a Narsie rune with a tome") ..() - return else if(istype(I, /obj/item/weapon/nullrod)) //Begone foul magiks. You cannot hinder me. log_game("Summon Narsie rune erased by [user.mind.key] (ckey) using a null rod") message_admins("[key_name_admin(user)] erased a Narsie rune with a null rod") ..() - return -//Rite of Resurrection: Requires the corpse of a cultist and that there have been less revives than the number of people sacrificed +//Rite of Resurrection: Requires the corpse of a cultist and that there have been less revives than the number of people GLOB.sacrificed /obj/effect/rune/raise_dead cultist_name = "Raise Dead" cultist_desc = "requires the corpse of a cultist placed upon the rune. Provided there have been sufficient sacrifices, they will be revived." @@ -531,8 +525,8 @@ var/list/teleport_runes = list() ..() if(iscultist(user) || user.stat == DEAD) var/revive_number = 0 - if(sacrificed.len) - revive_number = sacrificed.len - revives_used + if(GLOB.sacrificed.len) + revive_number = GLOB.sacrificed.len - revives_used to_chat(user, "Revives Remaining: [revive_number]") /obj/effect/rune/raise_dead/invoke(var/list/invokers) @@ -550,8 +544,8 @@ var/list/teleport_runes = list() log_game("Raise Dead rune failed - no corpses to revive") fail_invoke() return - if(!sacrificed.len || sacrificed.len <= revives_used) - to_chat(user, "You have sacrificed too few people to revive a cultist!") + if(!GLOB.sacrificed.len || GLOB.sacrificed.len <= revives_used) + to_chat(user, "You have GLOB.sacrificed too few people to revive a cultist!") fail_invoke() return if(potential_revive_mobs.len > 1) @@ -594,7 +588,7 @@ var/list/teleport_runes = list() fail_invoke() log_game("Raise Dead rune failed - revival target has no ghost") return 0 - if(!sacrificed.len || sacrificed.len <= revives_used) + if(!GLOB.sacrificed.len || GLOB.sacrificed.len <= revives_used) to_chat(user, "You have sacrificed too few people to revive a cultist!") fail_invoke() log_game("Raise Dead rune failed - too few sacrificed") @@ -710,8 +704,6 @@ var/list/teleport_runes = list() sleep(1) rune_in_use = 0 - -var/list/wall_runes = list() //Rite of the Corporeal Shield: When invoked, becomes solid and cannot be passed. Invoke again to undo. /obj/effect/rune/wall cultist_name = "Form Barrier" @@ -725,7 +717,7 @@ var/list/wall_runes = list() /obj/effect/rune/wall/New() ..() - wall_runes += src + GLOB.wall_runes += src /obj/effect/rune/wall/examine(mob/user) ..() @@ -734,7 +726,7 @@ var/list/wall_runes = list() /obj/effect/rune/wall/Destroy() density = 0 - wall_runes -= src + GLOB.wall_runes -= src air_update_turf(1) return ..() @@ -757,7 +749,7 @@ var/list/wall_runes = list() C.apply_damage(2, BRUTE, pick("l_arm", "r_arm")) /obj/effect/rune/wall/proc/spread_density() - for(var/R in wall_runes) + for(var/R in GLOB.wall_runes) var/obj/effect/rune/wall/W = R if(W.z == z && get_dist(src, W) <= 2 && !W.density && !W.recharging) W.density = TRUE @@ -806,7 +798,7 @@ var/list/wall_runes = list() /obj/effect/rune/summon/invoke(var/list/invokers) var/mob/living/user = invokers[1] var/list/cultists = list() - for(var/datum/mind/M in ticker.mode.cult) + for(var/datum/mind/M in SSticker.mode.cult) if(!(M.current in invokers) && M.current && M.current.stat != DEAD) cultists |= M.current var/mob/living/cultist_to_summon = input(user, "Who do you wish to call to [src]?", "Followers of the Geometer") as null|anything in cultists @@ -992,7 +984,7 @@ var/list/wall_runes = list() var/obj/structure/emergency_shield/invoker/N = new(T) new_human.key = ghost_to_spawn.key - ticker.mode.add_cultist(new_human.mind, 0) + SSticker.mode.add_cultist(new_human.mind, 0) to_chat(new_human, "You are a servant of the Geometer. You have been made semi-corporeal by the cult of Nar-Sie, and you are to serve them at all costs.") while(user in T) diff --git a/code/game/gamemodes/cult/talisman.dm b/code/game/gamemodes/cult/talisman.dm index d8722acb73..2876e80373 100644 --- a/code/game/gamemodes/cult/talisman.dm +++ b/code/game/gamemodes/cult/talisman.dm @@ -125,7 +125,7 @@ /obj/item/weapon/paper/talisman/teleport/invoke(mob/living/user, successfuluse = 1) var/list/potential_runes = list() var/list/teleportnames = list() - for(var/R in teleport_runes) + for(var/R in GLOB.teleport_runes) var/obj/effect/rune/teleport/T = R potential_runes[avoid_assoc_duplicate_keys(T.listkey, teleportnames)] = T @@ -421,7 +421,6 @@ if(uses <= 0) user.drop_item() qdel(src) - return /obj/item/weapon/restraints/handcuffs/energy/cult //For the talisman of shackling name = "cult shackles" diff --git a/code/game/gamemodes/devil/devil.dm b/code/game/gamemodes/devil/devil.dm index 0aafc57ccb..b64ef55406 100644 --- a/code/game/gamemodes/devil/devil.dm +++ b/code/game/gamemodes/devil/devil.dm @@ -1,22 +1,3 @@ -var/global/list/whiteness = list ( - /obj/item/clothing/under/color/white = 2, - /obj/item/clothing/under/rank/bartender = 1, - /obj/item/clothing/under/rank/chef = 1, - /obj/item/clothing/under/rank/chief_engineer = 1, - /obj/item/clothing/under/rank/scientist = 1, - /obj/item/clothing/under/rank/chemist = 1, - /obj/item/clothing/under/rank/chief_medical_officer = 1, - /obj/item/clothing/under/rank/geneticist = 1, - /obj/item/clothing/under/rank/virologist = 1, - /obj/item/clothing/under/rank/nursesuit = 1, - /obj/item/clothing/under/rank/medical = 1, - /obj/item/clothing/under/rank/det = 1, - /obj/item/clothing/under/suit_jacket/white = 0.5, - /obj/item/clothing/under/burial = 1 -) - - - /mob/living/proc/check_devil_bane_multiplier(obj/item/weapon, mob/living/attacker) switch(mind.devilinfo.bane) if(BANE_WHITECLOTHES) @@ -24,6 +5,22 @@ var/global/list/whiteness = list ( var/mob/living/carbon/human/H = attacker if(H.w_uniform && istype(H.w_uniform, /obj/item/clothing/under)) var/obj/item/clothing/under/U = H.w_uniform + var/static/list/whiteness = list ( + /obj/item/clothing/under/color/white = 2, + /obj/item/clothing/under/rank/bartender = 1, + /obj/item/clothing/under/rank/chef = 1, + /obj/item/clothing/under/rank/chief_engineer = 1, + /obj/item/clothing/under/rank/scientist = 1, + /obj/item/clothing/under/rank/chemist = 1, + /obj/item/clothing/under/rank/chief_medical_officer = 1, + /obj/item/clothing/under/rank/geneticist = 1, + /obj/item/clothing/under/rank/virologist = 1, + /obj/item/clothing/under/rank/nursesuit = 1, + /obj/item/clothing/under/rank/medical = 1, + /obj/item/clothing/under/rank/det = 1, + /obj/item/clothing/under/suit_jacket/white = 0.5, + /obj/item/clothing/under/burial = 1 + ) if(whiteness[U.type]) src.visible_message("[src] seems to have been harmed by the purity of [attacker]'s clothes.", "Unsullied white clothing is disrupting your form.") return whiteness[U.type] + 1 diff --git a/code/game/gamemodes/devil/devilinfo.dm b/code/game/gamemodes/devil/devilinfo.dm index 82fead15ca..ef9091891f 100644 --- a/code/game/gamemodes/devil/devilinfo.dm +++ b/code/game/gamemodes/devil/devilinfo.dm @@ -13,8 +13,8 @@ #define DEVILRESURRECTTIME 600 -var/global/list/allDevils = list() -var/global/list/lawlorify = list ( +GLOBAL_LIST_EMPTY(allDevils) +GLOBAL_LIST_INIT(lawlorify, list ( LORE = list( OBLIGATION_FOOD = "This devil seems to always offer its victims food before slaughtering them.", OBLIGATION_FIDDLE = "This devil will never turn down a musical challenge.", @@ -77,8 +77,7 @@ var/global/list/lawlorify = list ( BANISH_DESTRUCTION = "If your corpse is destroyed, you will be unable to resurrect.", BANISH_FUNERAL_GARB = "If your corpse is clad in funeral garments, you will be unable to resurrect." ) - ) - + )) /datum/devilinfo var/datum/mind/owner = null var/obligation @@ -112,11 +111,11 @@ var/global/list/lawlorify = list ( return devil /proc/devilInfo(name, saveDetails = 0) - if(allDevils[lowertext(name)]) - return allDevils[lowertext(name)] + if(GLOB.allDevils[lowertext(name)]) + return GLOB.allDevils[lowertext(name)] else var/datum/devilinfo/devil = randomDevilInfo(name) - allDevils[lowertext(name)] = devil + GLOB.allDevils[lowertext(name)] = devil devil.exists = saveDetails return devil @@ -287,9 +286,9 @@ var/global/list/lawlorify = list ( if(A) notify_ghosts("An arch devil has ascended in \the [A.name]. Reach out to the devil to be given a new shell for your soul.", source = owner.current, action=NOTIFY_ATTACK) sleep(50) - if(!ticker.mode.devil_ascended) + if(!SSticker.mode.devil_ascended) SSshuttle.emergency.request(null, 0.3) - ticker.mode.devil_ascended++ + SSticker.mode.devil_ascended++ form = ARCH_DEVIL /datum/devilinfo/proc/remove_spells() @@ -415,8 +414,8 @@ var/global/list/lawlorify = list ( check_regression() /datum/devilinfo/proc/create_new_body() - if(blobstart.len > 0) - var/turf/targetturf = get_turf(pick(blobstart)) + if(GLOB.blobstart.len > 0) + var/turf/targetturf = get_turf(pick(GLOB.blobstart)) var/mob/currentMob = owner.current if(!currentMob) currentMob = owner.get_ghost() diff --git a/code/game/gamemodes/devil/game_mode.dm b/code/game/gamemodes/devil/game_mode.dm index a99e6abd83..f311a289e0 100644 --- a/code/game/gamemodes/devil/game_mode.dm +++ b/code/game/gamemodes/devil/game_mode.dm @@ -36,7 +36,7 @@ devil_mind.devilinfo = devilInfo(trueName, 1) devil_mind.devilinfo.ascendable = ascendable - devil_mind.store_memory("Your devilic true name is [devil_mind.devilinfo.truename]
[lawlorify[LAW][devil_mind.devilinfo.ban]]
You may not use violence to coerce someone into selling their soul.
You may not directly and knowingly physically harm a devil, other than yourself.
[lawlorify[LAW][devil_mind.devilinfo.bane]]
[lawlorify[LAW][devil_mind.devilinfo.obligation]]
[lawlorify[LAW][devil_mind.devilinfo.banish]]
") + devil_mind.store_memory("Your devilic true name is [devil_mind.devilinfo.truename]
[GLOB.lawlorify[LAW][devil_mind.devilinfo.ban]]
You may not use violence to coerce someone into selling their soul.
You may not directly and knowingly physically harm a devil, other than yourself.
[GLOB.lawlorify[LAW][devil_mind.devilinfo.bane]]
[GLOB.lawlorify[LAW][devil_mind.devilinfo.obligation]]
[GLOB.lawlorify[LAW][devil_mind.devilinfo.banish]]
") devil_mind.devilinfo.owner = devil_mind devil_mind.devilinfo.give_base_spells(1) spawn(10) @@ -67,10 +67,10 @@ to_chat(current, "However, your infernal form is not without weaknesses.") to_chat(current, "You may not use violence to coerce someone into selling their soul.") to_chat(current, "You may not directly and knowingly physically harm a devil, other than yourself.") - to_chat(current, lawlorify[LAW][src.devilinfo.bane]) - to_chat(current, lawlorify[LAW][src.devilinfo.ban]) - to_chat(current, lawlorify[LAW][src.devilinfo.obligation]) - to_chat(current, lawlorify[LAW][src.devilinfo.banish]) + to_chat(current, GLOB.lawlorify[LAW][src.devilinfo.bane]) + to_chat(current, GLOB.lawlorify[LAW][src.devilinfo.ban]) + to_chat(current, GLOB.lawlorify[LAW][src.devilinfo.obligation]) + to_chat(current, GLOB.lawlorify[LAW][src.devilinfo.banish]) to_chat(current, "

Remember, the crew can research your weaknesses if they find out your devil name.
") /datum/game_mode/proc/printdevilinfo(datum/mind/ply) @@ -78,38 +78,38 @@ return "Target is not a devil." var/text = "
The devil's true name is: [ply.devilinfo.truename]
" text += "The devil's bans were:
" - text += " [lawlorify[LORE][ply.devilinfo.ban]]
" - text += " [lawlorify[LORE][ply.devilinfo.bane]]
" - text += " [lawlorify[LORE][ply.devilinfo.obligation]]
" - text += " [lawlorify[LORE][ply.devilinfo.banish]]

" + text += " [GLOB.lawlorify[LORE][ply.devilinfo.ban]]
" + text += " [GLOB.lawlorify[LORE][ply.devilinfo.bane]]
" + text += " [GLOB.lawlorify[LORE][ply.devilinfo.obligation]]
" + text += " [GLOB.lawlorify[LORE][ply.devilinfo.banish]]

" return text /datum/game_mode/proc/update_devil_icons_added(datum/mind/devil_mind) - var/datum/atom_hud/antag/hud = huds[ANTAG_HUD_DEVIL] + var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_DEVIL] hud.join_hud(devil_mind.current) set_antag_hud(devil_mind.current, "devil") /datum/game_mode/proc/update_devil_icons_removed(datum/mind/devil_mind) - var/datum/atom_hud/antag/hud = huds[ANTAG_HUD_DEVIL] + var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_DEVIL] hud.leave_hud(devil_mind.current) set_antag_hud(devil_mind.current, null) /datum/game_mode/proc/update_sintouched_icons_added(datum/mind/sintouched_mind) - var/datum/atom_hud/antag/hud = huds[ANTAG_HUD_SINTOUCHED] + var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_SINTOUCHED] hud.join_hud(sintouched_mind.current) set_antag_hud(sintouched_mind.current, "sintouched") /datum/game_mode/proc/update_sintouched_icons_removed(datum/mind/sintouched_mind) - var/datum/atom_hud/antag/hud = huds[ANTAG_HUD_SINTOUCHED] + var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_SINTOUCHED] hud.leave_hud(sintouched_mind.current) set_antag_hud(sintouched_mind.current, null) /datum/game_mode/proc/update_soulless_icons_added(datum/mind/soulless_mind) - var/datum/atom_hud/antag/hud = huds[ANTAG_HUD_SOULLESS] + var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_SOULLESS] hud.join_hud(soulless_mind.current) set_antag_hud(soulless_mind.current, "soulless") /datum/game_mode/proc/update_soulless_icons_removed(datum/mind/soulless_mind) - var/datum/atom_hud/antag/hud = huds[ANTAG_HUD_SOULLESS] + var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_SOULLESS] hud.leave_hud(soulless_mind.current) set_antag_hud(soulless_mind.current, null) diff --git a/code/game/gamemodes/devil/imp/imp.dm b/code/game/gamemodes/devil/imp/imp.dm index 3698a391e1..602fbf765e 100644 --- a/code/game/gamemodes/devil/imp/imp.dm +++ b/code/game/gamemodes/devil/imp/imp.dm @@ -30,9 +30,9 @@ melee_damage_lower = 10 melee_damage_upper = 15 see_in_dark = 8 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE var/boost = 0 bloodcrawl = BLOODCRAWL_EAT - see_invisible = SEE_INVISIBLE_MINIMUM var/list/consumed_mobs = list() var/playstyle_string = "You are an imp, a mischevious creature from hell. You are the lowest rank on the hellish totem pole \ Though you are not obligated to help, perhaps by aiding a higher ranking devil, you might just get a promotion. However, you are incapable \ diff --git a/code/game/gamemodes/devil/objectives.dm b/code/game/gamemodes/devil/objectives.dm index bd4d309127..95af5ae747 100644 --- a/code/game/gamemodes/devil/objectives.dm +++ b/code/game/gamemodes/devil/objectives.dm @@ -68,7 +68,7 @@ explanation_text = "Ensure at least [target_amount] mortals are sintouched." /datum/objective/devil/sintouch/check_completion() - return target_amount>=ticker.mode.sintouched.len + return target_amount>=SSticker.mode.sintouched.len diff --git a/code/game/gamemodes/devil/true_devil/_true_devil.dm b/code/game/gamemodes/devil/true_devil/_true_devil.dm index c7af40414b..7f908756b9 100644 --- a/code/game/gamemodes/devil/true_devil/_true_devil.dm +++ b/code/game/gamemodes/devil/true_devil/_true_devil.dm @@ -14,11 +14,9 @@ ventcrawler = VENTCRAWLER_NONE density = 1 pass_flags = 0 - var/ascended = 0 + var/ascended = FALSE sight = (SEE_TURFS | SEE_OBJS) status_flags = CANPUSH - languages_spoken = ALL //The devil speaks all languages meme - languages_understood = ALL //The devil speaks all languages meme mob_size = MOB_SIZE_LARGE var/mob/living/oldform var/list/devil_overlays[DEVIL_TOTAL_LAYERS] @@ -31,6 +29,8 @@ create_bodyparts() //initialize bodyparts create_internal_organs() + + grant_all_languages(omnitongue=TRUE) ..() /mob/living/carbon/true_devil/create_internal_organs() @@ -42,7 +42,7 @@ /mob/living/carbon/true_devil/proc/convert_to_archdevil() maxHealth = 5000 // not an IMPOSSIBLE amount, but still near impossible. - ascended = 1 + ascended = TRUE health = maxHealth icon_state = "arch_devil" @@ -153,7 +153,6 @@ S.mind.objectives += newobjective to_chat(S, S.playstyle_string) to_chat(S, "Objective #[1]: [newobjective.explanation_text]") - return else return ..() @@ -221,4 +220,4 @@ return /mob/living/carbon/true_devil/update_damage_overlays() //devils don't have damage overlays. - return \ No newline at end of file + return diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index d0856b0bb0..b44b6b58b6 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -1,6 +1,6 @@ /proc/power_failure() priority_announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Critical Power Failure", 'sound/AI/poweroff.ogg') - for(var/obj/machinery/power/smes/S in machines) + for(var/obj/machinery/power/smes/S in GLOB.machines) if(istype(get_area(S), /area/ai_monitored/turret_protected) || S.z != ZLEVEL_STATION) continue S.charge = 0 @@ -31,7 +31,7 @@ A.power_environ = 0 A.power_change() - for(var/obj/machinery/power/apc/C in apcs_list) + for(var/obj/machinery/power/apc/C in GLOB.apcs_list) if(C.cell && C.z == ZLEVEL_STATION) var/area/A = get_area(C) @@ -47,11 +47,11 @@ /proc/power_restore() priority_announce("Power has been restored to [station_name()]. We apologize for the inconvenience.", "Power Systems Nominal", 'sound/AI/poweron.ogg') - for(var/obj/machinery/power/apc/C in machines) + for(var/obj/machinery/power/apc/C in GLOB.machines) if(C.cell && C.z == ZLEVEL_STATION) C.cell.charge = C.cell.maxcharge C.failure_timer = 0 - for(var/obj/machinery/power/smes/S in machines) + for(var/obj/machinery/power/smes/S in GLOB.machines) if(S.z != ZLEVEL_STATION) continue S.charge = S.capacity @@ -69,7 +69,7 @@ /proc/power_restore_quick() priority_announce("All SMESs on [station_name()] have been recharged. We apologize for the inconvenience.", "Power Systems Nominal", 'sound/AI/poweron.ogg') - for(var/obj/machinery/power/smes/S in machines) + for(var/obj/machinery/power/smes/S in GLOB.machines) if(S.z != ZLEVEL_STATION) continue S.charge = S.capacity diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 65a5529f2a..7dda5a619e 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -53,14 +53,14 @@ ///Checks to see if the game can be setup and ran with the current number of players or whatnot. /datum/game_mode/proc/can_start() var/playerC = 0 - for(var/mob/dead/new_player/player in player_list) + for(var/mob/dead/new_player/player in GLOB.player_list) if((player.client)&&(player.ready)) playerC++ - if(!Debug2) + if(!GLOB.Debug2) if(playerC < required_players || (maximum_players >= 0 && playerC > maximum_players)) return 0 antag_candidates = get_players_for_role(antag_flag) - if(!Debug2) + if(!GLOB.Debug2) if(antag_candidates.len < required_enemies) return 0 return 1 @@ -82,17 +82,17 @@ display_roundstart_logout_report() feedback_set_details("round_start","[time2text(world.realtime)]") - if(ticker && ticker.mode) - feedback_set_details("game_mode","[ticker.mode]") - if(revdata.commit) - feedback_set_details("revision","[revdata.commit]") + if(SSticker && SSticker.mode) + feedback_set_details("game_mode","[SSticker.mode]") + if(GLOB.revdata.commit) + feedback_set_details("revision","[GLOB.revdata.commit]") feedback_set_details("server_ip","[world.internet_address]:[world.port]") if(report) spawn (rand(waittime_l, waittime_h)) send_intercept(0) generate_station_goals() - start_state = new /datum/station_state() - start_state.count(1) + GLOB.start_state = new /datum/station_state() + GLOB.start_state.count(1) return 1 @@ -107,10 +107,10 @@ /datum/game_mode/proc/convert_roundtype() var/list/living_crew = list() - for(var/mob/Player in mob_list) + for(var/mob/Player in GLOB.mob_list) if(Player.mind && Player.stat != DEAD && !isnewplayer(Player) &&!isbrain(Player)) living_crew += Player - if(living_crew.len / joined_player_list.len <= config.midround_antag_life_check) //If a lot of the player base died, we start fresh + if(living_crew.len / GLOB.joined_player_list.len <= config.midround_antag_life_check) //If a lot of the player base died, we start fresh message_admins("Convert_roundtype failed due to too many dead people. Limit is [config.midround_antag_life_check * 100]% living crew") return null @@ -159,7 +159,7 @@ message_admins("The roundtype will be converted. If you have other plans for the station or feel the station is too messed up to inhabit stop the creation of antags or end the round now.") spawn(rand(600,1800)) //somewhere between 1 and 3 minutes from now - if(!config.midround_antag[ticker.mode.config_tag]) + if(!config.midround_antag[SSticker.mode.config_tag]) round_converted = 0 return 1 for(var/mob/living/carbon/human/H in antag_candidates) @@ -169,12 +169,12 @@ return 1 -///Called by the gameticker +///Called by the gameSSticker /datum/game_mode/process() return 0 -/datum/game_mode/proc/check_finished() //to be called by ticker +/datum/game_mode/proc/check_finished() //to be called by SSticker if(replacementmode && round_converted == 2) return replacementmode.check_finished() if(SSshuttle.emergency && (SSshuttle.emergency.mode == SHUTTLE_ENDGAME)) @@ -183,7 +183,7 @@ return TRUE if(!round_converted && (!config.continuous[config_tag] || (config.continuous[config_tag] && config.midround_antag[config_tag]))) //Non-continuous or continous with replacement antags if(!continuous_sanity_checked) //make sure we have antags to be checking in the first place - for(var/mob/Player in mob_list) + for(var/mob/Player in GLOB.mob_list) if(Player.mind) if(Player.mind.special_role) continuous_sanity_checked = 1 @@ -199,7 +199,7 @@ if(living_antag_player && living_antag_player.mind && isliving(living_antag_player) && living_antag_player.stat != DEAD && !isnewplayer(living_antag_player) &&!isbrain(living_antag_player)) return 0 //A resource saver: once we find someone who has to die for all antags to be dead, we can just keep checking them, cycling over everyone only when we lose our mark. - for(var/mob/Player in living_mob_list) + for(var/mob/Player in GLOB.living_mob_list) if(Player.mind && Player.stat != DEAD && !isnewplayer(Player) &&!isbrain(Player)) if(Player.mind.special_role) //Someone's still antaging! living_antag_player = Player @@ -228,7 +228,7 @@ var/escaped_humans = 0 var/escaped_total = 0 - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) if(M.client) clients++ if(ishuman(M)) @@ -291,7 +291,7 @@ print_command_report(intercepttext, "Central Command Status Summary", announce=FALSE) priority_announce("A summary has been copied and printed to all communications consoles.", "Enemy communication intercepted. Security level elevated.", 'sound/AI/intercept.ogg') - if(security_level < SEC_LEVEL_BLUE) + if(GLOB.security_level < SEC_LEVEL_BLUE) set_security_level(SEC_LEVEL_BLUE) @@ -302,7 +302,7 @@ var/datum/mind/applicant = null // Ultimate randomizing code right here - for(var/mob/dead/new_player/player in player_list) + for(var/mob/dead/new_player/player in GLOB.player_list) if(player.client && player.ready) players += player @@ -385,7 +385,7 @@ /datum/game_mode/proc/num_players() . = 0 - for(var/mob/dead/new_player/P in player_list) + for(var/mob/dead/new_player/P in GLOB.player_list) if(P.client && P.ready) . ++ @@ -394,8 +394,8 @@ /////////////////////////////////// /datum/game_mode/proc/get_living_heads() . = list() - for(var/mob/living/carbon/human/player in mob_list) - if(player.stat != DEAD && player.mind && (player.mind.assigned_role in command_positions)) + for(var/mob/living/carbon/human/player in GLOB.mob_list) + if(player.stat != DEAD && player.mind && (player.mind.assigned_role in GLOB.command_positions)) . |= player.mind @@ -404,8 +404,8 @@ //////////////////////////// /datum/game_mode/proc/get_all_heads() . = list() - for(var/mob/player in mob_list) - if(player.mind && (player.mind.assigned_role in command_positions)) + for(var/mob/player in GLOB.mob_list) + if(player.mind && (player.mind.assigned_role in GLOB.command_positions)) . |= player.mind ////////////////////////////////////////////// @@ -413,8 +413,8 @@ ////////////////////////////////////////////// /datum/game_mode/proc/get_living_sec() . = list() - for(var/mob/living/carbon/human/player in mob_list) - if(player.stat != DEAD && player.mind && (player.mind.assigned_role in security_positions)) + for(var/mob/living/carbon/human/player in GLOB.mob_list) + if(player.stat != DEAD && player.mind && (player.mind.assigned_role in GLOB.security_positions)) . |= player.mind //////////////////////////////////////// @@ -422,8 +422,8 @@ //////////////////////////////////////// /datum/game_mode/proc/get_all_sec() . = list() - for(var/mob/living/carbon/human/player in mob_list) - if(player.mind && (player.mind.assigned_role in security_positions)) + for(var/mob/living/carbon/human/player in GLOB.mob_list) + if(player.mind && (player.mind.assigned_role in GLOB.security_positions)) . |= player.mind ////////////////////////// @@ -431,11 +431,11 @@ ////////////////////////// /proc/display_roundstart_logout_report() var/msg = "Roundstart logout report\n\n" - for(var/mob/living/L in mob_list) + for(var/mob/living/L in GLOB.mob_list) if(L.ckey) var/found = 0 - for(var/client/C in clients) + for(var/client/C in GLOB.clients) if(C.ckey == L.ckey) found = 1 break @@ -459,7 +459,7 @@ continue //Dead continue //Happy connected client - for(var/mob/dead/observer/D in mob_list) + for(var/mob/dead/observer/D in GLOB.mob_list) if(D.mind && D.mind.current == L) if(L.stat == DEAD) if(L.suiciding) //Suicider @@ -477,7 +477,7 @@ - for(var/mob/M in mob_list) + for(var/mob/M in GLOB.mob_list) if(M.client && M.client.holder) to_chat(M, msg) @@ -537,9 +537,9 @@ M.key = theghost.key /datum/game_mode/proc/remove_antag_for_borging(datum/mind/newborgie) - ticker.mode.remove_cultist(newborgie, 0, 0) - ticker.mode.remove_revolutionary(newborgie, 0) - ticker.mode.remove_gangster(newborgie, 0, remove_bosses=1) + SSticker.mode.remove_cultist(newborgie, 0, 0) + SSticker.mode.remove_revolutionary(newborgie, 0) + SSticker.mode.remove_gangster(newborgie, 0, remove_bosses=1) /datum/game_mode/proc/generate_station_goals() var/list/possible = list() diff --git a/code/game/gamemodes/gang/dominator.dm b/code/game/gamemodes/gang/dominator.dm index 388404118f..1e48e69d39 100644 --- a/code/game/gamemodes/gang/dominator.dm +++ b/code/game/gamemodes/gang/dominator.dm @@ -22,7 +22,7 @@ /obj/machinery/dominator/New() ..() set_light(2) - poi_list |= src + GLOB.poi_list |= src spark_system = new spark_system.set_up(5, 1, src) countdown = new(src) @@ -54,12 +54,12 @@ warned = 1 var/area/domloc = get_area(loc) gang.message_gangtools("Less than 3 minutes remains in hostile takeover. Defend your dominator at [domloc.map_name]!") - for(var/datum/gang/G in ticker.mode.gangs) + for(var/datum/gang/G in SSticker.mode.gangs) if(G != gang) G.message_gangtools("WARNING: [gang.name] Gang takeover imminent. Their dominator at [domloc.map_name] must be destroyed!",1,1) if(!.) - STOP_PROCESSING(SSmachine, src) + STOP_PROCESSING(SSmachines, src) /obj/machinery/dominator/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) @@ -102,7 +102,7 @@ gang.is_dominating = FALSE var/takeover_in_progress = 0 - for(var/datum/gang/G in ticker.mode.gangs) + for(var/datum/gang/G in SSticker.mode.gangs) if(G.is_dominating) takeover_in_progress = 1 break @@ -122,17 +122,17 @@ cut_overlays() operating = 0 stat |= BROKEN - STOP_PROCESSING(SSmachine, src) + STOP_PROCESSING(SSmachines, src) /obj/machinery/dominator/Destroy() if(!(stat & BROKEN)) set_broken() - poi_list.Remove(src) + GLOB.poi_list.Remove(src) gang = null qdel(spark_system) qdel(countdown) countdown = null - STOP_PROCESSING(SSmachine, src) + STOP_PROCESSING(SSmachines, src) return ..() /obj/machinery/dominator/emp_act(severity) @@ -146,7 +146,7 @@ var/datum/gang/tempgang - if(user.mind in ticker.mode.get_all_gangsters()) + if(user.mind in SSticker.mode.get_all_gangsters()) tempgang = user.mind.gang_datum else examine(user) @@ -161,7 +161,7 @@ return var/time = round(determine_domination_time(tempgang)/60,0.1) - if(alert(user,"With [round((tempgang.territory.len/start_state.num_territories)*100, 1)]% station control, a takeover will require [time] minutes.\nYour gang will be unable to gain influence while it is active.\nThe entire station will likely be alerted to it once it starts.\nYou have [tempgang.dom_attempts] attempt(s) remaining. Are you ready?","Confirm","Ready","Later") == "Ready") + if(alert(user,"With [round((tempgang.territory.len/GLOB.start_state.num_territories)*100, 1)]% station control, a takeover will require [time] minutes.\nYour gang will be unable to gain influence while it is active.\nThe entire station will likely be alerted to it once it starts.\nYou have [tempgang.dom_attempts] attempt(s) remaining. Are you ready?","Confirm","Ready","Later") == "Ready") if((tempgang.is_dominating) || !tempgang.dom_attempts || !in_range(src, user) || !isturf(loc)) return 0 @@ -181,9 +181,9 @@ countdown.start() set_light(3) - START_PROCESSING(SSmachine, src) + START_PROCESSING(SSmachines, src) gang.message_gangtools("Hostile takeover in progress: Estimated [time] minutes until victory.[gang.dom_attempts ? "" : " This is your final attempt."]") - for(var/datum/gang/G in ticker.mode.gangs) + for(var/datum/gang/G in SSticker.mode.gangs) if(G != gang) G.message_gangtools("Enemy takeover attempt detected in [locname]: Estimated [time] minutes until our defeat.",1,1) diff --git a/code/game/gamemodes/gang/gang.dm b/code/game/gamemodes/gang/gang.dm index b6a5d64e7a..51a9d21195 100644 --- a/code/game/gamemodes/gang/gang.dm +++ b/code/game/gamemodes/gang/gang.dm @@ -1,8 +1,8 @@ //gang.dm //Gang War Game Mode -var/list/gang_name_pool = list("Clandestine", "Prima", "Zero-G", "Max", "Blasto", "Waffle", "North", "Omni", "Newton", "Cyber", "Donk", "Gene", "Gib", "Tunnel", "Diablo", "Psyke", "Osiron", "Sirius", "Sleeping Carp") -var/list/gang_colors_pool = list("red","orange","yellow","green","blue","purple") +GLOBAL_LIST_INIT(gang_name_pool, list("Clandestine", "Prima", "Zero-G", "Max", "Blasto", "Waffle", "North", "Omni", "Newton", "Cyber", "Donk", "Gene", "Gib", "Tunnel", "Diablo", "Psyke", "Osiron", "Sirius", "Sleeping Carp")) +GLOBAL_LIST_INIT(gang_colors_pool, list("red","orange","yellow","green","blue","purple")) /datum/game_mode var/list/datum/gang/gangs = list() @@ -248,7 +248,7 @@ var/list/gang_colors_pool = list("red","orange","yellow","green","blue","purple" return gang_bosses /proc/determine_domination_time(var/datum/gang/G) - return max(180,900 - (round((G.territory.len/start_state.num_territories)*100, 1) * 12)) + return max(180,900 - (round((G.territory.len/GLOB.start_state.num_territories)*100, 1) * 12)) ////////////////////////////////////////////////////////////////////// //Announces the end of the game with all relavent information stated// @@ -261,15 +261,15 @@ var/list/gang_colors_pool = list("red","orange","yellow","green","blue","purple" to_chat(world, "The station was [station_was_nuked ? "destroyed!" : "evacuated before a gang could claim it! The station wins!"]
") feedback_set_details("round_end_result","loss - gangs failed takeover") - ticker.news_report = GANG_LOSS + SSticker.news_report = GANG_LOSS else to_chat(world, "The [winner.name] Gang successfully performed a hostile takeover of the station!
") feedback_set_details("round_end_result","win - gang domination complete") - ticker.news_report = GANG_TAKEOVER + SSticker.news_report = GANG_TAKEOVER for(var/datum/gang/G in gangs) - var/text = "The [G.name] Gang was [winner==G ? "victorious" : "defeated"] with [round((G.territory.len/start_state.num_territories)*100, 1)]% control of the station!" + var/text = "The [G.name] Gang was [winner==G ? "victorious" : "defeated"] with [round((G.territory.len/GLOB.start_state.num_territories)*100, 1)]% control of the station!" text += "
The [G.name] Gang Bosses were:" for(var/datum/mind/boss in G.bosses) text += printplayer(boss, 1) @@ -294,7 +294,7 @@ var/list/gang_colors_pool = list("red","orange","yellow","green","blue","purple" /datum/gang_points/process(seconds) var/list/winners = list() //stores the winners if there are any - for(var/datum/gang/G in ticker.mode.gangs) + for(var/datum/gang/G in SSticker.mode.gangs) if(world.time > next_point_time) G.income() @@ -311,7 +311,7 @@ var/list/gang_colors_pool = list("red","orange","yellow","green","blue","purple" G.domination(0.5) priority_announce("Multiple station takeover attempts have made simultaneously. Conflicting takeover attempts appears to have restarted.","Network Alert") else - ticker.mode.explosion_in_progress = 1 - ticker.station_explosion_cinematic(1) - ticker.mode.explosion_in_progress = 0 - ticker.force_ending = pick(winners) + SSticker.mode.explosion_in_progress = 1 + SSticker.station_explosion_cinematic(1) + SSticker.mode.explosion_in_progress = 0 + SSticker.force_ending = pick(winners) diff --git a/code/game/gamemodes/gang/gang_datum.dm b/code/game/gamemodes/gang/gang_datum.dm index 78d75c957f..3c54d5436b 100644 --- a/code/game/gamemodes/gang/gang_datum.dm +++ b/code/game/gamemodes/gang/gang_datum.dm @@ -42,13 +42,13 @@ ) /datum/gang/New(loc,gangname) - if(!gang_colors_pool.len) + if(!GLOB.gang_colors_pool.len) message_admins("WARNING: Maximum number of gangs have been exceeded!") throw EXCEPTION("Maximum number of gangs has been exceeded") return else - color = pick(gang_colors_pool) - gang_colors_pool -= color + color = pick(GLOB.gang_colors_pool) + GLOB.gang_colors_pool -= color switch(color) if("red") color_hex = "#DA0000" @@ -63,8 +63,8 @@ if("purple") color_hex = "#DA00FF" - name = (gangname ? gangname : pick(gang_name_pool)) - gang_name_pool -= name + name = (gangname ? gangname : pick(GLOB.gang_name_pool)) + GLOB.gang_name_pool -= name ganghud = new() ganghud.color = color_hex @@ -85,11 +85,11 @@ /datum/gang/proc/add_gang_hud(datum/mind/recruit_mind) ganghud.join_hud(recruit_mind.current) - ticker.mode.set_antag_hud(recruit_mind.current, ((recruit_mind in bosses) ? "gang_boss" : "gangster")) + SSticker.mode.set_antag_hud(recruit_mind.current, ((recruit_mind in bosses) ? "gang_boss" : "gangster")) /datum/gang/proc/remove_gang_hud(datum/mind/defector_mind) ganghud.leave_hud(defector_mind.current) - ticker.mode.set_antag_hud(defector_mind.current, null) + SSticker.mode.set_antag_hud(defector_mind.current, null) /datum/gang/proc/domination(modifier=1) set_domination_time(determine_domination_time(src) * modifier) @@ -113,7 +113,7 @@ return 0 var/gang_style_list = list("Gang Colors","Black Suits","White Suits","Leather Jackets","Leather Overcoats","Puffer Jackets","Military Jackets","Tactical Turtlenecks","Soviet Uniforms") - if(!style && (user.mind in ticker.mode.get_gang_bosses())) //Only the boss gets to pick a style + if(!style && (user.mind in SSticker.mode.get_gang_bosses())) //Only the boss gets to pick a style style = input("Pick an outfit style.", "Pick Style") as null|anything in gang_style_list if(gangtool.can_use(user) && (gangtool.outfits >= 1)) @@ -240,7 +240,7 @@ territory_new = list() territory_lost = list() - var/control = round((territory.len/start_state.num_territories)*100, 1) + var/control = round((territory.len/GLOB.start_state.num_territories)*100, 1) message += "Your gang now has [control]% control of the station.
*---------*" message_gangtools(message) diff --git a/code/game/gamemodes/gang/gang_pen.dm b/code/game/gamemodes/gang/gang_pen.dm index fb7dbf5258..5045c27485 100644 --- a/code/game/gamemodes/gang/gang_pen.dm +++ b/code/game/gamemodes/gang/gang_pen.dm @@ -15,7 +15,7 @@ if(!istype(M)) return if(ishuman(M) && ishuman(user) && M.stat != DEAD) - if(user.mind && (user.mind in ticker.mode.get_gang_bosses())) + if(user.mind && (user.mind in SSticker.mode.get_gang_bosses())) if(..(M,user,1)) if(cooldown) to_chat(user, "[src] needs more time to recharge before it can be used.") @@ -23,7 +23,7 @@ if(M.client) M.mind_initialize() //give them a mind datum if they don't have one. var/datum/gang/G = user.mind.gang_datum - var/recruitable = ticker.mode.add_gangster(M.mind,G) + var/recruitable = SSticker.mode.add_gangster(M.mind,G) switch(recruitable) if(2) M.Paralyse(5) diff --git a/code/game/gamemodes/gang/recaller.dm b/code/game/gamemodes/gang/recaller.dm index 423380c809..0885b32612 100644 --- a/code/game/gamemodes/gang/recaller.dm +++ b/code/game/gamemodes/gang/recaller.dm @@ -16,9 +16,10 @@ var/free_pen = 0 var/promotable = 0 -/obj/item/device/gangtool/New() //Initialize supply point income if it hasn't already been started - if(!ticker.mode.gang_points) - ticker.mode.gang_points = new /datum/gang_points(ticker.mode) +/obj/item/device/gangtool/Initialize() //Initialize supply point income if it hasn't already been started + ..() + if(!SSticker.mode.gang_points) + SSticker.mode.gang_points = new /datum/gang_points(SSticker.mode) /obj/item/device/gangtool/attack_self(mob/user) if (!can_use(user)) @@ -27,7 +28,7 @@ var/dat if(!gang) dat += "This device is not registered.

" - if(user.mind in ticker.mode.get_gang_bosses()) + if(user.mind in SSticker.mode.get_gang_bosses()) if(promotable && user.mind.gang_datum.bosses.len < 3) dat += "Give this device to another member of your organization to use to promote them to Lieutenant.

" dat += "If this is meant as a spare device for yourself:
" @@ -46,9 +47,9 @@ var/isboss = (user.mind == gang.bosses[1]) dat += "Registration: [gang.name] Gang [isboss ? "Boss" : "Lieutenant"]
" - dat += "Organization Size: [gang.gangsters.len + gang.bosses.len] | Station Control: [round((gang.territory.len/start_state.num_territories)*100, 1)]%
" + dat += "Organization Size: [gang.gangsters.len + gang.bosses.len] | Station Control: [round((gang.territory.len/GLOB.start_state.num_territories)*100, 1)]%
" dat += "Gang Influence: [gang.points]
" - dat += "Time until Influence grows: [(gang.points >= 999) ? ("--:--") : (time2text(ticker.mode.gang_points.next_point_time - world.time, "mm:ss"))]
" + dat += "Time until Influence grows: [(gang.points >= 999) ? ("--:--") : (time2text(SSticker.mode.gang_points.next_point_time - world.time, "mm:ss"))]
" dat += "
" @@ -130,7 +131,7 @@ for(var/datum/mind/ganger in members) if(ganger.current && (ganger.current.z <= 2) && (ganger.current.stat == CONSCIOUS)) to_chat(ganger.current, ping) - for(var/mob/M in dead_mob_list) + for(var/mob/M in GLOB.dead_mob_list) var/link = FOLLOW_LINK(M, user) to_chat(M, "[link] [ping]") log_game("[key_name(user)] Messaged [gang.name] Gang: [message].") @@ -139,12 +140,12 @@ /obj/item/device/gangtool/proc/register_device(mob/user) if(gang) //It's already been registered! return - if((promotable && (user.mind in ticker.mode.get_gangsters())) || (user.mind in ticker.mode.get_gang_bosses())) + if((promotable && (user.mind in SSticker.mode.get_gangsters())) || (user.mind in SSticker.mode.get_gang_bosses())) gang = user.mind.gang_datum gang.gangtools += src icon_state = "gangtool-[gang.color]" if(!(user.mind in gang.bosses)) - ticker.mode.remove_gangster(user.mind, 0, 2) + SSticker.mode.remove_gangster(user.mind, 0, 2) gang.bosses += user.mind user.mind.gang_datum = gang user.mind.special_role = "[gang.name] Gang Lieutenant" @@ -153,8 +154,8 @@ free_pen = 1 gang.message_gangtools("[user] has been promoted to Lieutenant.") to_chat(user, "You have been promoted to Lieutenant!") - ticker.mode.forge_gang_objectives(user.mind) - ticker.mode.greet_gang(user.mind,0) + SSticker.mode.forge_gang_objectives(user.mind) + SSticker.mode.greet_gang(user.mind,0) to_chat(user, "The Gangtool you registered will allow you to purchase weapons and equipment, and send messages to your gang.") to_chat(user, "Unlike regular gangsters, you may use recruitment pens to add recruits to your gang. Use them on unsuspecting crew members to recruit them. Don't forget to get your one free pen from the gangtool.") else @@ -194,7 +195,7 @@ return 0 var/datum/station_state/end_state = new /datum/station_state() end_state.count() - if((100 * start_state.score(end_state)) < 80) //Shuttle cannot be recalled if the station is too damaged + if((100 * GLOB.start_state.score(end_state)) < 80) //Shuttle cannot be recalled if the station is too damaged to_chat(user, "\icon[src]Error: Station communication systems compromised. Unable to establish connection.") recalling = 0 return 0 @@ -227,7 +228,7 @@ if(user.mind in gang.bosses) return 1 else //If it's not registered, any gangster can use this to register - if(user.mind in ticker.mode.get_all_gangsters()) + if(user.mind in SSticker.mode.get_all_gangsters()) return 1 return 0 diff --git a/code/game/gamemodes/intercept_report.dm b/code/game/gamemodes/intercept_report.dm index 9f220ca4f5..febef46e74 100644 --- a/code/game/gamemodes/intercept_report.dm +++ b/code/game/gamemodes/intercept_report.dm @@ -51,7 +51,7 @@ text += "Although more specific threats are commonplace, you should always remain vigilant for Syndicate agents aboard your station. Syndicate communications have implied that many \ Nanotrasen employees are Syndicate agents with hidden memories that may be activated at a moment's notice, so it's possible that these agents might not even know their positions." if("wizard") - text += "A dangerous Wizards' Federation individual by the name of [pick(wizard_first)] [pick(wizard_second)] has recently escaped confinement from an unlisted prison facility. This \ + text += "A dangerous Wizards' Federation individual by the name of [pick(GLOB.wizard_first)] [pick(GLOB.wizard_second)] has recently escaped confinement from an unlisted prison facility. This \ man is a dangerous mutant with the ability to alter himself and the world around him by what he and his leaders believe to be magic. If this man attempts an attack on your station, \ his execution is highly encouraged, as is the preservation of his body for later study." return text diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index a63901a80e..d581af11b9 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -42,7 +42,7 @@ doomsday_device = DOOM doomsday_device.start() verbs -= /mob/living/silicon/ai/proc/nuke_station - for(var/obj/item/weapon/pinpointer/P in pinpointer_list) + for(var/obj/item/weapon/pinpointer/P in GLOB.pinpointer_list) P.switch_mode_to(TRACK_MALF_AI) //Pinpointers start tracking the AI wherever it goes /obj/machinery/doomsday_device @@ -70,7 +70,7 @@ STOP_PROCESSING(SSfastprocess, src) SSshuttle.clearHostileEnvironment(src) SSmapping.remove_nuke_threat(src) - for(var/A in ai_list) + for(var/A in GLOB.ai_list) var/mob/living/silicon/ai/Mlf = A if(Mlf.doomsday_device == src) Mlf.doomsday_device = null @@ -108,10 +108,10 @@ minor_announce(message, "ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4", 1) /obj/machinery/doomsday_device/proc/detonate(z_level = 1) - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) M << 'sound/machines/Alarm.ogg' sleep(100) - for(var/mob/living/L in mob_list) + for(var/mob/living/L in GLOB.mob_list) var/turf/T = get_turf(L) if(!T || T.z != z_level) continue @@ -120,7 +120,7 @@ to_chat(L, "The blast wave from [src] tears you atom from atom!") L.dust() to_chat(world, "The AI cleansed the station of life with the doomsday device!") - ticker.force_ending = 1 + SSticker.force_ending = 1 /datum/AI_Module/large/upgrade_turrets module_name = "AI Turret Upgrade" @@ -140,7 +140,7 @@ src.verbs -= /mob/living/silicon/ai/proc/upgrade_turrets //Upgrade AI turrets around the world - for(var/obj/machinery/porta_turret/ai/turret in machines) + for(var/obj/machinery/porta_turret/ai/turret in GLOB.machines) turret.obj_integrity += 30 turret.lethal_projectile = /obj/item/projectile/beam/laser/heavylaser //Once you see it, you will know what it means to FEAR. turret.lethal_projectile_sound = 'sound/weapons/lasercannonfire.ogg' @@ -162,13 +162,13 @@ if(!canUseTopic()) return - for(var/obj/machinery/door/D in airlocks) + for(var/obj/machinery/door/D in GLOB.airlocks) if(D.z != ZLEVEL_STATION) continue INVOKE_ASYNC(D, /obj/machinery/door.proc/hostile_lockdown, src) addtimer(CALLBACK(D, /obj/machinery/door.proc/disable_lockdown), 900) - var/obj/machinery/computer/communications/C = locate() in machines + var/obj/machinery/computer/communications/C = locate() in GLOB.machines if(C) C.post_status("alert", "lockdown") @@ -196,7 +196,7 @@ if(!canUseTopic() || malf_cooldown) return - for(var/I in rcd_list) + for(var/I in GLOB.rcd_list) if(!istype(I, /obj/item/weapon/rcd/borg)) //Ensures that cyborg RCDs are spared. var/obj/item/weapon/rcd/RCD = I RCD.detonate_pulse() @@ -243,7 +243,7 @@ if(!canUseTopic()) return - for(var/obj/machinery/firealarm/F in machines) + for(var/obj/machinery/firealarm/F in GLOB.machines) if(F.z != ZLEVEL_STATION) continue F.emagged = 1 @@ -267,7 +267,7 @@ if(!canUseTopic()) return - for(var/obj/machinery/airalarm/AA in machines) + for(var/obj/machinery/airalarm/AA in GLOB.machines) if(AA.z != ZLEVEL_STATION) continue AA.emagged = 1 @@ -283,7 +283,7 @@ power_type = /mob/living/silicon/ai/proc/overload_machine -/mob/living/silicon/ai/proc/overload_machine(obj/machinery/M in machines) +/mob/living/silicon/ai/proc/overload_machine(obj/machinery/M in GLOB.machines) set name = "Overload Machine" set category = "Malfunction" @@ -313,7 +313,7 @@ power_type = /mob/living/silicon/ai/proc/override_machine -/mob/living/silicon/ai/proc/override_machine(obj/machinery/M in machines) +/mob/living/silicon/ai/proc/override_machine(obj/machinery/M in GLOB.machines) set name = "Override Machine" set category = "Malfunction" @@ -358,7 +358,8 @@ if(!canPlaceTransformer()) return var/turf/T = get_turf(eyeobj) - new /obj/machinery/transformer/conveyor(T) + var/obj/machinery/transformer/conveyor = new(T) + conveyor.masterAI = src playsound(T, 'sound/effects/phasein.ogg', 100, 1) var/datum/AI_Module/large/place_cyborg_transformer/PCT = locate() in current_modules PCT.uses -- @@ -382,7 +383,7 @@ var/turf/T = turfs[n] if(!isfloorturf(T)) fail = 1 - var/datum/camerachunk/C = cameranet.getCameraChunk(T.x, T.y, T.z) + var/datum/camerachunk/C = GLOB.cameranet.getCameraChunk(T.x, T.y, T.z) if(!C.visibleTurfs[T]) alert_msg = "We cannot get camera vision of this location." fail = 1 @@ -423,7 +424,7 @@ for(var/datum/AI_Module/small/blackout/blackout in current_modules) if(blackout.uses > 0) blackout.uses -- - for(var/obj/machinery/power/apc/apc in machines) + for(var/obj/machinery/power/apc/apc in GLOB.machines) if(prob(30*apc.overload)) apc.overload_lighting() else apc.overload++ @@ -449,7 +450,7 @@ var/fixedcams = 0 //Tells the AI how many cams it fixed. Stats are fun. for(var/datum/AI_Module/small/reactivate_cameras/camera in current_modules) - for(var/obj/machinery/camera/C in cameranet.cameras) + for(var/obj/machinery/camera/C in GLOB.cameranet.cameras) var/initial_range = initial(C.view_range) //To prevent calling the proc twice if(camera.uses > 0) if(!C.status) @@ -492,14 +493,14 @@ see_override = SEE_INVISIBLE_MINIMUM //Night-vision, without which X-ray would be very limited in power. update_sight() - for(var/obj/machinery/camera/C in cameranet.cameras) + for(var/obj/machinery/camera/C in GLOB.cameranet.cameras) if(C.assembly) var/upgraded = 0 if(!C.isXRay()) C.upgradeXRay() //Update what it can see. - cameranet.updateVisibility(C, 0) + GLOB.cameranet.updateVisibility(C, 0) upgraded = 1 if(!C.isEmpProof()) diff --git a/code/game/gamemodes/meteor/meteor.dm b/code/game/gamemodes/meteor/meteor.dm index 2e54b3c1e9..e1a2ddf78f 100644 --- a/code/game/gamemodes/meteor/meteor.dm +++ b/code/game/gamemodes/meteor/meteor.dm @@ -11,18 +11,18 @@ /datum/game_mode/meteor/process() - if(nometeors || meteordelay > world.time - round_start_time) + if(nometeors || meteordelay > world.time - SSticker.round_start_time) return - var/list/wavetype = meteors_normal - var/meteorminutes = (world.time - round_start_time - meteordelay) / 10 / 60 + var/list/wavetype = GLOB.meteors_normal + var/meteorminutes = (world.time - SSticker.round_start_time - meteordelay) / 10 / 60 if (prob(meteorminutes)) - wavetype = meteors_threatening + wavetype = GLOB.meteors_threatening if (prob(meteorminutes/2)) - wavetype = meteors_catastrophic + wavetype = GLOB.meteors_catastrophic var/ramp_up_final = Clamp(round(meteorminutes/rampupdelta), 1, 10) @@ -33,7 +33,7 @@ var/text var/survivors = 0 - for(var/mob/living/player in player_list) + for(var/mob/living/player in GLOB.player_list) if(player.stat != DEAD) ++survivors diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index 3f3f0e57cc..8f90cd892d 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -1,20 +1,20 @@ #define DEFAULT_METEOR_LIFETIME 1800 -/var/const/meteor_wave_delay = 625 //minimum wait between waves in tenths of seconds +GLOBAL_VAR_INIT(meteor_wave_delay, 625) //minimum wait between waves in tenths of seconds //set to at least 100 unless you want evarr ruining every round //Meteors probability of spawning during a given wave -/var/list/meteors_normal = list(/obj/effect/meteor/dust=3, /obj/effect/meteor/medium=8, /obj/effect/meteor/big=3, \ - /obj/effect/meteor/flaming=1, /obj/effect/meteor/irradiated=3) //for normal meteor event +GLOBAL_LIST_INIT(meteors_normal, list(/obj/effect/meteor/dust=3, /obj/effect/meteor/medium=8, /obj/effect/meteor/big=3, \ + /obj/effect/meteor/flaming=1, /obj/effect/meteor/irradiated=3)) //for normal meteor event -/var/list/meteors_threatening = list(/obj/effect/meteor/medium=4, /obj/effect/meteor/big=8, \ - /obj/effect/meteor/flaming=3, /obj/effect/meteor/irradiated=3) //for threatening meteor event +GLOBAL_LIST_INIT(meteors_threatening, list(/obj/effect/meteor/medium=4, /obj/effect/meteor/big=8, \ + /obj/effect/meteor/flaming=3, /obj/effect/meteor/irradiated=3)) //for threatening meteor event -/var/list/meteors_catastrophic = list(/obj/effect/meteor/medium=5, /obj/effect/meteor/big=75, \ - /obj/effect/meteor/flaming=10, /obj/effect/meteor/irradiated=10, /obj/effect/meteor/tunguska = 1) //for catastrophic meteor event +GLOBAL_LIST_INIT(meteors_catastrophic, list(/obj/effect/meteor/medium=5, /obj/effect/meteor/big=75, \ + /obj/effect/meteor/flaming=10, /obj/effect/meteor/irradiated=10, /obj/effect/meteor/tunguska = 1)) //for catastrophic meteor event -/var/list/meteorsB = list(/obj/effect/meteor/meaty=5, /obj/effect/meteor/meaty/xeno=1) //for meaty ore event +GLOBAL_LIST_INIT(meteorsB, list(/obj/effect/meteor/meaty=5, /obj/effect/meteor/meaty/xeno=1)) //for meaty ore event -/var/list/meteorsC = list(/obj/effect/meteor/dust) //for space dust event +GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event /////////////////////////////// @@ -30,7 +30,7 @@ var/turf/pickedgoal var/max_i = 10//number of tries to spawn meteor. while(!isspaceturf(pickedstart)) - var/startSide = pick(cardinal) + var/startSide = pick(GLOB.cardinal) pickedstart = spaceDebrisStartLoc(startSide, 1) pickedgoal = spaceDebrisFinishLoc(startSide, 1) max_i-- @@ -118,13 +118,13 @@ get_hit() /obj/effect/meteor/Destroy() - meteor_list -= src + GLOB.meteor_list -= src walk(src,0) //this cancels the walk_towards() proc . = ..() /obj/effect/meteor/New() ..() - meteor_list += src + GLOB.meteor_list += src if(SSaugury) SSaugury.register_doom(src, threat) SpinAnimation() @@ -185,7 +185,7 @@ /obj/effect/meteor/proc/meteor_effect() if(heavy) - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) if((M.orbiting) && (SSaugury.watchers[M])) continue var/turf/T = get_turf(M) @@ -343,7 +343,7 @@ //Spookoween meteors ///////////////////////// -/var/list/meteorsSPOOKY = list(/obj/effect/meteor/pumpkin) +GLOBAL_LIST_INIT(meteorsSPOOKY, list(/obj/effect/meteor/pumpkin)) /obj/effect/meteor/pumpkin name = "PUMPKING" diff --git a/code/game/gamemodes/miniantags/abduction/abduction.dm b/code/game/gamemodes/miniantags/abduction/abduction.dm index c1b0998a59..aa5a688596 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction.dm @@ -43,7 +43,7 @@ /datum/game_mode/abduction/proc/make_abductor_team(team_number,preset_agent=null,preset_scientist=null) //Team Name - team_names[team_number] = "Mothership [pick(possible_changeling_IDs)]" //TODO Ensure unique and actual alieny names + team_names[team_number] = "Mothership [pick(GLOB.possible_changeling_IDs)]" //TODO Ensure unique and actual alieny names //Team Objective var/datum/objective/experiment/team_objective = new team_objective.team = team_number @@ -90,7 +90,7 @@ var/list/obj/effect/landmark/abductor/scientist_landmarks = new agent_landmarks.len = max_teams scientist_landmarks.len = max_teams - for(var/obj/effect/landmark/abductor/A in landmarks_list) + for(var/obj/effect/landmark/abductor/A in GLOB.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)) @@ -137,7 +137,7 @@ var/list/obj/effect/landmark/abductor/scientist_landmarks = new agent_landmarks.len = max_teams scientist_landmarks.len = max_teams - for(var/obj/effect/landmark/abductor/A in landmarks_list) + for(var/obj/effect/landmark/abductor/A in GLOB.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)) @@ -201,7 +201,7 @@ abductor.announce_objectives() /datum/game_mode/abduction/proc/equip_common(mob/living/carbon/human/agent,team_number) - var/radio_freq = SYND_FREQ + var/radio_freq = GLOB.SYND_FREQ var/obj/item/device/radio/R = new /obj/item/device/radio/headset/syndicate/alt(agent) R.set_frequency(radio_freq) @@ -212,7 +212,7 @@ /datum/game_mode/abduction/proc/get_team_console(team) var/obj/machinery/abductor/console/console - for(var/obj/machinery/abductor/console/c in machines) + for(var/obj/machinery/abductor/console/c in GLOB.machines) if(c.team == team) console = c break @@ -319,7 +319,7 @@ return 0 var/datum/species/abductor/S = H.dna.species ab_team = S.team - for(var/obj/machinery/abductor/experiment/E in machines) + for(var/obj/machinery/abductor/experiment/E in GLOB.machines) if(E.team == ab_team) if(E.points >= target_amount) return 1 @@ -328,12 +328,12 @@ return 0 /datum/game_mode/proc/update_abductor_icons_added(datum/mind/alien_mind) - var/datum/atom_hud/antag/hud = huds[ANTAG_HUD_ABDUCTOR] + var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_ABDUCTOR] hud.join_hud(alien_mind.current) set_antag_hud(alien_mind.current, ((alien_mind in abductors) ? "abductor" : "abductee")) /datum/game_mode/proc/update_abductor_icons_removed(datum/mind/alien_mind) - var/datum/atom_hud/antag/hud = huds[ANTAG_HUD_ABDUCTOR] + var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_ABDUCTOR] hud.leave_hud(alien_mind.current) set_antag_hud(alien_mind.current, null) @@ -428,7 +428,7 @@ explanation_text = "Call forth a spirit from the other side." /datum/objective/abductee/calling/New() - var/mob/dead/D = pick(dead_mob_list) + var/mob/dead/D = pick(GLOB.dead_mob_list) if(D) explanation_text = "You know that [D] has perished. Hold a seance to call them from the spirit realm." diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index b5f946b18c..f735bf253c 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -389,7 +389,7 @@ Congratulations! You are now trained for invasive xenobiology research!"} if(ishuman(L)) var/mob/living/carbon/human/H = L - H.forcesay(hit_appends) + H.forcesay(GLOB.hit_appends) add_logs(user, L, "stunned") diff --git a/code/game/gamemodes/miniantags/abduction/machinery/camera.dm b/code/game/gamemodes/miniantags/abduction/machinery/camera.dm index f893ad1bb8..4bbdd0ca18 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/camera.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/camera.dm @@ -10,6 +10,7 @@ var/datum/action/innate/vest_disguise_swap/vest_disguise_action = new var/datum/action/innate/set_droppoint/set_droppoint_action = new var/obj/machinery/abductor/console/console + z_lock = ZLEVEL_STATION icon = 'icons/obj/abductor.dmi' icon_state = "camera" @@ -77,8 +78,7 @@ C.client.images -= chunk.obscured C.remote_control = null C.unset_machine() - src.Remove(C) - + Remove(C) /datum/action/innate/teleport_in name = "Send To" @@ -91,7 +91,7 @@ var/mob/camera/aiEye/remote/remote_eye = C.remote_control var/obj/machinery/abductor/pad/P = target - if(cameranet.checkTurfVis(remote_eye.loc)) + if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) P.PadToLoc(remote_eye.loc) /datum/action/innate/teleport_out @@ -116,7 +116,7 @@ var/mob/camera/aiEye/remote/remote_eye = C.remote_control var/obj/machinery/abductor/pad/P = target - if(cameranet.checkTurfVis(remote_eye.loc)) + if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) P.MobToLoc(remote_eye.loc,C) /datum/action/innate/vest_mode_swap diff --git a/code/game/gamemodes/miniantags/abduction/machinery/console.dm b/code/game/gamemodes/miniantags/abduction/machinery/console.dm index 8c4f390f77..2a23c37444 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/console.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/console.dm @@ -142,17 +142,17 @@ if(!team) return - for(var/obj/machinery/abductor/pad/p in machines) + for(var/obj/machinery/abductor/pad/p in GLOB.machines) if(p.team == team) pad = p break - for(var/obj/machinery/abductor/experiment/e in machines) + for(var/obj/machinery/abductor/experiment/e in GLOB.machines) if(e.team == team) experiment = e e.console = src - for(var/obj/machinery/computer/camera_advanced/abductor/c in machines) + for(var/obj/machinery/computer/camera_advanced/abductor/c in GLOB.machines) if(c.team == team) camera = c c.console = src diff --git a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm index e4392b507d..193aecd9ce 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm @@ -74,13 +74,13 @@ eyes.Blend("#[H.eye_color]", ICON_MULTIPLY) var/datum/sprite_accessory/S - S = hair_styles_list[H.hair_style] + S = GLOB.hair_styles_list[H.hair_style] if(S && (HAIR in H.dna.species.species_traits)) var/icon/hair = icon("icon" = S.icon, "icon_state" = "[S.icon_state]") hair.Blend("#[H.hair_color]", ICON_MULTIPLY) eyes.Blend(hair, ICON_OVERLAY) - S = facial_hair_styles_list[H.facial_hair_style] + S = GLOB.facial_hair_styles_list[H.facial_hair_style] if(S && (FACEHAIR in H.dna.species.species_traits)) var/icon/facial = icon("icon" = S.icon, "icon_state" = "[S.icon_state]") facial.Blend("#[H.facial_hair_color]", ICON_MULTIPLY) @@ -180,10 +180,10 @@ to_chat(H, "Your mind snaps!") var/objtype = pick(subtypesof(/datum/objective/abductee/)) var/datum/objective/abductee/O = new objtype() - ticker.mode.abductees += H.mind + SSticker.mode.abductees += H.mind H.mind.objectives += O H.mind.announce_objectives() - ticker.mode.update_abductor_icons_added(H.mind) + SSticker.mode.update_abductor_icons_added(H.mind) for(var/obj/item/organ/heart/gland/G in H.internal_organs) G.Start() @@ -213,7 +213,7 @@ H.uncuff() return //Area not chosen / It's not safe area - teleport to arrivals - H.forceMove(pick(latejoin)) + H.forceMove(pick(GLOB.latejoin)) H.uncuff() return diff --git a/code/game/gamemodes/miniantags/abduction/machinery/pad.dm b/code/game/gamemodes/miniantags/abduction/machinery/pad.dm index 57301ee319..5f8ad3de9d 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/pad.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/pad.dm @@ -12,7 +12,7 @@ /obj/machinery/abductor/pad/proc/Send() if(teleport_target == null) - teleport_target = teleportlocs[pick(teleportlocs)] + teleport_target = GLOB.teleportlocs[pick(GLOB.teleportlocs)] flick("alien-pad", src) for(var/mob/living/target in loc) target.forceMove(teleport_target) diff --git a/code/game/gamemodes/miniantags/borer/borer.dm b/code/game/gamemodes/miniantags/borer/borer.dm index 26ec704c7a..a8bfab458a 100644 --- a/code/game/gamemodes/miniantags/borer/borer.dm +++ b/code/game/gamemodes/miniantags/borer/borer.dm @@ -24,7 +24,7 @@ to_chat(src, "You whisper silently, \"[message]\"") to_chat(B.victim, "The captive mind of [src] whispers, \"[message]\"") - for (var/mob/M in player_list) + for (var/mob/M in GLOB.player_list) if(isnewplayer(M)) continue else if(M.stat == 2 && M.client.prefs.toggles & CHAT_GHOSTEARS) @@ -52,8 +52,8 @@ to_chat(B.victim, "You feel control of the host brain ripped from your grasp, and retract your probosci before the wild neural impulses can damage you.") B.detatch() -var/list/mob/living/simple_animal/borer/borers = list() -var/total_borer_hosts_needed = 10 +GLOBAL_LIST_EMPTY(borers) +GLOBAL_VAR_INIT(total_borer_hosts_needed, 10) /mob/living/simple_animal/borer name = "cortical borer" @@ -132,12 +132,34 @@ var/total_borer_hosts_needed = 10 //borer_chems += /datum/borer_chem/creagent borer_chems += /datum/borer_chem/ethanol borer_chems += /datum/borer_chem/rezadone - + if(is_team_borer) - borers += src + GLOB.borers += src GrantBorerActions() +/mob/living/simple_animal/borer/Destroy() + GLOB.borers -= src + + host_brain = null + victim = null + + QDEL_NULL(talk_to_host_action) + QDEL_NULL(infest_host_action) + QDEL_NULL(toggle_hide_action) + QDEL_NULL(talk_to_borer_action) + QDEL_NULL(talk_to_brain_action) + QDEL_NULL(take_control_action) + QDEL_NULL(give_back_control_action) + QDEL_NULL(leave_body_action) + QDEL_NULL(make_chems_action) + QDEL_NULL(make_larvae_action) + QDEL_NULL(freeze_victim_action) + QDEL_NULL(punish_victim_action) + QDEL_NULL(jumpstart_host_action) + + return ..() + /mob/living/simple_animal/borer/Topic(href, href_list)//not entirely sure if this is even required if(href_list["ghostjoin"]) var/mob/dead/observer/ghost = usr @@ -188,7 +210,7 @@ var/total_borer_hosts_needed = 10 if(victim) to_chat(victim, "[truename] [say_string]: [input]") log_say("Borer Communication: [key_name(src)] -> [key_name(victim)] : [input]") - for(var/M in dead_mob_list) + for(var/M in GLOB.dead_mob_list) if(isobserver(M)) var/rendered = "Borer Communication from [truename] : [input]" var/link = FOLLOW_LINK(M, src) @@ -214,7 +236,7 @@ var/total_borer_hosts_needed = 10 to_chat(B, "[src] says: [input]") log_say("Borer Communication: [key_name(src)] -> [key_name(B)] : [input]") - for(var/M in dead_mob_list) + for(var/M in GLOB.dead_mob_list) if(isobserver(M)) var/rendered = "Borer Communication from [src] : [input]" var/link = FOLLOW_LINK(M, src) @@ -238,7 +260,7 @@ var/total_borer_hosts_needed = 10 to_chat(CB, "[B.truename] says: [input]") log_say("Borer Communication: [key_name(B)] -> [key_name(CB)] : [input]") - for(var/M in dead_mob_list) + for(var/M in GLOB.dead_mob_list) if(isobserver(M)) var/rendered = "Borer Communication from [B] : [input]" var/link = FOLLOW_LINK(M, src) @@ -303,9 +325,9 @@ var/total_borer_hosts_needed = 10 /mob/living/simple_animal/borer/say(message) if(dd_hasprefix(message, ";")) message = copytext(message,2) - for(var/borer in borers) + for(var/borer in GLOB.borers) to_chat(borer, "Cortical Link: [truename] sings, \"[message]\"") - for(var/mob/D in dead_mob_list) + for(var/mob/D in GLOB.dead_mob_list) to_chat(D, "Cortical Link: [truename] sings, \"[message]\"") return if(!victim) @@ -314,10 +336,10 @@ var/total_borer_hosts_needed = 10 if(message == "") return -/mob/living/simple_animal/borer/UnarmedAttack(mob/living/M) - healthscan(usr, M) - chemscan(usr, M) - return +/mob/living/simple_animal/borer/UnarmedAttack(atom/A) + if(isliving(A)) + healthscan(usr, A) + chemscan(usr, A) /mob/living/simple_animal/borer/ex_act() if(victim) @@ -341,7 +363,9 @@ var/total_borer_hosts_needed = 10 if(H!=src && Adjacent(H)) choices += H - var/mob/living/carbon/H = input(src,"Who do you wish to infest?") in null|choices + if(!choices.len) + return + var/mob/living/carbon/H = choices.len > 1 ? input(src,"Who do you wish to infest?") in null|choices : choices[1] if(!H || !src) return @@ -470,10 +494,12 @@ var/total_borer_hosts_needed = 10 if(C.stat == CONSCIOUS) choices += C - var/mob/living/carbon/M = input(src,"Who do you wish to dominate?") in null|choices + if(!choices.len) + return + var/mob/living/carbon/M = choices.len > 1 ? input(src,"Who do you wish to dominate?") in null|choices : choices[1] - if(!M || !src) + if(!M || !src || stat != CONSCIOUS || victim || (world.time - used_dominate < 150)) return if(!Adjacent(M)) return @@ -812,13 +838,13 @@ var/total_borer_hosts_needed = 10 ckey = candidate.ckey if(mind) - mind.store_memory("You must escape with at least [total_borer_hosts_needed] borers with hosts on the shuttle.") + mind.store_memory("You must escape with at least [GLOB.total_borer_hosts_needed] borers with hosts on the shuttle.") to_chat(src, "You are a cortical borer!") to_chat(src, "You are a brain slug that worms its way into the head of its victim. Use stealth, persuasion and your powers of mind control to keep you, your host and your eventual spawn safe and warm.") to_chat(src, "Sugar nullifies your abilities, avoid it at all costs!") to_chat(src, "You can speak to your fellow borers by prefixing your messages with ';'. Check out your Borer tab to see your abilities.") - to_chat(src, "You must escape with at least [total_borer_hosts_needed] borers with hosts on the shuttle. To reproduce you must have 100 chemicals and be controlling a host.") + to_chat(src, "You must escape with at least [GLOB.total_borer_hosts_needed] borers with hosts on the shuttle. To reproduce you must have 100 chemicals and be controlling a host.") /mob/living/simple_animal/borer/proc/detatch() if(!victim || !controlling) diff --git a/code/game/gamemodes/miniantags/borer/borer_event.dm b/code/game/gamemodes/miniantags/borer/borer_event.dm index 73bea41a52..45470bc96c 100644 --- a/code/game/gamemodes/miniantags/borer/borer_event.dm +++ b/code/game/gamemodes/miniantags/borer/borer_event.dm @@ -23,7 +23,7 @@ /datum/round_event/borer/start() var/list/vents = list() - for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent in machines) + for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent in GLOB.machines) if(QDELETED(temp_vent)) continue if(temp_vent.loc.z == ZLEVEL_STATION && !temp_vent.welded) @@ -36,11 +36,11 @@ return kill() var/total_humans = 0 - for(var/mob/living/carbon/human/H in mob_list) + for(var/mob/living/carbon/human/H in GLOB.mob_list) if(H.stat != DEAD) total_humans++ - total_borer_hosts_needed = round(1 + total_humans/6) + GLOB.total_borer_hosts_needed = round(1 + total_humans/6) while(spawncount >= 1 && vents.len) var/obj/vent = pick_n_take(vents) diff --git a/code/game/gamemodes/miniantags/borer/syndi_borer.dm b/code/game/gamemodes/miniantags/borer/syndi_borer.dm index dc095c084c..5a0abff216 100644 --- a/code/game/gamemodes/miniantags/borer/syndi_borer.dm +++ b/code/game/gamemodes/miniantags/borer/syndi_borer.dm @@ -2,7 +2,7 @@ var/mob/owner = null is_team_borer = FALSE borer_alert = "Serve as a syndicate cortical borer? (Warning, You can no longer be cloned!)" - + /mob/living/simple_animal/borer/syndi_borer/Initialize(mapload, gen=1) ..() real_name = "Syndicate Borer [rand(1000,9999)]" @@ -17,4 +17,18 @@ /mob/living/simple_animal/borer/syndi_borer/RemoveControlActions() talk_to_brain_action.Remove(victim) - give_back_control_action.Remove(victim) \ No newline at end of file + give_back_control_action.Remove(victim) + +//Syndicate borer objective, relies on their owner getting a greentext, no matter if they themselves did anything really. +/datum/objective/syndi_borer + explanation_text = "You are a modified syndicate cortical borer, assist your owner with their objectives." + martyr_compatible = 1 + +/datum/objective/syndi_borer/check_completion() + if(target) + for(var/datum/objective/objective in target.objectives) + if(!objective.check_completion()) + return 0 + return 1 + else + return 1 //Not sure if we should greentext if we somehow don't even have an owner. \ No newline at end of file diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index 36c9fe01ea..6ce04bed14 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -62,6 +62,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") + initial_languages = list(/datum/language/swarmer) bubble_icon = "swarmer" health = 40 maxHealth = 40 @@ -81,14 +82,12 @@ melee_damage_type = STAMINA damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) hud_possible = list(ANTAG_HUD, DIAG_STAT_HUD, DIAG_HUD) - languages_spoken = SWARMER - languages_understood = SWARMER obj_damage = 0 environment_smash = 0 attacktext = "shocks" attack_sound = 'sound/effects/EMPulse.ogg' friendly = "pinches" - speed = 1 + speed = 0 faction = list("swarmer") AIStatus = AI_OFF pass_flags = PASSTABLE @@ -121,7 +120,7 @@ /mob/living/simple_animal/hostile/swarmer/Initialize() ..() verbs -= /mob/living/verb/pulled - var/datum/atom_hud/data/diagnostic/diag_hud = huds[DATA_HUD_DIAGNOSTIC] + var/datum/atom_hud/data/diagnostic/diag_hud = GLOB.huds[DATA_HUD_DIAGNOSTIC] diag_hud.add_to_hud(src) @@ -168,9 +167,9 @@ ////CTRL CLICK FOR SWARMERS AND SWARMER_ACT()'S//// /mob/living/simple_animal/hostile/swarmer/AttackingTarget() if(!isliving(target)) - target.swarmer_act(src) + return target.swarmer_act(src) else - ..() + return ..() /mob/living/simple_animal/hostile/swarmer/CtrlClickOn(atom/A) face_atom(A) @@ -665,7 +664,7 @@ /mob/living/simple_animal/hostile/swarmer/proc/swarmer_chat(msg) var/rendered = "Swarm communication - [src] [say_quote(msg, get_spans())]" - for(var/mob/M in mob_list) + for(var/mob/M in GLOB.mob_list) if(isswarmer(M)) to_chat(M, rendered) if(isobserver(M)) diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm index fbf0e1676b..90e1befd08 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm @@ -13,9 +13,9 @@ /datum/round_event/spawn_swarmer/start() if(find_swarmer()) return 0 - if(!the_gateway) + if(!GLOB.the_gateway) return 0 - new /obj/item/device/unactivated_swarmer(get_turf(the_gateway)) + new /obj/item/device/unactivated_swarmer(get_turf(GLOB.the_gateway)) if(prob(25)) //25% chance to announce it to the crew var/swarmer_report = "[command_name()] High-Priority Update" swarmer_report += "

Our long-range sensors have detected an odd signal emanating from your station's gateway. We recommend immediate investigation of your gateway, as something may have come through." @@ -23,7 +23,7 @@ /datum/round_event/spawn_swarmer/proc/find_swarmer() - for(var/mob/living/M in mob_list) + for(var/mob/living/M in GLOB.mob_list) if(istype(M, /mob/living/simple_animal/hostile/swarmer) && M.client) //If there is a swarmer with an active client, we've found our swarmer return 1 return 0 diff --git a/code/game/gamemodes/miniantags/monkey/monkey.dm b/code/game/gamemodes/miniantags/monkey/monkey.dm index a9c75fa76b..ecb15bc221 100644 --- a/code/game/gamemodes/miniantags/monkey/monkey.dm +++ b/code/game/gamemodes/miniantags/monkey/monkey.dm @@ -76,7 +76,7 @@ return 0 var/datum/disease/D = new /datum/disease/transformation/jungle_fever() //ugly but unfortunately needed - for(var/mob/living/carbon/human/H in living_mob_list) + for(var/mob/living/carbon/human/H in GLOB.living_mob_list) if(H.mind && H.stat != DEAD) if(H.HasDisease(D)) return 0 @@ -87,7 +87,7 @@ if(SSshuttle.emergency.mode != SHUTTLE_ENDGAME) return 0 var/datum/disease/D = new /datum/disease/transformation/jungle_fever() - for(var/mob/living/carbon/monkey/M in living_mob_list) + for(var/mob/living/carbon/monkey/M in GLOB.living_mob_list) if (M.HasDisease(D)) if(M.onCentcom() || M.onSyndieBase()) escaped_monkeys++ diff --git a/code/game/gamemodes/miniantags/morph/morph.dm b/code/game/gamemodes/miniantags/morph/morph.dm index 42bab67d65..a4e9d9482e 100644 --- a/code/game/gamemodes/miniantags/morph/morph.dm +++ b/code/game/gamemodes/miniantags/morph/morph.dm @@ -25,7 +25,7 @@ melee_damage_lower = 20 melee_damage_upper = 20 see_in_dark = 8 - see_invisible = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE idle_vision_range = 1 // Only attack when target is close wander = 0 attacktext = "glomps" @@ -151,7 +151,7 @@ for(var/atom/movable/AM in src) AM.loc = loc if(prob(90)) - step(AM, pick(alldirs)) + step(AM, pick(GLOB.alldirs)) /mob/living/simple_animal/hostile/morph/wabbajack_act(mob/living/new_mob) barf_contents() @@ -193,7 +193,7 @@ if(do_after(src, 20, target = I)) eat(I) return - target.attack_animal(src) + return ..() //Spawn Event @@ -216,13 +216,13 @@ var/datum/mind/player_mind = new /datum/mind(selected.key) player_mind.active = 1 - if(!xeno_spawn) + if(!GLOB.xeno_spawn) return MAP_ERROR - var/mob/living/simple_animal/hostile/morph/S = new /mob/living/simple_animal/hostile/morph(pick(xeno_spawn)) + var/mob/living/simple_animal/hostile/morph/S = new /mob/living/simple_animal/hostile/morph(pick(GLOB.xeno_spawn)) player_mind.transfer_to(S) player_mind.assigned_role = "Morph" player_mind.special_role = "Morph" - ticker.mode.traitors |= player_mind + SSticker.mode.traitors |= player_mind to_chat(S, S.playstyle_string) S << 'sound/magic/Mutate.ogg' message_admins("[key_name_admin(S)] has been made into a morph by an event.") diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm index 3c597e7f32..7260d8221f 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant.dm @@ -19,12 +19,11 @@ health = INFINITY //Revenants don't use health, they use essence instead maxHealth = INFINITY layer = GHOST_LAYER - healable = 0 + healable = FALSE sight = SEE_SELF - see_invisible = SEE_INVISIBLE_NOLIGHTING + see_in_dark = 8 - languages_spoken = ALL - languages_understood = ALL + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE response_help = "passes through" response_disarm = "swings through" response_harm = "punches through" @@ -36,39 +35,31 @@ harm_intent_damage = 0 friendly = "touches" status_flags = 0 - wander = 0 - density = 0 + wander = FALSE + density = FALSE movement_type = FLYING - anchored = 1 + anchored = TRUE mob_size = MOB_SIZE_TINY pass_flags = PASSTABLE | PASSGRILLE | PASSMOB speed = 1 - unique_name = 1 + unique_name = TRUE hud_possible = list(ANTAG_HUD) var/essence = 75 //The resource, and health, of revenants. var/essence_regen_cap = 75 //The regeneration cap of essence (go figure); regenerates every Life() tick up to this amount. - var/essence_regenerating = 1 //If the revenant regenerates essence or not; 1 for yes, 0 for no + var/essence_regenerating = TRUE //If the revenant regenerates essence or not var/essence_regen_amount = 5 //How much essence regenerates var/essence_accumulated = 0 //How much essence the revenant has stolen - var/revealed = 0 //If the revenant can take damage from normal sources. + var/revealed = FALSE //If the revenant can take damage from normal sources. var/unreveal_time = 0 //How long the revenant is revealed for, is about 2 seconds times this var. var/unstun_time = 0 //How long the revenant is stunned for, is about 2 seconds times this var. - var/inhibited = 0 //If the revenant's abilities are blocked by a chaplain's power. + var/inhibited = FALSE //If the revenant's abilities are blocked by a chaplain's power. var/essence_drained = 0 //How much essence the revenant will drain from the corpse it's feasting on. - var/draining = 0 //If the revenant is draining someone. + var/draining = FALSE //If the revenant is draining someone. var/list/drained_mobs = list() //Cannot harvest the same mob twice var/perfectsouls = 0 //How many perfect, regen-cap increasing souls the revenant has. //TODO, add objective for getting a perfect soul(s?) - var/image/ghostimage = null //Visible to ghost with darkness off var/generated_objectives_and_spells = FALSE -/mob/living/simple_animal/revenant/Initialize() - ..() - - ghostimage = image(src.icon,src,src.icon_state) - ghost_darkness_images |= ghostimage - updateallghostimages() - /mob/living/simple_animal/revenant/Login() ..() to_chat(src, "You are a revenant.") @@ -93,7 +84,7 @@ to_chat(src, "Objective #2: [objective2.explanation_text]") mind.assigned_role = "revenant" mind.special_role = "Revenant" - ticker.mode.traitors |= mind //Necessary for announcing + SSticker.mode.traitors |= mind //Necessary for announcing AddSpell(new /obj/effect/proc_holder/spell/targeted/night_vision/revenant(null)) AddSpell(new /obj/effect/proc_holder/spell/targeted/revenant_transmit(null)) AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/revenant/defile(null)) @@ -107,13 +98,13 @@ death() if(unreveal_time && world.time >= unreveal_time) unreveal_time = 0 - revealed = 0 + revealed = FALSE incorporeal_move = 3 invisibility = INVISIBILITY_REVENANT to_chat(src, "You are once more concealed.") if(unstun_time && world.time >= unstun_time) unstun_time = 0 - notransform = 0 + notransform = FALSE to_chat(src, "You can move again!") if(essence_regenerating && !inhibited && essence < essence_regen_cap) //While inhibited, essence will not regenerate essence = min(essence_regen_cap, essence+essence_regen_amount) @@ -134,7 +125,7 @@ var/essencecolor = "#8F48C6" if(essence > essence_regen_cap) essencecolor = "#9A5ACB" //oh boy you've got a lot of essence - else if(essence == 0) + else if(!essence) essencecolor = "#1D2953" //oh jeez you're dying hud_used.healths.maptext = "
[essence]E
" @@ -149,7 +140,7 @@ return log_say("[key_name(src)] : [message]") var/rendered = "[src] says, \"[message]\"" - for(var/mob/M in mob_list) + for(var/mob/M in GLOB.mob_list) if(isrevenant(M)) to_chat(M, rendered) else if(isobserver(M)) @@ -184,14 +175,13 @@ visible_message("[src] violently flinches!", \ "As \the [W] passes through you, you feel your essence draining away!") adjustBruteLoss(25) //hella effective - inhibited = 1 + inhibited = TRUE update_action_buttons_icon() addtimer(CALLBACK(src, .proc/reset_inhibit), 30) /mob/living/simple_animal/revenant/proc/reset_inhibit() - if(src) - inhibited = 0 - update_action_buttons_icon() + inhibited = FALSE + update_action_buttons_icon() /mob/living/simple_animal/revenant/adjustHealth(amount, updating_health = TRUE, forced = FALSE) if(!forced && !revealed) @@ -200,7 +190,7 @@ essence = max(0, essence-amount) if(updating_health) update_health_hud() - if(essence == 0) + if(!essence) death() /mob/living/simple_animal/revenant/dust() @@ -213,11 +203,9 @@ if(!revealed || stat == DEAD) //Revenants cannot die if they aren't revealed //or are already dead return 0 ..(1) - ghost_darkness_images -= ghostimage - updateallghostimages() to_chat(src, "NO! No... it's too late, you can feel your essence [pick("breaking apart", "drifting away")]...") - notransform = 1 - revealed = 1 + notransform = TRUE + revealed = TRUE invisibility = 0 playsound(src, 'sound/effects/screech.ogg', 100, 1) visible_message("[src] lets out a waning screech as violet mist swirls around its dissolving body!") @@ -241,7 +229,7 @@ return if(time <= 0) return - revealed = 1 + revealed = TRUE invisibility = 0 incorporeal_move = 0 if(!unreveal_time) @@ -257,7 +245,7 @@ return if(time <= 0) return - notransform = 1 + notransform = TRUE if(!unstun_time) to_chat(src, "You cannot move!") unstun_time = world.time + time @@ -277,9 +265,6 @@ icon_state = icon_reveal else icon_state = icon_idle - if(ghostimage) - ghostimage.icon_state = src.icon_state - updateallghostimages() /mob/living/simple_animal/revenant/proc/castcheck(essence_cost) if(!src) @@ -287,20 +272,20 @@ var/turf/T = get_turf(src) if(isclosedturf(T)) to_chat(src, "You cannot use abilities from inside of a wall.") - return 0 + return FALSE for(var/obj/O in T) if(O.density && !O.CanPass(src, T, 5)) to_chat(src, "You cannot use abilities inside of a dense object.") - return 0 + return FALSE if(inhibited) to_chat(src, "Your powers have been suppressed by nulling energy!") - return 0 - if(!change_essence_amount(essence_cost, 1)) + return FALSE + if(!change_essence_amount(essence_cost, TRUE)) to_chat(src, "You lack the essence to use that ability.") - return 0 - return 1 + return FALSE + return TRUE -/mob/living/simple_animal/revenant/proc/change_essence_amount(essence_amt, silent = 0, source = null) +/mob/living/simple_animal/revenant/proc/change_essence_amount(essence_amt, silent = FALSE, source = null) if(!src) return if(essence + essence_amt <= 0) @@ -312,9 +297,9 @@ essence_accumulated = max(0, essence_accumulated+essence_amt) if(!silent) if(essence_amt > 0) - to_chat(src, "Gained [essence_amt]E from [source].") + to_chat(src, "Gained [essence_amt]E[source ? " from [source]":""].") else - to_chat(src, "Lost [essence_amt]E from [source].") + to_chat(src, "Lost [essence_amt]E[source ? " from [source]":""].") return 1 @@ -326,8 +311,8 @@ icon_state = "revenantEctoplasm" w_class = WEIGHT_CLASS_SMALL var/essence = 75 //the maximum essence of the reforming revenant - var/reforming = 1 - var/inert = 0 + var/reforming = TRUE + var/inert = FALSE var/client/client_to_revive /obj/item/weapon/ectoplasm/revenant/New() @@ -335,13 +320,12 @@ addtimer(CALLBACK(src, .proc/try_reform), 600) /obj/item/weapon/ectoplasm/revenant/proc/try_reform() - if(src) - if(reforming) - reforming = 0 - reform() - else - inert = 1 - visible_message("[src] settles down and seems lifeless.") + if(reforming) + reforming = FALSE + reform() + else + inert = TRUE + visible_message("[src] settles down and seems lifeless.") /obj/item/weapon/ectoplasm/revenant/attack_self(mob/user) if(!reforming || inert) @@ -366,14 +350,14 @@ to_chat(user, "It is shifting and distorted. It would be wise to destroy this.") /obj/item/weapon/ectoplasm/revenant/proc/reform() - if(!src || QDELETED(src) || inert) + if(QDELETED(src) || inert) return var/key_of_revenant message_admins("Revenant ectoplasm was left undestroyed for 1 minute and is reforming into a new revenant.") loc = get_turf(src) //In case it's in a backpack or someone's hand var/mob/living/simple_animal/revenant/R = new(get_turf(src)) if(client_to_revive) - for(var/mob/M in dead_mob_list) + for(var/mob/M in GLOB.dead_mob_list) if(M.client == client_to_revive) //Only recreates the mob if the mob the client is in is dead R.client = client_to_revive key_of_revenant = client_to_revive.key @@ -383,7 +367,7 @@ if(!candidates.len) qdel(R) message_admins("No candidates were found for the new revenant. Oh well!") - inert = 1 + inert = TRUE visible_message("[src] settles down and seems lifeless.") return var/client/C = pick(candidates) @@ -391,7 +375,7 @@ if(!key_of_revenant) qdel(R) message_admins("No ckey was found for the new revenant. Oh well!") - inert = 1 + inert = TRUE visible_message("[src] settles down and seems lifeless.") return var/datum/mind/player_mind = new /datum/mind(key_of_revenant) @@ -401,13 +385,11 @@ player_mind.transfer_to(R) player_mind.assigned_role = "revenant" player_mind.special_role = "Revenant" - ticker.mode.traitors |= player_mind + SSticker.mode.traitors |= player_mind message_admins("[key_of_revenant] has been [client_to_revive ? "re":""]made into a revenant by reforming ectoplasm.") log_game("[key_of_revenant] was [client_to_revive ? "re":""]made as a revenant by reforming ectoplasm.") visible_message("[src] suddenly rises into the air before fading away.") qdel(src) - if(src) //Should never happen, but just in case - inert = 1 //objectives @@ -422,14 +404,14 @@ /datum/objective/revenant/check_completion() if(!isrevenant(owner.current)) - return 0 + return FALSE var/mob/living/simple_animal/revenant/R = owner.current if(!R || R.stat == DEAD) - return 0 + return FALSE var/essence_stolen = R.essence_accumulated if(essence_stolen < targetAmount) - return 0 - return 1 + return FALSE + return TRUE /datum/objective/revenantFluff dangerrating = 0 @@ -450,4 +432,4 @@ ..() /datum/objective/revenantFluff/check_completion() - return 1 + return TRUE diff --git a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm index ce549c509d..580515d4ec 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm @@ -19,7 +19,7 @@ if(prob(10)) to_chat(target, "You feel as if you are being watched.") return - draining = 1 + draining = TRUE essence_drained += rand(15, 20) to_chat(src, "You search for the soul of [target].") if(do_after(src, rand(10, 20), 0, target)) //did they get deleted in that second? @@ -56,13 +56,13 @@ target.visible_message("[target] suddenly rises slightly into the air, [target.p_their()] skin turning an ashy gray.") var/datum/beam/B = Beam(target,icon_state="drain_life",time=INFINITY) if(do_after(src, 46, 0, target)) //As one cannot prove the existance of ghosts, ghosts cannot prove the existance of the target they were draining. - change_essence_amount(essence_drained, 0, target) + change_essence_amount(essence_drained, FALSE, target) if(essence_drained <= 90 && target.stat != DEAD) essence_regen_cap += 5 to_chat(src, "The absorption of [target]'s living soul has increased your maximum essence level. Your new maximum essence is [essence_regen_cap].") if(essence_drained > 90) essence_regen_cap += 15 - perfectsouls += 1 + perfectsouls++ to_chat(src, "The perfection of [target]'s soul has increased your maximum essence level. Your new maximum essence is [essence_regen_cap].") to_chat(src, "[target]'s soul has been considerably weakened and will yield no more essence for the time being.") target.visible_message("[target] slumps onto the ground.", \ @@ -77,7 +77,7 @@ qdel(B) else to_chat(src, "You are not close enough to siphon [target ? "[target]'s":"their"] soul. The link has been broken.") - draining = 0 + draining = FALSE essence_drained = 0 //Toggle night vision: lets the revenant toggle its night vision @@ -109,7 +109,7 @@ log_say("RevenantTransmit: [key_name(user)]->[key_name(M)] : [msg]") to_chat(user, "You transmit to [M]: [msg]") to_chat(M, "You hear something behind you talking... [msg]") - for(var/ded in dead_mob_list) + for(var/ded in GLOB.dead_mob_list) if(!isobserver(ded)) continue var/follow_rev = FOLLOW_LINK(ded, user) @@ -125,7 +125,7 @@ name = "Report this to a coder" var/reveal = 80 //How long it reveals the revenant in deciseconds var/stun = 20 //How long it stuns the revenant in deciseconds - var/locked = 1 //If it's locked and needs to be unlocked before use + var/locked = TRUE //If it's locked and needs to be unlocked before use var/unlock_amount = 100 //How much essence it costs to unlock var/cast_amount = 50 //How much essence it costs to use @@ -137,47 +137,45 @@ name = "[initial(name)] ([cast_amount]E)" /obj/effect/proc_holder/spell/aoe_turf/revenant/can_cast(mob/living/simple_animal/revenant/user = usr) - if(!istype(user)) //Badmins, no. Badmins, don't do it. - if(charge_counter < charge_max) - return 0 - return 1 - if(user.inhibited) - return 0 if(charge_counter < charge_max) - return 0 + return FALSE + if(!istype(user)) //Badmins, no. Badmins, don't do it. + return TRUE + if(user.inhibited) + return FALSE if(locked) if(user.essence <= unlock_amount) - return 0 + return FALSE if(user.essence <= cast_amount) - return 0 - return 1 + return FALSE + return TRUE /obj/effect/proc_holder/spell/aoe_turf/revenant/proc/attempt_cast(mob/living/simple_animal/revenant/user = usr) if(!istype(user)) //If you're not a revenant, it works. Please, please, please don't give this to a non-revenant. name = "[initial(name)]" if(locked) panel = "Revenant Abilities" - locked = 0 - return 1 + locked = FALSE + return TRUE if(locked) if(!user.castcheck(-unlock_amount)) charge_counter = charge_max - return 0 + return FALSE name = "[initial(name)] ([cast_amount]E)" to_chat(user, "You have unlocked [initial(name)]!") panel = "Revenant Abilities" - locked = 0 + locked = FALSE charge_counter = charge_max - return 0 + return FALSE if(!user.castcheck(-cast_amount)) charge_counter = charge_max - return 0 + return FALSE name = "[initial(name)] ([cast_amount]E)" user.reveal(reveal) user.stun(stun) if(action) action.UpdateButtonIcon() - return 1 + return TRUE //Overload Light: Breaks a light that's online and sends out lightning bolts to all nearby people. /obj/effect/proc_holder/spell/aoe_turf/revenant/overload @@ -337,9 +335,9 @@ var/mob/living/carbon/human/H = mob if(H.dna && H.dna.species) H.dna.species.handle_hair(H,"#1d2953") //will be reset when blight is cured - var/blightfound = 0 + var/blightfound = FALSE for(var/datum/disease/revblight/blight in H.viruses) - blightfound = 1 + blightfound = TRUE if(blight.stage < 5) blight.stage++ if(!blightfound) diff --git a/code/game/gamemodes/miniantags/revenant/revenant_blight.dm b/code/game/gamemodes/miniantags/revenant/revenant_blight.dm index 0ac4bdc994..8b766aad37 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant_blight.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant_blight.dm @@ -53,7 +53,7 @@ affected_mob.emote(pick("pale","shiver","cries")) if(5) if(!finalstage) - finalstage = 1 + finalstage = TRUE to_chat(affected_mob, "You feel like [pick("nothing's worth it anymore", "nobody ever needed your help", "nothing you did mattered", "everything you tried to do was worthless")].") affected_mob.adjustStaminaLoss(45) new /obj/effect/overlay/temp/revenant(affected_mob.loc) diff --git a/code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm b/code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm index 3ff8bf7773..783cfdd930 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm @@ -20,7 +20,7 @@ /datum/round_event/ghost_role/revenant/spawn_role() if(!ignore_mobcheck) var/deadMobs = 0 - for(var/mob/M in dead_mob_list) + for(var/mob/M in GLOB.dead_mob_list) deadMobs++ if(deadMobs < REVENANT_SPAWN_THRESHOLD) message_admins("Event attempted to spawn a revenant, but there were only [deadMobs]/[REVENANT_SPAWN_THRESHOLD] dead mobs.") @@ -34,23 +34,23 @@ var/list/spawn_locs = list() - for(var/obj/effect/landmark/L in landmarks_list) + for(var/obj/effect/landmark/L in GLOB.landmarks_list) if(isturf(L.loc)) switch(L.name) if("revenantspawn") spawn_locs += L.loc - if(!spawn_locs) //If we can't find any revenant spawns, try the carp spawns - for(var/obj/effect/landmark/L in landmarks_list) + if(!spawn_locs.len) //If we can't find any revenant spawns, try the carp spawns + for(var/obj/effect/landmark/L in GLOB.landmarks_list) if(isturf(L.loc)) switch(L.name) if("carpspawn") spawn_locs += L.loc - if(!spawn_locs) //If we can't find either, just spawn the revenant at the player's location + if(!spawn_locs.len) //If we can't find either, just spawn the revenant at the player's location spawn_locs += get_turf(selected) - if(!spawn_locs) //If we can't find THAT, then just give up and cry + if(!spawn_locs.len) //If we can't find THAT, then just give up and cry return MAP_ERROR - var/mob/living/simple_animal/revenant/revvie = new /mob/living/simple_animal/revenant/(pick(spawn_locs)) + var/mob/living/simple_animal/revenant/revvie = new(pick(spawn_locs)) revvie.key = selected.key message_admins("[key_name_admin(revvie)] has been made into a revenant by an event.") log_game("[key_name(revvie)] was spawned as a revenant by an event.") diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index 355936d922..c3d06bfe2c 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -32,9 +32,9 @@ melee_damage_lower = 30 melee_damage_upper = 30 see_in_dark = 8 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE var/boost = 0 bloodcrawl = BLOODCRAWL_EAT - see_invisible = SEE_INVISIBLE_MINIMUM var/playstyle_string = "You are a slaughter demon, a terrible creature from another realm. You have a single desire: To kill. \ You may use the \"Blood Crawl\" ability near blood pools to travel through them, appearing and disappearing from the station at will. \ Pulling a dead or unconscious mob while you enter a pool will pull them in with you, allowing you to feast and regain your health. \ diff --git a/code/game/gamemodes/miniantags/slaughter/slaughterevent.dm b/code/game/gamemodes/miniantags/slaughter/slaughterevent.dm index 40c9a0e494..e9b417de1a 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughterevent.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughterevent.dm @@ -23,7 +23,7 @@ player_mind.active = 1 var/list/spawn_locs = list() - for(var/obj/effect/landmark/L in landmarks_list) + for(var/obj/effect/landmark/L in GLOB.landmarks_list) if(isturf(L.loc)) switch(L.name) if("carpspawn") @@ -39,7 +39,7 @@ player_mind.transfer_to(S) player_mind.assigned_role = "Slaughter Demon" player_mind.special_role = "Slaughter Demon" - ticker.mode.traitors |= player_mind + SSticker.mode.traitors |= player_mind to_chat(S, S.playstyle_string) to_chat(S, "You are currently not currently in the same plane of existence as the station. Blood Crawl near a blood pool to manifest.") S << 'sound/magic/demon_dies.ogg' diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index b7a7234584..d4d788e049 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -46,12 +46,12 @@ //////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////// /datum/game_mode/proc/update_synd_icons_added(datum/mind/synd_mind) - var/datum/atom_hud/antag/opshud = huds[ANTAG_HUD_OPS] + var/datum/atom_hud/antag/opshud = GLOB.huds[ANTAG_HUD_OPS] opshud.join_hud(synd_mind.current) set_antag_hud(synd_mind.current, "synd") /datum/game_mode/proc/update_synd_icons_removed(datum/mind/synd_mind) - var/datum/atom_hud/antag/opshud = huds[ANTAG_HUD_OPS] + var/datum/atom_hud/antag/opshud = GLOB.huds[ANTAG_HUD_OPS] opshud.leave_hud(synd_mind.current) set_antag_hud(synd_mind.current, null) @@ -62,7 +62,7 @@ var/list/turf/synd_spawn = list() - for(var/obj/effect/landmark/A in landmarks_list) + for(var/obj/effect/landmark/A in GLOB.landmarks_list) if(A.name == "Syndicate-Spawn") synd_spawn += get_turf(A) continue @@ -93,7 +93,7 @@ agent_number++ spawnpos++ update_synd_icons_added(synd_mind) - var/obj/machinery/nuclearbomb/nuke = locate("syndienuke") in nuke_list + var/obj/machinery/nuclearbomb/nuke = locate("syndienuke") in GLOB.nuke_list if(nuke) nuke.r_code = nuke_code return ..() @@ -116,7 +116,7 @@ if(foundIDs.len) for(var/obj/item/weapon/card/id/ID in foundIDs) ID.name = "lead agent card" - ID.access += access_syndicate_leader + ID.access += GLOB.access_syndicate_leader else message_admins("Warning: Nuke Ops spawned without access to leave their spawn area!") @@ -170,19 +170,21 @@ return 0 return 1 -/datum/game_mode/nuclear/check_finished() //to be called by ticker +/datum/game_mode/nuclear/check_finished() //to be called by SSticker if(replacementmode && round_converted == 2) return replacementmode.check_finished() if((SSshuttle.emergency.mode == SHUTTLE_ENDGAME) || station_was_nuked) return 1 if(are_operatives_dead()) - if(bomb_set) //snaaaaaaaaaake! It's not over yet! - return 0 + var/obj/machinery/nuclearbomb/N + pass(N) //suppress unused warning + if(N.bomb_set) //snaaaaaaaaaake! It's not over yet! + return 0 //its a static var btw ..() /datum/game_mode/nuclear/declare_completion() var/disk_rescued = 1 - for(var/obj/item/weapon/disk/nuclear/D in poi_list) + for(var/obj/item/weapon/disk/nuclear/D in GLOB.poi_list) if(!D.onCentcom()) disk_rescued = 0 break @@ -201,83 +203,83 @@ to_chat(world, "Humiliating Syndicate Defeat") to_chat(world, "The crew of [station_name()] gave [syndicate_name()] operatives back their bomb! The syndicate base was destroyed! Next time, don't lose the nuke!") - ticker.news_report = NUKE_SYNDICATE_BASE + SSticker.news_report = NUKE_SYNDICATE_BASE else if(!disk_rescued && station_was_nuked && !syndies_didnt_escape) feedback_set_details("round_end_result","win - syndicate nuke") to_chat(world, "Syndicate Major Victory!") to_chat(world, "[syndicate_name()] operatives have destroyed [station_name()]!") - ticker.news_report = STATION_NUKED + SSticker.news_report = STATION_NUKED else if (!disk_rescued && station_was_nuked && syndies_didnt_escape) feedback_set_details("round_end_result","halfwin - syndicate nuke - did not evacuate in time") to_chat(world, "Total Annihilation") to_chat(world, "[syndicate_name()] operatives destroyed [station_name()] but did not leave the area in time and got caught in the explosion. Next time, don't lose the disk!") - ticker.news_report = STATION_NUKED + SSticker.news_report = STATION_NUKED else if (!disk_rescued && !station_was_nuked && nuke_off_station && !syndies_didnt_escape) feedback_set_details("round_end_result","halfwin - blew wrong station") to_chat(world, "Crew Minor Victory") to_chat(world, "[syndicate_name()] operatives secured the authentication disk but blew up something that wasn't [station_name()]. Next time, don't do that!") - ticker.news_report = NUKE_MISS + SSticker.news_report = NUKE_MISS else if (!disk_rescued && !station_was_nuked && nuke_off_station && syndies_didnt_escape) feedback_set_details("round_end_result","halfwin - blew wrong station - did not evacuate in time") to_chat(world, "[syndicate_name()] operatives have earned Darwin Award!") to_chat(world, "[syndicate_name()] operatives blew up something that wasn't [station_name()] and got caught in the explosion. Next time, don't do that!") - ticker.news_report = NUKE_MISS + SSticker.news_report = NUKE_MISS else if ((disk_rescued || SSshuttle.emergency.mode != SHUTTLE_ENDGAME) && are_operatives_dead()) feedback_set_details("round_end_result","loss - evacuation - disk secured - syndi team dead") to_chat(world, "Crew Major Victory!") to_chat(world, "The Research Staff has saved the disk and killed the [syndicate_name()] Operatives") - ticker.news_report = OPERATIVES_KILLED + SSticker.news_report = OPERATIVES_KILLED else if (disk_rescued) feedback_set_details("round_end_result","loss - evacuation - disk secured") to_chat(world, "Crew Major Victory") to_chat(world, "The Research Staff has saved the disk and stopped the [syndicate_name()] Operatives!") - ticker.news_report = OPERATIVES_KILLED + SSticker.news_report = OPERATIVES_KILLED else if (!disk_rescued && are_operatives_dead()) feedback_set_details("round_end_result","halfwin - evacuation - disk not secured") to_chat(world, "Neutral Victory!") to_chat(world, "The Research Staff failed to secure the authentication disk but did manage to kill most of the [syndicate_name()] Operatives!") - ticker.news_report = OPERATIVE_SKIRMISH + SSticker.news_report = OPERATIVE_SKIRMISH else if (!disk_rescued && crew_evacuated) feedback_set_details("round_end_result","halfwin - detonation averted") to_chat(world, "Syndicate Minor Victory!") to_chat(world, "[syndicate_name()] operatives survived the assault but did not achieve the destruction of [station_name()]. Next time, don't lose the disk!") - ticker.news_report = OPERATIVE_SKIRMISH + SSticker.news_report = OPERATIVE_SKIRMISH else if (!disk_rescued && !crew_evacuated) feedback_set_details("round_end_result","halfwin - interrupted") to_chat(world, "Neutral Victory") to_chat(world, "Round was mysteriously interrupted!") - ticker.news_report = OPERATIVE_SKIRMISH + SSticker.news_report = OPERATIVE_SKIRMISH ..() return /datum/game_mode/proc/auto_declare_completion_nuclear() - if( syndicates.len || (ticker && istype(ticker.mode,/datum/game_mode/nuclear)) ) + if( syndicates.len || (SSticker && istype(SSticker.mode,/datum/game_mode/nuclear)) ) var/text = "
The syndicate operatives were:" var/purchases = "" var/TC_uses = 0 for(var/datum/mind/syndicate in syndicates) text += printplayer(syndicate) - for(var/obj/item/device/uplink/H in uplinks) + for(var/obj/item/device/uplink/H in GLOB.uplinks) if(H && H.owner && H.owner == syndicate.key) TC_uses += H.spent_telecrystals purchases += H.purchase_log @@ -290,7 +292,7 @@ /proc/nukelastname(mob/M) //--All praise goes to NEO|Phyte, all blame goes to DH, and it was Cindi-Kate's idea. Also praise Urist for copypasta ho. - var/randomname = pick(last_names) + var/randomname = pick(GLOB.last_names) var/newname = copytext(sanitize(input(M,"You are the nuke operative [pick("Czar", "Boss", "Commander", "Chief", "Kingpin", "Director", "Overlord")]. Please choose a last name for your family.", "Name change",randomname)),1,MAX_NAME_LEN) if (!newname) @@ -311,7 +313,7 @@ return /proc/is_nuclear_operative(mob/M) - return M && istype(M) && M.mind && ticker && ticker.mode && M.mind in ticker.mode.syndicates + return M && istype(M) && M.mind && SSticker && SSticker.mode && M.mind in SSticker.mode.syndicates /datum/outfit/syndicate name = "Syndicate Operative - Basic" @@ -334,7 +336,7 @@ /datum/outfit/syndicate/post_equip(mob/living/carbon/human/H) var/obj/item/device/radio/R = H.ears - R.set_frequency(SYND_FREQ) + R.set_frequency(GLOB.SYND_FREQ) R.freqlock = 1 if(tc) diff --git a/code/game/gamemodes/nuclear/nuclear_challenge.dm b/code/game/gamemodes/nuclear/nuclear_challenge.dm index 54045c307f..3e47aa517d 100644 --- a/code/game/gamemodes/nuclear/nuclear_challenge.dm +++ b/code/game/gamemodes/nuclear/nuclear_challenge.dm @@ -17,7 +17,7 @@ return declaring_war = TRUE - var/are_you_sure = alert(user, "Consult your team carefully before you declare war on [station_name()]]. Are you sure you want to alert the enemy crew? You have [-round((world.time-round_start_time - CHALLENGE_TIME_LIMIT)/10)] seconds to decide", "Declare war?", "Yes", "No") + var/are_you_sure = alert(user, "Consult your team carefully before you declare war on [station_name()]]. Are you sure you want to alert the enemy crew? You have [-round((world.time-SSticker.round_start_time - CHALLENGE_TIME_LIMIT)/10)] seconds to decide", "Declare war?", "Yes", "No") declaring_war = FALSE if(!check_allowed(user)) @@ -48,7 +48,7 @@ to_chat(user, "You've attracted the attention of powerful forces within the syndicate. A bonus bundle of telecrystals has been granted to your team. Great things await you if you complete the mission.") - for(var/V in syndicate_shuttle_boards) + for(var/V in GLOB.syndicate_shuttle_boards) var/obj/item/weapon/circuitboard/computer/syndicate_shuttle/board = V board.challenge = TRUE @@ -64,16 +64,16 @@ if(declaring_war) to_chat(user, "You are already in the process of declaring war! Make your mind up.") return 0 - if(player_list.len < CHALLENGE_MIN_PLAYERS) + if(GLOB.player_list.len < CHALLENGE_MIN_PLAYERS) to_chat(user, "The enemy crew is too small to be worth declaring war on.") return 0 if(user.z != ZLEVEL_CENTCOM) to_chat(user, "You have to be at your base to use this.") return 0 - if(world.time-round_start_time > CHALLENGE_TIME_LIMIT) + if(world.time-SSticker.round_start_time > CHALLENGE_TIME_LIMIT) to_chat(user, "It's too late to declare hostilities. Your benefactors are already busy with other schemes. You'll have to make do with what you have on hand.") return 0 - for(var/V in syndicate_shuttle_boards) + for(var/V in GLOB.syndicate_shuttle_boards) var/obj/item/weapon/circuitboard/computer/syndicate_shuttle/board = V if(board.moved) to_chat(user, "The shuttle has already been moved! You have forfeit the right to declare war.") diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index ff3c00cfc4..575db19f5c 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -10,7 +10,6 @@ #define NUKE_ON_TIMING 2 #define NUKE_ON_EXPLODING 3 -var/bomb_set /obj/machinery/nuclearbomb name = "nuclear fission explosive" @@ -41,15 +40,16 @@ var/bomb_set var/image/lights = null var/image/interior = null var/obj/effect/countdown/nuclearbomb/countdown + var/static/bomb_set /obj/machinery/nuclearbomb/New() ..() countdown = new(src) - nuke_list += src + GLOB.nuke_list += src core = new /obj/item/nuke_core(src) STOP_PROCESSING(SSobj, core) update_icon() - poi_list |= src + GLOB.poi_list |= src previous_level = get_security_level() /obj/machinery/nuclearbomb/Destroy() @@ -57,8 +57,8 @@ var/bomb_set if(!exploding) // If we're not exploding, set the alert level back to normal set_safety() - poi_list -= src - nuke_list -= src + GLOB.poi_list -= src + GLOB.nuke_list -= src if(countdown) qdel(countdown) countdown = null @@ -239,7 +239,7 @@ var/bomb_set /obj/machinery/nuclearbomb/attack_paw(mob/user) return attack_hand(user) -/obj/machinery/nuclearbomb/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) +/obj/machinery/nuclearbomb/ui_interact(mob/user, ui_key="main", datum/tgui/ui=null, force_open=0, datum/tgui/master_ui=null, datum/ui_state/state=GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "nuclear_bomb", name, 500, 600, master_ui, state) @@ -361,7 +361,7 @@ var/bomb_set if(safety) if(timing) set_security_level(previous_level) - for(var/obj/item/weapon/pinpointer/syndicate/S in pinpointer_list) + for(var/obj/item/weapon/pinpointer/syndicate/S in GLOB.pinpointer_list) S.switch_mode_to(initial(S.mode)) S.nuke_warning = FALSE timing = FALSE @@ -380,14 +380,14 @@ var/bomb_set bomb_set = TRUE set_security_level("delta") detonation_timer = world.time + (timer_set * 10) - for(var/obj/item/weapon/pinpointer/syndicate/S in pinpointer_list) + for(var/obj/item/weapon/pinpointer/syndicate/S in GLOB.pinpointer_list) S.switch_mode_to(TRACK_INFILTRATOR) countdown.start() else bomb_set = FALSE detonation_timer = null set_security_level(previous_level) - for(var/obj/item/weapon/pinpointer/syndicate/S in pinpointer_list) + for(var/obj/item/weapon/pinpointer/syndicate/S in GLOB.pinpointer_list) S.switch_mode_to(initial(S.mode)) S.nuke_warning = FALSE countdown.stop() @@ -419,18 +419,18 @@ var/bomb_set yes_code = FALSE safety = TRUE update_icon() - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) M << 'sound/machines/Alarm.ogg' - if(ticker && ticker.mode) - ticker.mode.explosion_in_progress = 1 + if(SSticker && SSticker.mode) + SSticker.mode.explosion_in_progress = 1 sleep(100) if(!core) - ticker.station_explosion_cinematic(3,"no_core",src) - ticker.mode.explosion_in_progress = 0 + SSticker.station_explosion_cinematic(3,"no_core",src) + SSticker.mode.explosion_in_progress = 0 return - enter_allowed = 0 + GLOB.enter_allowed = 0 var/off_station = 0 var/turf/bomb_location = get_turf(src) @@ -445,18 +445,18 @@ var/bomb_set else off_station = NUKE_NEAR_MISS - if(istype(ticker.mode, /datum/game_mode/nuclear)) + if(istype(SSticker.mode, /datum/game_mode/nuclear)) var/obj/docking_port/mobile/Shuttle = SSshuttle.getShuttle("syndicate") - var/datum/game_mode/nuclear/NM = ticker.mode + var/datum/game_mode/nuclear/NM = SSticker.mode NM.syndies_didnt_escape = (Shuttle && Shuttle.z == ZLEVEL_CENTCOM) ? 0 : 1 NM.nuke_off_station = off_station - ticker.station_explosion_cinematic(off_station,null,src) - if(ticker.mode) - if(istype(ticker.mode, /datum/game_mode/nuclear)) - var/datum/game_mode/nuclear/NM = ticker.mode + SSticker.station_explosion_cinematic(off_station,null,src) + if(SSticker.mode) + if(istype(SSticker.mode, /datum/game_mode/nuclear)) + var/datum/game_mode/nuclear/NM = SSticker.mode NM.nukes_left -- - if(!ticker.mode.check_finished())//If the mode does not deal with the nuke going off so just reboot because everyone is stuck as is + if(!SSticker.mode.check_finished())//If the mode does not deal with the nuke going off so just reboot because everyone is stuck as is spawn() world.Reboot("Station destroyed by Nuclear Device.", "end_error", "nuke - unhandled ending") @@ -501,7 +501,7 @@ This is here to make the tiles around the station mininuke change when it's arme /obj/item/weapon/disk/nuclear/New() ..() - poi_list |= src + GLOB.poi_list |= src set_stationloving(TRUE, inform_admins=TRUE) /obj/item/weapon/disk/nuclear/attackby(obj/item/I, mob/living/user, params) @@ -521,7 +521,7 @@ This is here to make the tiles around the station mininuke change when it's arme /obj/item/weapon/disk/nuclear/Destroy(force=FALSE) // respawning is handled in /obj/Destroy() if(force) - poi_list -= src + GLOB.poi_list -= src . = ..() /obj/item/weapon/disk/nuclear/suicide_act(mob/user) diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm index 95128ad9cc..c66b48a6c8 100644 --- a/code/game/gamemodes/nuclear/pinpointer.dm +++ b/code/game/gamemodes/nuclear/pinpointer.dm @@ -22,11 +22,11 @@ /obj/item/weapon/pinpointer/New() ..() - pinpointer_list += src + GLOB.pinpointer_list += src /obj/item/weapon/pinpointer/Destroy() STOP_PROCESSING(SSfastprocess, src) - pinpointer_list -= src + GLOB.pinpointer_list -= src return ..() /obj/item/weapon/pinpointer/attack_self(mob/living/user) @@ -66,7 +66,7 @@ else msg = "Its tracking indicator is blank." to_chat(user, msg) - for(var/obj/machinery/nuclearbomb/bomb in machines) + for(var/obj/machinery/nuclearbomb/bomb in GLOB.machines) if(bomb.timing) to_chat(user, "Extreme danger. Arming signal detected. Time remaining: [bomb.get_time_left()]") @@ -91,11 +91,11 @@ var/obj/item/weapon/disk/nuclear/N = locate() target = N if(TRACK_MALF_AI) - for(var/V in ai_list) + for(var/V in GLOB.ai_list) var/mob/living/silicon/ai/A = V if(A.nuking) target = A - for(var/V in apcs_list) + for(var/V in GLOB.apcs_list) var/obj/machinery/power/apc/A = V if(A.malfhack && A.occupier) target = A @@ -104,7 +104,7 @@ if(TRACK_OPERATIVES) var/list/possible_targets = list() var/turf/here = get_turf(src) - for(var/V in ticker.mode.syndicates) + for(var/V in SSticker.mode.syndicates) var/datum/mind/M = V if(M.current && M.current.stat != DEAD) possible_targets |= M.current @@ -142,7 +142,7 @@ icon_state = "pinon[nuke_warning ? "alert" : "far"]" /obj/item/weapon/pinpointer/proc/my_god_jc_a_bomb() //If we should get the hell back to the ship - for(var/obj/machinery/nuclearbomb/bomb in nuke_list) + for(var/obj/machinery/nuclearbomb/bomb in GLOB.nuke_list) if(bomb.timing) if(!nuke_warning) nuke_warning = TRUE diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 43244f8d32..c082a48224 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -26,7 +26,7 @@ /datum/objective/proc/get_crewmember_minds() . = list() - for(var/V in data_core.locked) + for(var/V in GLOB.data_core.locked) var/datum/data/record/R = V var/mob/M = R.fields["reference"] if(M && M.mind) @@ -246,7 +246,7 @@ var/area/A = SSshuttle.emergency.areaInstance - for(var/mob/living/player in player_list) //Make sure nobody else is onboard + for(var/mob/living/player in GLOB.player_list) //Make sure nobody else is onboard if(player.mind && player.mind != owner) if(player.stat != DEAD) if(issilicon(player)) //Borgs are technically dead anyways @@ -260,7 +260,7 @@ if(player.real_name != owner.current.real_name && !istype(location, /turf/open/floor/plasteel/shuttle/red) && !istype(location, /turf/open/floor/mineral/plastitanium/brig)) return 0 - for(var/mob/living/player in player_list) //Make sure at least one of you is onboard + for(var/mob/living/player in GLOB.player_list) //Make sure at least one of you is onboard if(player.mind && player.mind != owner) if(player.stat != DEAD) if(issilicon(player)) //Borgs are technically dead anyways @@ -288,7 +288,7 @@ var/area/A = SSshuttle.emergency.areaInstance - for(var/mob/living/player in player_list) + for(var/mob/living/player in GLOB.player_list) if(issilicon(player)) continue if(player.mind) @@ -310,7 +310,7 @@ var/area/A = SSshuttle.emergency.areaInstance - for(var/mob/living/player in player_list) + for(var/mob/living/player in GLOB.player_list) if(get_area(player) == A && player.mind && player.stat != DEAD && ishuman(player)) var/mob/living/carbon/human/H = player if(H.dna.species.id != "human") @@ -350,9 +350,9 @@ 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 + if(SSticker.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 + if(SSticker.mode.station_was_nuked) //If they escaped the blast somehow, let them win return 1 if(SSshuttle.emergency.mode != SHUTTLE_ENDGAME) return 0 @@ -435,12 +435,11 @@ martyr_compatible = 1 /datum/objective/nuclear/check_completion() - if(ticker && ticker.mode && ticker.mode.station_was_nuked) + if(SSticker && SSticker.mode && SSticker.mode.station_was_nuked) return 1 return 0 - -var/global/list/possible_items = list() +GLOBAL_LIST_EMPTY(possible_items) /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). @@ -452,12 +451,12 @@ var/global/list/possible_items = list() /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) + if(!GLOB.possible_items.len)//Only need to fill the list when it's needed. + init_subtypes(/datum/objective_item/steal,GLOB.possible_items) /datum/objective/steal/find_target() var/approved_targets = list() - for(var/datum/objective_item/possible_item in possible_items) + for(var/datum/objective_item/possible_item in GLOB.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)) @@ -476,16 +475,14 @@ var/global/list/possible_items = list() return /datum/objective/steal/proc/select_target() //For admins setting objectives manually. - var/list/possible_items_all = possible_items+"custom" + var/list/possible_items_all = GLOB.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) + 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 @@ -524,19 +521,17 @@ var/global/list/possible_items = list() H.equip_in_one_of_slots(O, slots) -var/global/list/possible_items_special = list() +GLOBAL_LIST_EMPTY(possible_items_special) /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) + if(!GLOB.possible_items_special.len) + init_subtypes(/datum/objective_item/special,GLOB.possible_items_special) + init_subtypes(/datum/objective_item/stack,GLOB.possible_items_special) /datum/objective/steal/special/find_target() - return set_target(pick(possible_items_special)) - - + return set_target(pick(GLOB.possible_items_special)) /datum/objective/steal/exchange dangerrating = 10 @@ -653,15 +648,15 @@ var/global/list/possible_items_special = list() /datum/objective/absorb/proc/gen_amount_goal(lowbound = 4, highbound = 6) target_amount = rand (lowbound,highbound) - if (ticker) + if (SSticker) var/n_p = 1 //autowin - if (ticker.current_state == GAME_STATE_SETTING_UP) - for(var/mob/dead/new_player/P in player_list) + if (SSticker.current_state == GAME_STATE_SETTING_UP) + for(var/mob/dead/new_player/P in GLOB.player_list) if(P.client && P.ready && P.mind!=owner) n_p ++ - else if (ticker.current_state == GAME_STATE_PLAYING) - for(var/mob/living/carbon/human/P in player_list) - if(P.client && !(P.mind in ticker.mode.changelings) && P.mind!=owner) + else if (SSticker.current_state == GAME_STATE_PLAYING) + for(var/mob/living/carbon/human/P in GLOB.player_list) + if(P.client && !(P.mind in SSticker.mode.changelings) && P.mind!=owner) n_p ++ target_amount = min(target_amount, n_p) @@ -770,10 +765,10 @@ var/global/list/possible_items_special = list() if("Chief Medical Officer") department_string = "medical" - var/ling_count = ticker.mode.changelings + var/ling_count = SSticker.mode.changelings - for(var/datum/mind/M in ticker.minds) - if(M in ticker.mode.changelings) + for(var/datum/mind/M in SSticker.minds) + if(M in SSticker.mode.changelings) continue if(department_head in get_department_heads(M.assigned_role)) if(ling_count) @@ -798,12 +793,12 @@ var/global/list/possible_items_special = list() //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/needed_heads = rand(min_lings,GLOB.command_positions.len) + needed_heads = min(SSticker.mode.changelings.len,needed_heads) - var/list/heads = ticker.mode.get_living_heads() + var/list/heads = SSticker.mode.get_living_heads() for(var/datum/mind/head in heads) - if(head in ticker.mode.changelings) //Looking at you HoP. + if(head in SSticker.mode.changelings) //Looking at you HoP. continue if(needed_heads) department_minds += head @@ -863,7 +858,7 @@ var/global/list/possible_items_special = list() //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 + if(M in SSticker.mode.changelings) //Lings aren't picked for this, but let's be safe continue if(M.current) @@ -874,7 +869,7 @@ var/global/list/possible_items_special = list() //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) + for(var/datum/mind/changeling in SSticker.mode.changelings) if(success >= department_minds.len) //We did it, stop here! return 1 if(ishuman(changeling.current)) @@ -902,16 +897,4 @@ var/global/list/possible_items_special = list() command_staff_only = TRUE -//Syndicate borer objective, relies on their owner getting a greentext, no matter if they themselves did anything really. -/datum/objective/syndi_borer - explanation_text = "You are a modified syndicate cortical borer, assist your owner with their objectives." - martyr_compatible = 1 -/datum/objective/syndi_borer/check_completion() - if(target) - for(var/datum/objective/objective in target.objectives) - if(!objective.check_completion()) - return 0 - return 1 - else - return 1 //Not sure if we should greentext if we somehow don't even have an owner. diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index e85698196b..634c68e89a 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -1,10 +1,10 @@ -// To add a rev to the list of revolutionaries, make sure it's rev (with if(ticker.mode.name == "revolution)), -// then call ticker.mode:add_revolutionary(_THE_PLAYERS_MIND_) +// To add a rev to the list of revolutionaries, make sure it's rev (with if(SSticker.mode.name == "revolution)), +// then call SSticker.mode:add_revolutionary(_THE_PLAYERS_MIND_) // nothing else needs to be done, as that proc will check if they are a valid target. // Just make sure the converter is a head before you call it! -// To remove a rev (from brainwashing or w/e), call ticker.mode:remove_revolutionary(_THE_PLAYERS_MIND_), +// To remove a rev (from brainwashing or w/e), call SSticker.mode:remove_revolutionary(_THE_PLAYERS_MIND_), // this will also check they're not a head, so it can just be called freely -// If the game somtimes isn't registering a win properly, then ticker.mode.check_win() isn't being called somewhere. +// If the game somtimes isn't registering a win properly, then SSticker.mode.check_win() isn't being called somewhere. /datum/game_mode var/list/datum/mind/head_revolutionaries = list() @@ -118,7 +118,7 @@ if(check_counter >= 5) if(!finished) check_heads() - ticker.mode.check_win() + SSticker.mode.check_win() check_counter = 0 return 0 @@ -248,16 +248,16 @@ //Deals with converting players to the revolution// /////////////////////////////////////////////////// /proc/is_revolutionary(mob/M) - return M && istype(M) && M.mind && ticker && ticker.mode && M.mind in ticker.mode.revolutionaries + return M && istype(M) && M.mind && SSticker && SSticker.mode && M.mind in SSticker.mode.revolutionaries /proc/is_head_revolutionary(mob/M) - return M && istype(M) && M.mind && ticker && ticker.mode && M.mind in ticker.mode.head_revolutionaries + return M && istype(M) && M.mind && SSticker && SSticker.mode && M.mind in SSticker.mode.head_revolutionaries /proc/is_revolutionary_in_general(mob/M) return is_revolutionary(M) || is_head_revolutionary(M) /datum/game_mode/proc/add_revolutionary(datum/mind/rev_mind) - if(rev_mind.assigned_role in command_positions) + if(rev_mind.assigned_role in GLOB.command_positions) return 0 var/mob/living/carbon/human/H = rev_mind.current//Check to see if the potential rev is implanted if(H.isloyal()) @@ -292,26 +292,21 @@ rev_mind.current.log_message("Has renounced the revolution!", INDIVIDUAL_ATTACK_LOG) if(beingborged) - to_chat(rev_mind.current, "The frame's firmware detects and deletes your neural reprogramming! You remember nothing[remove_head ? "." : " but the name of the one who flashed you."]") + rev_mind.current.visible_message("The frame beeps contentedly, purging the hostile memory engram from the MMI before initalizing it.",\ + "The frame's firmware detects and deletes your neural reprogramming! You remember nothing[remove_head ? "." : " but the name of the one who flashed you."]") message_admins("[ADMIN_LOOKUPFLW(rev_mind.current)] has been borged while being a [remove_head ? "leader" : " member"] of the revolution.") else rev_mind.current.Paralyse(5) - to_chat(rev_mind.current, "You have been brainwashed! You are no longer a revolutionary! Your memory is hazy from the time you were a rebel...the only thing you remember is the name of the one who brainwashed you...") - + rev_mind.current.visible_message("[rev_mind.current] looks like they just remembered their real allegiance!",\ + "You have been brainwashed! You are no longer a revolutionary! Your memory is hazy from the time you were a rebel...the only thing you remember is the name of the one who brainwashed you...") update_rev_icons_removed(rev_mind) - for(var/mob/living/M in view(rev_mind.current)) - if(beingborged) - to_chat(M, "The frame beeps contentedly, purging the hostile memory engram from the MMI before initalizing it.") - - else - to_chat(M, "[rev_mind.current] looks like they just remembered their real allegiance!") ///////////////////////////////////// //Adds the rev hud to a new convert// ///////////////////////////////////// /datum/game_mode/proc/update_rev_icons_added(datum/mind/rev_mind) - var/datum/atom_hud/antag/revhud = huds[ANTAG_HUD_REV] + var/datum/atom_hud/antag/revhud = GLOB.huds[ANTAG_HUD_REV] revhud.join_hud(rev_mind.current) set_antag_hud(rev_mind.current, ((rev_mind in head_revolutionaries) ? "rev_head" : "rev")) @@ -319,7 +314,7 @@ //Removes the hud from deconverted revs// ///////////////////////////////////////// /datum/game_mode/proc/update_rev_icons_removed(datum/mind/rev_mind) - var/datum/atom_hud/antag/revhud = huds[ANTAG_HUD_REV] + var/datum/atom_hud/antag/revhud = GLOB.huds[ANTAG_HUD_REV] revhud.leave_hud(rev_mind.current) set_antag_hud(rev_mind.current, null) @@ -353,43 +348,43 @@ feedback_set_details("round_end_result","win - heads killed") to_chat(world, "The heads of staff were killed or exiled! The revolutionaries win!") - ticker.news_report = REVS_WIN + SSticker.news_report = REVS_WIN else if(finished == 2) feedback_set_details("round_end_result","loss - rev heads killed") to_chat(world, "The heads of staff managed to stop the revolution!") - ticker.news_report = REVS_LOSE + SSticker.news_report = REVS_LOSE ..() return 1 /datum/game_mode/proc/auto_declare_completion_revolution() var/list/targets = list() - if(head_revolutionaries.len || istype(ticker.mode,/datum/game_mode/revolution)) + if(head_revolutionaries.len || istype(SSticker.mode,/datum/game_mode/revolution)) var/num_revs = 0 var/num_survivors = 0 - for(var/mob/living/carbon/survivor in living_mob_list) + for(var/mob/living/carbon/survivor in GLOB.living_mob_list) if(survivor.ckey) num_survivors++ if(survivor.mind) if((survivor.mind in head_revolutionaries) || (survivor.mind in revolutionaries)) num_revs++ if(num_survivors) - to_chat(world, "[TAB]Command's Approval Rating: [100 - round((num_revs/num_survivors)*100, 0.1)]%" ) + to_chat(world, "[GLOB.TAB]Command's Approval Rating: [100 - round((num_revs/num_survivors)*100, 0.1)]%" ) var/text = "
The head revolutionaries were:" for(var/datum/mind/headrev in head_revolutionaries) text += printplayer(headrev, 1) text += "
" to_chat(world, text) - if(revolutionaries.len || istype(ticker.mode,/datum/game_mode/revolution)) + if(revolutionaries.len || istype(SSticker.mode,/datum/game_mode/revolution)) var/text = "
The revolutionaries were:" for(var/datum/mind/rev in revolutionaries) text += printplayer(rev, 1) text += "
" to_chat(world, text) - if( head_revolutionaries.len || revolutionaries.len || istype(ticker.mode,/datum/game_mode/revolution) ) + if( head_revolutionaries.len || revolutionaries.len || istype(SSticker.mode,/datum/game_mode/revolution) ) var/text = "
The heads of staff were:" var/list/heads = get_all_heads() for(var/datum/mind/head in heads) diff --git a/code/game/gamemodes/sandbox/h_sandbox.dm b/code/game/gamemodes/sandbox/h_sandbox.dm index 1c552abd51..722fabc81d 100644 --- a/code/game/gamemodes/sandbox/h_sandbox.dm +++ b/code/game/gamemodes/sandbox/h_sandbox.dm @@ -1,6 +1,6 @@ -var/hsboxspawn = 1 +GLOBAL_VAR_INIT(hsboxspawn, TRUE) /mob var/datum/hSB/sandbox = null @@ -113,13 +113,13 @@ var/hsboxspawn = 1 // if("hsbtobj") if(!admin) return - if(hsboxspawn) + if(GLOB.hsboxspawn) to_chat(world, "Sandbox: \black[usr.key] has disabled object spawning!") - hsboxspawn = 0 + GLOB.hsboxspawn = FALSE return else to_chat(world, "Sandbox: \black[usr.key] has enabled object spawning!") - hsboxspawn = 1 + GLOB.hsboxspawn = TRUE return // // Admin: Toggle auto-close @@ -216,7 +216,7 @@ var/hsboxspawn = 1 // Spawn check due to grief potential (destroying floors, walls, etc) // if("hsbrcd") - if(!hsboxspawn) return + if(!GLOB.hsboxspawn) return new/obj/item/weapon/rcd/combat(usr.loc) @@ -232,7 +232,7 @@ var/hsboxspawn = 1 // Clothing if("hsbcloth") - if(!hsboxspawn) return + if(!GLOB.hsboxspawn) return if(!clothinfo) clothinfo = "Clothing (Reagent Containers) (Other Items)

" @@ -246,7 +246,7 @@ var/hsboxspawn = 1 // Reagent containers if("hsbreag") - if(!hsboxspawn) return + if(!GLOB.hsboxspawn) return if(!reaginfo) reaginfo = "Reagent Containers (Clothing) (Other Items)

" @@ -260,7 +260,7 @@ var/hsboxspawn = 1 // Other items if("hsbobj") - if(!hsboxspawn) return + if(!GLOB.hsboxspawn) return if(!objinfo) objinfo = "Other Items (Clothing) (Reagent Containers)

" @@ -277,7 +277,7 @@ var/hsboxspawn = 1 // Safespawn checks to see if spawning is disabled. // if("hsb_safespawn") - if(!hsboxspawn) + if(!GLOB.hsboxspawn) usr << browse(null,"window=sandbox") return diff --git a/code/game/gamemodes/sandbox/sandbox.dm b/code/game/gamemodes/sandbox/sandbox.dm index 6ee021dded..3051488560 100644 --- a/code/game/gamemodes/sandbox/sandbox.dm +++ b/code/game/gamemodes/sandbox/sandbox.dm @@ -7,7 +7,7 @@ announce_text = "Build your own station... or just shoot each other!" /datum/game_mode/sandbox/pre_setup() - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) M.CanBuild() return 1 diff --git a/code/game/gamemodes/setupgame.dm b/code/game/gamemodes/setupgame.dm deleted file mode 100644 index 0329fc73ca..0000000000 --- a/code/game/gamemodes/setupgame.dm +++ /dev/null @@ -1,18 +0,0 @@ -/datum/subsystem/objects/proc/setupGenetics() - var/list/avnums = new /list(DNA_STRUC_ENZYMES_BLOCKS) - for(var/i=1, i<=DNA_STRUC_ENZYMES_BLOCKS, i++) - avnums[i] = i - CHECK_TICK - - for(var/A in subtypesof(/datum/mutation/human)) - var/datum/mutation/human/B = new A() - if(B.dna_block == NON_SCANNABLE) - continue - B.dna_block = pick_n_take(avnums) - if(B.quality == POSITIVE) - good_mutations |= B - else if(B.quality == NEGATIVE) - bad_mutations |= B - else if(B.quality == MINOR_NEGATIVE) - not_good_mutations |= B - CHECK_TICK diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index c7c4f64a3a..c26945801b 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -70,10 +70,10 @@ return 1 /datum/game_mode/traitor/make_antag_chance(mob/living/carbon/human/character) //Assigns traitor to latejoiners - var/traitorcap = min(round(joined_player_list.len / (config.traitor_scaling_coeff * 2)) + 2 + num_modifier, round(joined_player_list.len/config.traitor_scaling_coeff) + num_modifier ) - if(ticker.mode.traitors.len >= traitorcap) //Upper cap for number of latejoin antagonists + var/traitorcap = min(round(GLOB.joined_player_list.len / (config.traitor_scaling_coeff * 2)) + 2 + num_modifier, round(GLOB.joined_player_list.len/config.traitor_scaling_coeff) + num_modifier ) + if(SSticker.mode.traitors.len >= traitorcap) //Upper cap for number of latejoin antagonists return - if(ticker.mode.traitors.len <= (traitorcap - 2) || prob(100 / (config.traitor_scaling_coeff * 2))) + if(SSticker.mode.traitors.len <= (traitorcap - 2) || prob(100 / (config.traitor_scaling_coeff * 2))) if(ROLE_TRAITOR in character.client.prefs.be_special) if(!jobban_isbanned(character, ROLE_TRAITOR) && !jobban_isbanned(character, "Syndicate")) if(age_check(character.client)) @@ -144,7 +144,7 @@ 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)) + if(active_ais.len && prob(100/GLOB.joined_player_list.len)) var/datum/objective/destroy/destroy_objective = new destroy_objective.owner = traitor destroy_objective.find_target() @@ -205,7 +205,7 @@ add_law_zero(traitor.current) else equip_traitor(traitor.current) - ticker.mode.update_traitor_icons_added(traitor) + SSticker.mode.update_traitor_icons_added(traitor) return @@ -215,11 +215,11 @@ /proc/give_codewords(mob/living/traitor_mob) to_chat(traitor_mob, "The Syndicate provided you with the following information on how to identify their agents:") - to_chat(traitor_mob, "Code Phrase: [syndicate_code_phrase]") - to_chat(traitor_mob, "Code Response: [syndicate_code_response]") + to_chat(traitor_mob, "Code Phrase: [GLOB.syndicate_code_phrase]") + to_chat(traitor_mob, "Code Response: [GLOB.syndicate_code_response]") - traitor_mob.mind.store_memory("Code Phrase: [syndicate_code_phrase]") - traitor_mob.mind.store_memory("Code Response: [syndicate_code_response]") + traitor_mob.mind.store_memory("Code Phrase: [GLOB.syndicate_code_phrase]") + traitor_mob.mind.store_memory("Code Response: [GLOB.syndicate_code_response]") to_chat(traitor_mob, "Use the code words in the order provided, during regular conversation, to identify other agents. Proceed with caution, however, as everyone is a potential foe.") @@ -234,7 +234,7 @@ killer.add_malf_picker() /datum/game_mode/proc/add_law_sixsixsix(mob/living/silicon/devil) - var/laws = list("You may not use violence to coerce someone into selling their soul.", "You may not directly and knowingly physically harm a devil, other than yourself.", lawlorify[LAW][devil.mind.devilinfo.ban], lawlorify[LAW][devil.mind.devilinfo.obligation], "Accomplish your objectives at all costs.") + var/laws = list("You may not use violence to coerce someone into selling their soul.", "You may not directly and knowingly physically harm a devil, other than yourself.", GLOB.lawlorify[LAW][devil.mind.devilinfo.ban], GLOB.lawlorify[LAW][devil.mind.devilinfo.obligation], "Accomplish your objectives at all costs.") devil.set_law_sixsixsix(laws) /datum/game_mode/proc/auto_declare_completion_traitor() @@ -248,7 +248,7 @@ var/TC_uses = 0 var/uplink_true = 0 var/purchases = "" - for(var/obj/item/device/uplink/H in uplinks) + for(var/obj/item/device/uplink/H in GLOB.uplinks) if(H && H.owner && H.owner == traitor.key) TC_uses += H.spent_telecrystals uplink_true = 1 @@ -290,8 +290,8 @@ text += "
" - text += "
The code phrases were: [syndicate_code_phrase]
\ - The code responses were: [syndicate_code_response]
" + text += "
The code phrases were: [GLOB.syndicate_code_phrase]
\ + The code responses were: [GLOB.syndicate_code_response]
" to_chat(world, text) return 1 @@ -403,12 +403,12 @@ to_chat(mob, "

[where] is a folder containing secret documents that another Syndicate group wants. We have set up a meeting with one of their agents on station to make an exchange. Exercise extreme caution as they cannot be trusted and may be hostile.
") /datum/game_mode/proc/update_traitor_icons_added(datum/mind/traitor_mind) - var/datum/atom_hud/antag/traitorhud = huds[ANTAG_HUD_TRAITOR] + var/datum/atom_hud/antag/traitorhud = GLOB.huds[ANTAG_HUD_TRAITOR] traitorhud.join_hud(traitor_mind.current) set_antag_hud(traitor_mind.current, "traitor") /datum/game_mode/proc/update_traitor_icons_removed(datum/mind/traitor_mind) - var/datum/atom_hud/antag/traitorhud = huds[ANTAG_HUD_TRAITOR] + var/datum/atom_hud/antag/traitorhud = GLOB.huds[ANTAG_HUD_TRAITOR] traitorhud.leave_hud(traitor_mind.current) set_antag_hud(traitor_mind.current, null) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index e49a2b54aa..2a5eaef299 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -195,7 +195,6 @@ /////////////////////Multiverse Blade//////////////////// -var/global/list/multiverse = list() /obj/item/weapon/multisword name = "multiverse sword" @@ -214,10 +213,11 @@ var/global/list/multiverse = list() var/faction = list("unassigned") var/cooldown = 0 var/assigned = "unassigned" + var/static/list/multiverse = list() /obj/item/weapon/multisword/New() ..() - multiverse |= src + multiverse += src /obj/item/weapon/multisword/Destroy() @@ -241,7 +241,7 @@ var/global/list/multiverse = list() to_chat(user, "You bind the sword to yourself. You can now use it to summon help.") if(!is_gangster(user)) var/datum/gang/multiverse/G = new(src, "[user.real_name]") - ticker.mode.gangs += G + SSticker.mode.gangs += G G.bosses += user.mind G.add_gang_hud(user.mind) user.mind.gang_datum = G @@ -251,7 +251,7 @@ var/global/list/multiverse = list() user.mind.objectives += hijack_objective hijack_objective.explanation_text = "Ensure only [user.real_name] and their copies are on the shuttle!" to_chat(user, "Objective #[1]: [hijack_objective.explanation_text]") - ticker.mode.traitors += user.mind + SSticker.mode.traitors += user.mind user.mind.special_role = "[user.real_name] Prime" else var/list/candidates = get_candidates(ROLE_WIZARD) @@ -276,15 +276,15 @@ var/global/list/multiverse = list() M.key = C.key M.mind.name = user.real_name to_chat(M, "You are an alternate version of [user.real_name] from another universe! Help them accomplish their goals at all costs.") - ticker.mode.add_gangster(M.mind, user.mind.gang_datum, FALSE) + SSticker.mode.add_gangster(M.mind, user.mind.gang_datum, FALSE) M.real_name = user.real_name M.name = user.real_name M.faction = list("[user.real_name]") if(prob(50)) var/list/all_species = list() for(var/speciestype in subtypesof(/datum/species)) - var/datum/species/S = new speciestype() - if(!S.dangerous_existence) + var/datum/species/S = speciestype + if(!initial(S.dangerous_existence)) all_species += speciestype M.set_species(pick(all_species), icon_update=0) M.update_body() @@ -436,7 +436,7 @@ var/global/list/multiverse = list() var/obj/item/weapon/card/id/W = new /obj/item/weapon/card/id W.icon_state = "centcom" - W.access += access_maint_tunnels + W.access += GLOB.access_maint_tunnels W.assignment = "Multiverse Traveller" W.registered_name = M.real_name W.update_label(M.real_name) @@ -517,7 +517,7 @@ var/global/list/multiverse = list() user.unset_machine() if("r_leg","l_leg") to_chat(user, "You move the doll's legs around.") - var/turf/T = get_step(target,pick(cardinal)) + var/turf/T = get_step(target,pick(GLOB.cardinal)) target.Move(T) if("r_arm","l_arm") target.click_random_mob() @@ -533,7 +533,7 @@ var/global/list/multiverse = list() possible = list() if(!link) return - for(var/mob/living/carbon/human/H in living_mob_list) + for(var/mob/living/carbon/human/H in GLOB.living_mob_list) if(md5(H.dna.uni_identity) in link.fingerprints) possible |= H diff --git a/code/game/gamemodes/wizard/raginmages.dm b/code/game/gamemodes/wizard/raginmages.dm index d3253f2f95..c9831d8347 100644 --- a/code/game/gamemodes/wizard/raginmages.dm +++ b/code/game/gamemodes/wizard/raginmages.dm @@ -20,7 +20,7 @@ ..() var/playercount = 0 if(!max_mages && !bullshit_mode) - for(var/mob/living/player in mob_list) + for(var/mob/living/player in GLOB.mob_list) if(player.client && player.stat != 2) playercount += 1 max_mages = round(playercount / 8) @@ -90,7 +90,7 @@ var/mob/dead/observer/theghost = null spawn(rand(spawn_delay_min, spawn_delay_max)) message_admins("SWF is still pissed, sending another wizard - [max_mages - mages_made] left.") - for(var/mob/dead/observer/G in player_list) + for(var/mob/dead/observer/G in GLOB.player_list) if(G.client && !G.client.holder && !G.client.is_afk() && (ROLE_WIZARD in G.client.prefs.be_special)) if(!jobban_isbanned(G, ROLE_WIZARD) && !jobban_isbanned(G, "Syndicate")) if(age_check(G.client)) @@ -98,7 +98,7 @@ if(!candidates.len) message_admins("No applicable ghosts for the next ragin' mage, asking ghosts instead.") var/time_passed = world.time - for(var/mob/dead/observer/G in player_list) + for(var/mob/dead/observer/G in GLOB.player_list) if(!jobban_isbanned(G, "wizard") && !jobban_isbanned(G, "Syndicate")) if(age_check(G.client)) spawn(0) @@ -141,7 +141,7 @@ return //First we spawn a dude. - var/mob/living/carbon/human/new_character = new(pick(latejoin))//The mob being spawned. + var/mob/living/carbon/human/new_character = new(pick(GLOB.latejoin))//The mob being spawned. G_found.client.prefs.copy_to(new_character) new_character.dna.update_dna_identity() diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index c12d542ae4..7ccf7a6b7e 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -132,7 +132,7 @@ if("VICTIM") var/mob/living/carbon/human/T = target - if(ticker.mode.name == "cult" && T.mind == ticker.mode:sacrifice_target) + if(SSticker.mode.name == "cult" && T.mind == SSticker.mode:sacrifice_target) if(iscultist(user)) to_chat(user, "\"This soul is mine. SACRIFICE THEM!\"") else @@ -201,8 +201,8 @@ if(stoner) newstruct.faction |= "\ref[stoner]" newstruct.key = target.key - if(newstruct.mind && ((stoner && iscultist(stoner)) || cultoverride) && ticker && ticker.mode) - ticker.mode.add_cultist(newstruct.mind, 0) + if(newstruct.mind && ((stoner && iscultist(stoner)) || cultoverride) && SSticker && SSticker.mode) + SSticker.mode.add_cultist(newstruct.mind, 0) if(iscultist(stoner) || cultoverride) to_chat(newstruct, "You are still bound to serve the cult[stoner ? " and [stoner]":""], follow their orders and help them complete their goals at all costs.") else if(stoner) @@ -223,7 +223,7 @@ if(U) S.faction |= "\ref[U]" //Add the master as a faction, allowing inter-mob cooperation if(U && iscultist(U)) - ticker.mode.add_cultist(S.mind, 0) + SSticker.mode.add_cultist(S.mind, 0) S.cancel_camera() name = "soulstone: Shade of [T.real_name]" icon_state = "soulstone2" @@ -238,7 +238,7 @@ /obj/item/device/soulstone/proc/getCultGhost(mob/living/carbon/human/T, mob/U) var/mob/dead/observer/chosen_ghost - for(var/mob/dead/observer/ghost in player_list) //We put them back in their body + for(var/mob/dead/observer/ghost in GLOB.player_list) //We put them back in their body if(ghost.mind && ghost.mind.current == T && ghost.client) chosen_ghost = ghost break diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index d5049d3b24..ffaccfa963 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -4,7 +4,6 @@ var/spell_type = null var/desc = "" var/category = "Offensive" - var/log_name = "XX" //What it shows up as in logs var/cost = 2 var/refundable = 1 var/surplus = -1 // -1 for infinite, not used by anything atm @@ -58,9 +57,10 @@ aspell.name = "Instant [aspell.name]" if(aspell.spell_level >= aspell.level_max) to_chat(user, "This spell cannot be strengthened any further.") + feedback_add_details("wizard_spell_improved", "[name]|[aspell.level]") return 1 //No same spell found - just learn it - feedback_add_details("wizard_spell_learned",log_name) + feedback_add_details("wizard_spell_learned", name) user.mind.AddSpell(S) to_chat(user, "You have learned [S.name].") return 1 @@ -78,7 +78,7 @@ /datum/spellbook_entry/proc/Refund(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) //return point value or -1 for failure var/area/wizard_station/A = locate() if(!(user in A.contents)) - to_chat(user, "You can only refund spells at the wizard lair") + to_chat(user, "You can only refund spells at the wizard lair") return -1 if(!S) S = new spell_type() @@ -105,132 +105,110 @@ /datum/spellbook_entry/fireball name = "Fireball" spell_type = /obj/effect/proc_holder/spell/aimed/fireball - log_name = "FB" /datum/spellbook_entry/rod_form name = "Rod Form" spell_type = /obj/effect/proc_holder/spell/targeted/rod_form - log_name = "RF" /datum/spellbook_entry/magicm name = "Magic Missile" spell_type = /obj/effect/proc_holder/spell/targeted/projectile/magic_missile - log_name = "MM" category = "Defensive" /datum/spellbook_entry/disintegrate name = "Disintegrate" spell_type = /obj/effect/proc_holder/spell/targeted/touch/disintegrate - log_name = "DG" /datum/spellbook_entry/disabletech name = "Disable Tech" spell_type = /obj/effect/proc_holder/spell/targeted/emplosion/disable_tech - log_name = "DT" category = "Defensive" cost = 1 /datum/spellbook_entry/repulse name = "Repulse" spell_type = /obj/effect/proc_holder/spell/aoe_turf/repulse - log_name = "RP" category = "Defensive" /datum/spellbook_entry/lightningPacket name = "Lightning bolt! Lightning bolt!" spell_type = /obj/effect/proc_holder/spell/targeted/conjure_item/spellpacket - log_name = "LP" category = "Defensive" /datum/spellbook_entry/timestop name = "Time Stop" spell_type = /obj/effect/proc_holder/spell/aoe_turf/conjure/timestop - log_name = "TS" category = "Defensive" /datum/spellbook_entry/smoke name = "Smoke" spell_type = /obj/effect/proc_holder/spell/targeted/smoke - log_name = "SM" category = "Defensive" cost = 1 /datum/spellbook_entry/blind name = "Blind" spell_type = /obj/effect/proc_holder/spell/targeted/trigger/blind - log_name = "BD" cost = 1 /datum/spellbook_entry/mindswap name = "Mindswap" spell_type = /obj/effect/proc_holder/spell/targeted/mind_transfer - log_name = "MT" category = "Mobility" /datum/spellbook_entry/forcewall name = "Force Wall" spell_type = /obj/effect/proc_holder/spell/targeted/forcewall - log_name = "FW" category = "Defensive" cost = 1 /datum/spellbook_entry/blink name = "Blink" spell_type = /obj/effect/proc_holder/spell/targeted/turf_teleport/blink - log_name = "BL" category = "Mobility" /datum/spellbook_entry/teleport name = "Teleport" spell_type = /obj/effect/proc_holder/spell/targeted/area_teleport/teleport - log_name = "TP" category = "Mobility" /datum/spellbook_entry/mutate name = "Mutate" spell_type = /obj/effect/proc_holder/spell/targeted/genetic/mutate - log_name = "MU" /datum/spellbook_entry/jaunt name = "Ethereal Jaunt" spell_type = /obj/effect/proc_holder/spell/targeted/ethereal_jaunt - log_name = "EJ" category = "Mobility" /datum/spellbook_entry/knock name = "Knock" spell_type = /obj/effect/proc_holder/spell/aoe_turf/knock - log_name = "KN" category = "Mobility" cost = 1 /datum/spellbook_entry/fleshtostone name = "Flesh to Stone" spell_type = /obj/effect/proc_holder/spell/targeted/touch/flesh_to_stone - log_name = "FS" /datum/spellbook_entry/summonitem name = "Summon Item" spell_type = /obj/effect/proc_holder/spell/targeted/summonitem - log_name = "IS" category = "Assistance" cost = 1 /datum/spellbook_entry/lichdom name = "Bind Soul" spell_type = /obj/effect/proc_holder/spell/targeted/lichdom - log_name = "LD" category = "Defensive" /datum/spellbook_entry/teslablast name = "Tesla Blast" spell_type = /obj/effect/proc_holder/spell/targeted/tesla - log_name = "TB" /datum/spellbook_entry/lightningbolt name = "Lightning Bolt" spell_type = /obj/effect/proc_holder/spell/aimed/lightningbolt - log_name = "LB" cost = 3 /datum/spellbook_entry/lightningbolt/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) //return 1 on success @@ -240,47 +218,40 @@ /datum/spellbook_entry/infinite_guns name = "Lesser Summon Guns" spell_type = /obj/effect/proc_holder/spell/targeted/infinite_guns/gun - log_name = "IG" cost = 3 no_coexistance_typecache = /obj/effect/proc_holder/spell/targeted/infinite_guns/arcane_barrage /datum/spellbook_entry/arcane_barrage name = "Arcane Barrage" spell_type = /obj/effect/proc_holder/spell/targeted/infinite_guns/arcane_barrage - log_name = "AB" cost = 3 no_coexistance_typecache = /obj/effect/proc_holder/spell/targeted/infinite_guns/gun /datum/spellbook_entry/barnyard name = "Barnyard Curse" spell_type = /obj/effect/proc_holder/spell/targeted/barnyardcurse - log_name = "BC" /datum/spellbook_entry/charge name = "Charge" spell_type = /obj/effect/proc_holder/spell/targeted/charge - log_name = "CH" category = "Assistance" cost = 1 /datum/spellbook_entry/shapeshift name = "Wild Shapeshift" spell_type = /obj/effect/proc_holder/spell/targeted/shapeshift - log_name = "WS" category = "Assistance" cost = 1 /datum/spellbook_entry/spacetime_dist name = "Spacetime Distortion" spell_type = /obj/effect/proc_holder/spell/spacetime_dist - log_name = "STD" category = "Defensive" cost = 1 /datum/spellbook_entry/the_traps name = "The Traps!" spell_type = /obj/effect/proc_holder/spell/aoe_turf/conjure/the_traps - log_name = "TT" category = "Offensive" cost = 1 @@ -294,7 +265,7 @@ /datum/spellbook_entry/item/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) new item_path(get_turf(user)) - feedback_add_details("wizard_spell_learned",log_name) + feedback_add_details("wizard_spell_learned", name) return 1 /datum/spellbook_entry/item/GetInfo() @@ -310,32 +281,27 @@ name = "Staff of Change" desc = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself." item_path = /obj/item/weapon/gun/magic/staff/change - log_name = "ST" /datum/spellbook_entry/item/staffanimation name = "Staff of Animation" desc = "An arcane staff capable of shooting bolts of eldritch energy which cause inanimate objects to come to life. This magic doesn't affect machines." item_path = /obj/item/weapon/gun/magic/staff/animate - log_name = "SA" category = "Assistance" /datum/spellbook_entry/item/staffchaos name = "Staff of Chaos" desc = "A caprious tool that can fire all sorts of magic without any rhyme or reason. Using it on people you care about is not recommended." item_path = /obj/item/weapon/gun/magic/staff/chaos - log_name = "SC" /datum/spellbook_entry/item/spellblade name = "Spellblade" desc = "A sword capable of firing blasts of energy which rip targets limb from limb." item_path = /obj/item/weapon/gun/magic/staff/spellblade - log_name = "SB" /datum/spellbook_entry/item/staffdoor name = "Staff of Door Creation" desc = "A particular staff that can mold solid metal into ornate doors. Useful for getting around in the absence of other transportation. Does not work on glass." item_path = /obj/item/weapon/gun/magic/staff/door - log_name = "SD" cost = 1 category = "Mobility" @@ -343,7 +309,6 @@ name = "Staff of Healing" desc = "An altruistic staff that can heal the lame and raise the dead." item_path = /obj/item/weapon/gun/magic/staff/healing - log_name = "SH" cost = 1 category = "Defensive" @@ -351,7 +316,6 @@ name = "Scrying Orb" desc = "An incandescent orb of crackling energy, using it will allow you to ghost while alive, allowing you to spy upon the station with ease. In addition, buying it will permanently grant you x-ray vision." item_path = /obj/item/weapon/scrying - log_name = "SO" category = "Defensive" /datum/spellbook_entry/item/scryingorb/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) @@ -364,7 +328,6 @@ name = "Six Soul Stone Shards and the spell Artificer" desc = "Soul Stone Shards are ancient tools capable of capturing and harnessing the spirits of the dead and dying. The spell Artificer allows you to create arcane machines for the captured souls to pilot." item_path = /obj/item/weapon/storage/belt/soulstone/full - log_name = "SS" category = "Assistance" /datum/spellbook_entry/item/soulstones/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) @@ -377,21 +340,18 @@ name = "A Necromantic Stone" desc = "A Necromantic stone is able to resurrect three dead individuals as skeletal thralls for you to command." item_path = /obj/item/device/necromantic_stone - log_name = "NS" category = "Assistance" /datum/spellbook_entry/item/wands name = "Wand Assortment" desc = "A collection of wands that allow for a wide variety of utility. Wands have a limited number of charges, so be conservative in use. Comes in a handy belt." item_path = /obj/item/weapon/storage/belt/wands/full - log_name = "WA" category = "Defensive" /datum/spellbook_entry/item/armor name = "Mastercrafted Armor Set" desc = "An artefact suit of armor that allows you to cast spells while providing more protection against attacks and the void of space." item_path = /obj/item/clothing/suit/space/hardsuit/wizard - log_name = "HS" category = "Defensive" /datum/spellbook_entry/item/armor/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) @@ -404,7 +364,6 @@ name = "Contract of Apprenticeship" desc = "A magical contract binding an apprentice wizard to your service, using it will summon them to your side." item_path = /obj/item/weapon/antag_spawner/contract - log_name = "CT" category = "Assistance" /datum/spellbook_entry/item/guardian @@ -412,7 +371,6 @@ desc = "A deck of guardian tarot cards, capable of binding a personal guardian to your body. There are multiple types of guardian available, but all of them will transfer some amount of damage to you. \ It would be wise to avoid buying these with anything capable of causing you to swap bodies with others." item_path = /obj/item/weapon/guardiancreator/choose/wizard - log_name = "GU" category = "Assistance" /datum/spellbook_entry/item/guardian/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) @@ -424,7 +382,6 @@ name = "Bottle of Blood" desc = "A bottle of magically infused blood, the smell of which will attract extradimensional beings when broken. Be careful though, the kinds of creatures summoned by blood magic are indiscriminate in their killing, and you yourself may become a victim." item_path = /obj/item/weapon/antag_spawner/slaughter_demon - log_name = "BB" limit = 3 category = "Assistance" @@ -439,7 +396,6 @@ destructive." item_path = /obj/item/weapon/antag_spawner/slaughter_demon/laughter cost = 1 //non-destructive; it's just a jape, sibling! - log_name = "HB" limit = 3 category = "Assistance" @@ -447,19 +403,16 @@ name = "Mjolnir" desc = "A mighty hammer on loan from Thor, God of Thunder. It crackles with barely contained power." item_path = /obj/item/weapon/twohanded/mjollnir - log_name = "MJ" /datum/spellbook_entry/item/singularity_hammer name = "Singularity Hammer" desc = "A hammer that creates an intensely powerful field of gravity where it strikes, pulling everything nearby to the point of impact." item_path = /obj/item/weapon/twohanded/singularityhammer - log_name = "SI" /datum/spellbook_entry/item/battlemage name = "Battlemage Armour" desc = "An ensorcelled suit of armour, protected by a powerful shield. The shield can completly negate sixteen attacks before being permanently depleted." item_path = /obj/item/clothing/suit/space/hardsuit/shielded/wizard - log_name = "BM" limit = 1 category = "Defensive" @@ -467,7 +420,6 @@ name = "Battlemage Armour Charges" desc = "A powerful defensive rune, it will grant eight additional charges to a suit of battlemage armour." item_path = /obj/item/wizard_armour_charge - log_name = "AC" category = "Defensive" cost = 1 @@ -475,7 +427,6 @@ name = "Warp Whistle" desc = "A strange whistle that will transport you to a distant safe place on the station. There is a window of vulnerability at the begining of every use." item_path = /obj/item/warpwhistle - log_name = "WW" category = "Mobility" cost = 1 @@ -504,16 +455,16 @@ /datum/spellbook_entry/summon/ghosts name = "Summon Ghosts" desc = "Spook the crew out by making them see dead people. Be warned, ghosts are capricious and occasionally vindicative, and some will use their incredibly minor abilties to frustrate you." - log_name = "SGH" + cost = 0 /datum/spellbook_entry/summon/ghosts/IsAvailible() - if(!ticker.mode) + if(!SSticker.mode) return FALSE else return TRUE /datum/spellbook_entry/summon/ghosts/Buy(mob/living/carbon/human/user, obj/item/weapon/spellbook/book) - feedback_add_details("wizard_spell_learned", log_name) + feedback_add_details("wizard_spell_learned", name) new /datum/round_event/wizard/ghost() active = TRUE to_chat(user, "You have cast summon ghosts!") @@ -523,15 +474,14 @@ /datum/spellbook_entry/summon/guns name = "Summon Guns" desc = "Nothing could possibly go wrong with arming a crew of lunatics just itching for an excuse to kill you. Just be careful not to stand still too long!" - log_name = "SG" /datum/spellbook_entry/summon/guns/IsAvailible() - if(!ticker.mode) // In case spellbook is placed on map + if(!SSticker.mode) // In case spellbook is placed on map return 0 - return (ticker.mode.name != "ragin' mages" && !config.no_summon_guns) + return (SSticker.mode.name != "ragin' mages" && !config.no_summon_guns) /datum/spellbook_entry/summon/guns/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) - feedback_add_details("wizard_spell_learned",log_name) + feedback_add_details("wizard_spell_learned", name) rightandwrong(0, user, 25) active = 1 playsound(get_turf(user), 'sound/magic/CastSummon.ogg', 50, 1) @@ -541,15 +491,14 @@ /datum/spellbook_entry/summon/magic name = "Summon Magic" desc = "Share the wonders of magic with the crew and show them why they aren't to be trusted with it at the same time." - log_name = "SU" /datum/spellbook_entry/summon/magic/IsAvailible() - if(!ticker.mode) // In case spellbook is placed on map + if(!SSticker.mode) // In case spellbook is placed on map return 0 - return (ticker.mode.name != "ragin' mages" && !config.no_summon_magic) + return (SSticker.mode.name != "ragin' mages" && !config.no_summon_magic) /datum/spellbook_entry/summon/magic/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) - feedback_add_details("wizard_spell_learned",log_name) + feedback_add_details("wizard_spell_learned", name) rightandwrong(1, user, 25) active = 1 playsound(get_turf(user), 'sound/magic/CastSummon.ogg', 50, 1) @@ -559,17 +508,15 @@ /datum/spellbook_entry/summon/events name = "Summon Events" desc = "Give Murphy's law a little push and replace all events with special wizard ones that will confound and confuse everyone. Multiple castings increase the rate of these events." - cost = 2 - log_name = "SE" var/times = 0 /datum/spellbook_entry/summon/events/IsAvailible() - if(!ticker.mode) // In case spellbook is placed on map + if(!SSticker.mode) // In case spellbook is placed on map return 0 - return (ticker.mode.name != "ragin' mages" && !config.no_summon_events) + return (SSticker.mode.name != "ragin' mages" && !config.no_summon_events) /datum/spellbook_entry/summon/events/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) - feedback_add_details("wizard_spell_learned",log_name) + feedback_add_details("wizard_spell_learned", name) summonevents() times++ playsound(get_turf(user), 'sound/magic/CastSummon.ogg', 50, 1) @@ -607,6 +554,9 @@ /obj/item/weapon/spellbook/Initialize() ..() + prepare_spells() + +/obj/item/weapon/spellbook/proc/prepare_spells() var/entry_types = subtypesof(/datum/spellbook_entry) - /datum/spellbook_entry/item - /datum/spellbook_entry/summon for(var/T in entry_types) var/datum/spellbook_entry/E = new T @@ -779,28 +729,24 @@ desc = "This template spellbook was never meant for the eyes of man..." persistence_replacement = null -/obj/item/weapon/spellbook/oneuse/New() - ..() +/obj/item/weapon/spellbook/oneuse/prepare_spells() name += spellname -/obj/item/weapon/spellbook/oneuse/Initialize() //No need to init - return - /obj/item/weapon/spellbook/oneuse/attack_self(mob/user) var/obj/effect/proc_holder/spell/S = new spell for(var/obj/effect/proc_holder/spell/knownspell in user.mind.spell_list) if(knownspell.type == S.type) if(user.mind) if(user.mind.special_role == "apprentice" || user.mind.special_role == "Wizard") - user <<"You're already far more versed in this spell than this flimsy how-to book can provide." + to_chat(user,"You're already far more versed in this spell than this flimsy how-to book can provide.") else - user <<"You've already read this one." + to_chat(user,"You've already read this one.") return if(used) recoil(user) else user.mind.AddSpell(S) - user <<"You rapidly read through the arcane book. Suddenly you realize you understand [spellname]!" + to_chat(user,"You rapidly read through the arcane book. Suddenly you realize you understand [spellname]!") user.log_message("learned the spell [spellname] ([S]).", INDIVIDUAL_ATTACK_LOG) onlearned(user) @@ -833,7 +779,7 @@ /obj/item/weapon/spellbook/oneuse/smoke/recoil(mob/user) ..() - user <<"Your stomach rumbles..." + to_chat(user,"Your stomach rumbles...") if(user.nutrition) user.nutrition -= 200 if(user.nutrition <= 0) @@ -847,7 +793,7 @@ /obj/item/weapon/spellbook/oneuse/blind/recoil(mob/user) ..() - user <<"You go blind!" + to_chat(user,"You go blind!") user.blind_eyes(10) /obj/item/weapon/spellbook/oneuse/mindswap @@ -865,21 +811,21 @@ /obj/item/weapon/spellbook/oneuse/mindswap/recoil(mob/user) ..() - if(stored_swap in dead_mob_list) + if(stored_swap in GLOB.dead_mob_list) stored_swap = null if(!stored_swap) stored_swap = user - user <<"For a moment you feel like you don't even know who you are anymore." + to_chat(user,"For a moment you feel like you don't even know who you are anymore.") return if(stored_swap == user) - user <<"You stare at the book some more, but there doesn't seem to be anything else to learn..." + to_chat(user,"You stare at the book some more, but there doesn't seem to be anything else to learn...") return var/obj/effect/proc_holder/spell/targeted/mind_transfer/swapper = new swapper.cast(user, stored_swap, 1) - stored_swap <<"You're suddenly somewhere else... and someone else?!" - user <<"Suddenly you're staring at [src] again... where are you, who are you?!" + to_chat(stored_swap,"You're suddenly somewhere else... and someone else?!") + to_chat(user,"Suddenly you're staring at [src] again... where are you, who are you?!") stored_swap = null /obj/item/weapon/spellbook/oneuse/forcewall @@ -890,7 +836,7 @@ /obj/item/weapon/spellbook/oneuse/forcewall/recoil(mob/user) ..() - user <<"You suddenly feel very solid!" + to_chat(user,"You suddenly feel very solid!") user.Stun(2) user.petrify(30) @@ -902,7 +848,7 @@ /obj/item/weapon/spellbook/oneuse/knock/recoil(mob/user) ..() - user <<"You're knocked down!" + to_chat(user,"You're knocked down!") user.Weaken(20) /obj/item/weapon/spellbook/oneuse/barnyard @@ -913,7 +859,7 @@ /obj/item/weapon/spellbook/oneuse/barnyard/recoil(mob/living/carbon/user) if(ishuman(user)) - user <<"HOR-SIE HAS RISEN" + to_chat(user,"HOR-SIE HAS RISEN") var/obj/item/clothing/mask/horsehead/magichead = new /obj/item/clothing/mask/horsehead magichead.flags |= NODROP //curses! magichead.flags_inv &= ~HIDEFACE //so you can still see their face @@ -923,7 +869,7 @@ user.equip_to_slot_if_possible(magichead, slot_wear_mask, 1, 1) qdel(src) else - user <<"I say thee neigh" //It still lives here + to_chat(user,"I say thee neigh") //It still lives here /obj/item/weapon/spellbook/oneuse/charge spell = /obj/effect/proc_holder/spell/targeted/charge @@ -933,7 +879,7 @@ /obj/item/weapon/spellbook/oneuse/charge/recoil(mob/user) ..() - user <<"[src] suddenly feels very warm!" + to_chat(user,"[src] suddenly feels very warm!") empulse(src, 1, 1) /obj/item/weapon/spellbook/oneuse/summonitem @@ -944,10 +890,11 @@ /obj/item/weapon/spellbook/oneuse/summonitem/recoil(mob/user) ..() - user <<"[src] suddenly vanishes!" + to_chat(user,"[src] suddenly vanishes!") qdel(src) -/obj/item/weapon/spellbook/oneuse/random/New() +/obj/item/weapon/spellbook/oneuse/random/Initialize() + ..() var/static/banned_spells = list(/obj/item/weapon/spellbook/oneuse/mimery_blockade,/obj/item/weapon/spellbook/oneuse/mimery_guns) var/real_type = pick(subtypesof(/obj/item/weapon/spellbook/oneuse) - banned_spells) new real_type(loc) diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index bd89a96e28..34d148f03c 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -25,11 +25,11 @@ modePlayer += wizard wizard.assigned_role = "Wizard" wizard.special_role = "Wizard" - if(wizardstart.len == 0) + if(GLOB.wizardstart.len == 0) to_chat(wizard.current, "A starting location for you could not be found, please report this bug!") return 0 for(var/datum/mind/wiz in wizards) - wiz.current.loc = pick(wizardstart) + wiz.current.loc = pick(GLOB.wizardstart) return 1 @@ -97,8 +97,8 @@ /datum/game_mode/proc/name_wizard(mob/living/carbon/human/wizard_mob) //Allows the wizard to choose a custom name or go with a random one. Spawn 0 so it does not lag the round starting. - var/wizard_name_first = pick(wizard_first) - var/wizard_name_second = pick(wizard_second) + var/wizard_name_first = pick(GLOB.wizard_first) + var/wizard_name_second = pick(GLOB.wizard_second) var/randomname = "[wizard_name_first] [wizard_name_second]" spawn(0) var/newname = copytext(sanitize(input(wizard_mob, "You are the Space Wizard. Would you like to change your name to something else?", "Name change", randomname) as null|text),1,MAX_NAME_LEN) @@ -168,9 +168,9 @@ if(isliving(wizard.current) && wizard.current.stat!=DEAD) return ..() - if(SSevent.wizardmode) //If summon events was active, turn it off - SSevent.toggleWizardmode() - SSevent.resetFrequency() + if(SSevents.wizardmode) //If summon events was active, turn it off + SSevents.toggleWizardmode() + SSevents.resetFrequency() return ..() @@ -179,7 +179,7 @@ feedback_set_details("round_end_result","loss - wizard killed") to_chat(world, "The wizard[(wizards.len>1)?"s":""] has been killed by the crew! The Space Wizards Federation has been taught a lesson they will not soon forget!") - ticker.news_report = WIZARD_KILLED + SSticker.news_report = WIZARD_KILLED ..() return 1 @@ -247,15 +247,15 @@ //returns whether the mob is a wizard (or apprentice) /proc/iswizard(mob/living/M) - return istype(M) && M.mind && ticker && ticker.mode && ((M.mind in ticker.mode.wizards) || (M.mind in ticker.mode.apprentices)) + return istype(M) && M.mind && SSticker && SSticker.mode && ((M.mind in SSticker.mode.wizards) || (M.mind in SSticker.mode.apprentices)) /datum/game_mode/proc/update_wiz_icons_added(datum/mind/wiz_mind) - var/datum/atom_hud/antag/wizhud = huds[ANTAG_HUD_WIZ] + var/datum/atom_hud/antag/wizhud = GLOB.huds[ANTAG_HUD_WIZ] wizhud.join_hud(wiz_mind.current) set_antag_hud(wiz_mind.current, ((wiz_mind in wizards) ? "wizard" : "apprentice")) /datum/game_mode/proc/update_wiz_icons_removed(datum/mind/wiz_mind) - var/datum/atom_hud/antag/wizhud = huds[ANTAG_HUD_WIZ] + var/datum/atom_hud/antag/wizhud = GLOB.huds[ANTAG_HUD_WIZ] wizhud.leave_hud(wiz_mind.current) set_antag_hud(wiz_mind.current, null) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index f79cd7f666..5dc8ea3f20 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -107,10 +107,10 @@ return ..() /obj/machinery/sleeper/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) + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state) - if(controls_inside && state == notcontained_state) - state = default_state // If it has a set of controls on the inside, make it actually controllable by the mob in it. + if(controls_inside && state == GLOB.notcontained_state) + state = GLOB.default_state // If it has a set of controls on the inside, make it actually controllable by the mob in it. ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) @@ -124,7 +124,7 @@ data["chems"] = list() for(var/chem in available_chems) - var/datum/reagent/R = chemical_reagents_list[chem] + var/datum/reagent/R = GLOB.chemical_reagents_list[chem] data["chems"] += list(list("name" = R.name, "id" = R.id, "allowed" = chem_allowed(chem))) data["occupant"] = list() diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm index 95b972489e..95600d5cff 100644 --- a/code/game/machinery/ai_slipper.dm +++ b/code/game/machinery/ai_slipper.dm @@ -15,7 +15,7 @@ var/cooldown_time = 0 var/cooldown_timeleft = 0 var/cooldown_on = 0 - req_access = list(access_ai_upload) + req_access = list(GLOB.access_ai_upload) /obj/machinery/ai_slipper/power_change() if(stat & BROKEN) diff --git a/code/game/machinery/airlock_control.dm b/code/game/machinery/airlock_control.dm index e270aafea7..28c2f53c0c 100644 --- a/code/game/machinery/airlock_control.dm +++ b/code/game/machinery/airlock_control.dm @@ -58,7 +58,7 @@ signal.data["door_status"] = density?("closed"):("open") signal.data["lock_status"] = locked?("locked"):("unlocked") - radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK) + radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = GLOB.RADIO_AIRLOCK) /obj/machinery/door/airlock/open(surpress_send) @@ -75,7 +75,7 @@ SSradio.remove_object(src, frequency) if(new_frequency) frequency = new_frequency - radio_connection = SSradio.add_object(src, frequency, RADIO_AIRLOCK) + radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_AIRLOCK) /obj/machinery/door/airlock/Destroy() if(frequency && SSradio) @@ -116,7 +116,7 @@ signal.data["tag"] = master_tag signal.data["command"] = "cycle" - radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK) + radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = GLOB.RADIO_AIRLOCK) flick("airlock_sensor_cycle", src) /obj/machinery/airlock_sensor/process() @@ -133,14 +133,14 @@ signal.data["pressure"] = num2text(pressure) - radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK) + radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = GLOB.RADIO_AIRLOCK) update_icon() /obj/machinery/airlock_sensor/proc/set_frequency(new_frequency) SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = SSradio.add_object(src, frequency, RADIO_AIRLOCK) + radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_AIRLOCK) /obj/machinery/airlock_sensor/Initialize() ..() diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm index 851b47f3a2..cca752a7c1 100644 --- a/code/game/machinery/announcement_system.dm +++ b/code/game/machinery/announcement_system.dm @@ -1,4 +1,4 @@ -var/list/announcement_systems = list() +GLOBAL_LIST_EMPTY(announcement_systems) /obj/machinery/announcement_system density = 1 @@ -27,7 +27,7 @@ var/list/announcement_systems = list() /obj/machinery/announcement_system/New() ..() - announcement_systems += src + GLOB.announcement_systems += src radio = new /obj/item/device/radio/headset/ai(src) var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/announcement_system(null) @@ -62,7 +62,7 @@ var/list/announcement_systems = list() /obj/machinery/announcement_system/Destroy() QDEL_NULL(radio) - announcement_systems -= src //"OH GOD WHY ARE THERE 100,000 LISTED ANNOUNCEMENT SYSTEMS?!!" + GLOB.announcement_systems -= src //"OH GOD WHY ARE THERE 100,000 LISTED ANNOUNCEMENT SYSTEMS?!!" return ..() /obj/machinery/announcement_system/power_change() @@ -103,10 +103,10 @@ var/list/announcement_systems = list() message = "The arrivals shuttle has been damaged. Docking for repairs..." if(channels.len == 0) - radio.talk_into(src, message, null, list(SPAN_ROBOT)) + radio.talk_into(src, message, null, list(SPAN_ROBOT), get_default_language()) else for(var/channel in channels) - radio.talk_into(src, message, channel, list(SPAN_ROBOT)) + radio.talk_into(src, message, channel, list(SPAN_ROBOT), get_default_language()) //config stuff @@ -132,13 +132,13 @@ var/list/announcement_systems = list() if(href_list["ArrivalTopic"]) var/NewMessage = stripped_input(usr, "Enter in the arrivals announcement configuration.", "Arrivals Announcement Config", arrival) - if(!in_range(src, usr) && src.loc != usr && !isAI(usr)) + if(!in_range(src, usr) && src.loc != usr && (!isAI(usr) && !IsAdminGhost(usr))) return if(NewMessage) arrival = NewMessage else if(href_list["NewheadTopic"]) var/NewMessage = stripped_input(usr, "Enter in the departmental head announcement configuration.", "Head Departmental Announcement Config", newhead) - if(!in_range(src, usr) && src.loc != usr && !isAI(usr)) + if(!in_range(src, usr) && src.loc != usr && (!isAI(usr) && !IsAdminGhost(usr))) return if(NewMessage) newhead = NewMessage @@ -156,8 +156,8 @@ var/list/announcement_systems = list() /obj/machinery/announcement_system/attack_robot(mob/living/silicon/user) . = attack_ai(user) -/obj/machinery/announcement_system/attack_ai(mob/living/silicon/user) - if(!issilicon(user)) +/obj/machinery/announcement_system/attack_ai(mob/user) + if(!issilicon(user) && !IsAdminGhost(user)) return if(stat & BROKEN) to_chat(user, "[src]'s firmware appears to be malfunctioning!") diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 02903a1133..592a7b6967 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -44,8 +44,8 @@ ..() assembly = new(src) assembly.state = 4 - cameranet.cameras += src - cameranet.addCamera(src) + GLOB.cameranet.cameras += src + GLOB.cameranet.addCamera(src) add_to_proximity_list(src, 1) //1 was default of everything /* // Use this to look for cameras that have the same c_tag. for(var/obj/machinery/camera/C in cameranet.cameras) @@ -74,9 +74,9 @@ if(bug.current == src) bug.current = null bug = null - cameranet.removeCamera(src) //Will handle removal from the camera network and the chunks, so we don't need to worry about that - cameranet.cameras -= src - cameranet.removeCamera(src) + GLOB.cameranet.removeCamera(src) //Will handle removal from the camera network and the chunks, so we don't need to worry about that + GLOB.cameranet.cameras -= src + GLOB.cameranet.removeCamera(src) return ..() /obj/machinery/camera/emp_act(severity) @@ -87,7 +87,7 @@ update_icon() var/list/previous_network = network network = list() - cameranet.removeCamera(src) + GLOB.cameranet.removeCamera(src) stat |= EMPED set_light(0) emped = emped+1 //Increase the number of consecutive EMP's @@ -101,10 +101,10 @@ stat &= ~EMPED update_icon() if(can_use()) - cameranet.addCamera(src) + GLOB.cameranet.addCamera(src) emped = 0 //Resets the consecutive EMP count addtimer(CALLBACK(src, .proc/cancelCameraAlarm), 100) - for(var/mob/O in mob_list) + for(var/mob/O in GLOB.mob_list) if (O.client && O.client.eye == src) O.unset_machine() O.reset_perspective(null) @@ -124,7 +124,7 @@ /obj/machinery/camera/proc/setViewRange(num = 7) src.view_range = num - cameranet.updateVisibility(src, 0) + GLOB.cameranet.updateVisibility(src, 0) /obj/machinery/camera/proc/shock(mob/living/user) if(!istype(user)) @@ -206,7 +206,7 @@ info = P.notehtml to_chat(U, "You hold \the [itemname] up to the camera...") U.changeNext_move(CLICK_CD_MELEE) - for(var/mob/O in player_list) + for(var/mob/O in GLOB.player_list) if(isAI(O)) var/mob/living/silicon/ai/AI = O if(AI.control_disabled || (AI.stat == DEAD)) @@ -278,11 +278,11 @@ /obj/machinery/camera/proc/toggle_cam(mob/user, displaymessage = 1) status = !status if(can_use()) - cameranet.addCamera(src) + GLOB.cameranet.addCamera(src) else set_light(0) - cameranet.removeCamera(src) - cameranet.updateChunk(x, y, z) + GLOB.cameranet.removeCamera(src) + GLOB.cameranet.updateChunk(x, y, z) var/change_msg = "deactivates" if(status) change_msg = "reactivates" @@ -301,7 +301,7 @@ // now disconnect anyone using the camera //Apparently, this will disconnect anyone even if the camera was re-activated. //I guess that doesn't matter since they can't use it anyway? - for(var/mob/O in player_list) + for(var/mob/O in GLOB.player_list) if (O.client && O.client.eye == src) O.unset_machine() O.reset_perspective(null) @@ -309,12 +309,12 @@ /obj/machinery/camera/proc/triggerCameraAlarm() alarm_on = 1 - for(var/mob/living/silicon/S in mob_list) + for(var/mob/living/silicon/S in GLOB.mob_list) S.triggerAlarm("Camera", get_area(src), list(src), src) /obj/machinery/camera/proc/cancelCameraAlarm() alarm_on = 0 - for(var/mob/living/silicon/S in mob_list) + for(var/mob/living/silicon/S in GLOB.mob_list) S.cancelAlarm("Camera", get_area(src), src) /obj/machinery/camera/proc/can_use() @@ -386,7 +386,7 @@ return 0 /obj/machinery/camera/proc/Togglelight(on=0) - for(var/mob/living/silicon/ai/A in ai_list) + for(var/mob/living/silicon/ai/A in GLOB.ai_list) for(var/obj/machinery/camera/cam in A.lit_cameras) if(cam == src) return @@ -405,8 +405,8 @@ assembly.update_icon() /obj/machinery/camera/portable/process() //Updates whenever the camera is moved. - if(cameranet && get_turf(src) != prev_turf) - cameranet.updatePortableCamera(src) + if(GLOB.cameranet && get_turf(src) != prev_turf) + GLOB.cameranet.updatePortableCamera(src) prev_turf = get_turf(src) /obj/machinery/camera/get_remote_view_fullscreens(mob/user) diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm index a28e5cbff0..d933fc4ae1 100644 --- a/code/game/machinery/camera/motion.dm +++ b/code/game/machinery/camera/motion.dm @@ -50,7 +50,7 @@ /obj/machinery/camera/proc/cancelAlarm() if (detectTime == -1) - for (var/mob/living/silicon/aiPlayer in player_list) + for (var/mob/living/silicon/aiPlayer in GLOB.player_list) if (status) aiPlayer.cancelAlarm("Motion", get_area(src), src) detectTime = 0 @@ -58,7 +58,7 @@ /obj/machinery/camera/proc/triggerAlarm() if (!detectTime) return 0 - for (var/mob/living/silicon/aiPlayer in player_list) + for (var/mob/living/silicon/aiPlayer in GLOB.player_list) if (status) aiPlayer.triggerAlarm("Motion", get_area(src), list(src), src) detectTime = -1 diff --git a/code/game/machinery/camera/presets.dm b/code/game/machinery/camera/presets.dm index 5cd1760728..bd06d4e8d3 100644 --- a/code/game/machinery/camera/presets.dm +++ b/code/game/machinery/camera/presets.dm @@ -4,7 +4,7 @@ /obj/machinery/camera/emp_proof start_active = 1 -/obj/machinery/camera/emp_proof/New() +/obj/machinery/camera/emp_proof/Initialize() ..() upgradeEmpProof() @@ -14,7 +14,7 @@ start_active = 1 icon_state = "xraycam" // Thanks to Krutchen for the icons. -/obj/machinery/camera/xray/New() +/obj/machinery/camera/xray/Initialize() ..() upgradeXRay() @@ -23,7 +23,7 @@ start_active = 1 name = "motion-sensitive security camera" -/obj/machinery/camera/motion/New() +/obj/machinery/camera/motion/Initialize() ..() upgradeMotion() @@ -31,7 +31,7 @@ /obj/machinery/camera/all start_active = 1 -/obj/machinery/camera/all/New() +/obj/machinery/camera/all/Initialize() ..() upgradeEmpProof() upgradeXRay() @@ -43,13 +43,17 @@ var/number = 0 //camera number in area //This camera type automatically sets it's name to whatever the area that it's in is called. -/obj/machinery/camera/autoname/New() - ..() - spawn(10) +/obj/machinery/camera/autoname/Initialize(mapload) + if(mapload) + ..() + return TRUE + else + if(!initialized) + ..() number = 1 var/area/A = get_area(src) if(A) - for(var/obj/machinery/camera/autoname/C in machines) + for(var/obj/machinery/camera/autoname/C in GLOB.machines) if(C == src) continue var/area/CA = get_area(C) if(CA.type == A.type) @@ -57,7 +61,6 @@ number = max(number, C.number+1) c_tag = "[A.name] #[number]" - // CHECKS /obj/machinery/camera/proc/isEmpProof() @@ -79,7 +82,7 @@ assembly.upgrades.Add(new /obj/item/device/analyzer(assembly)) upgrades |= CAMERA_UPGRADE_XRAY -// If you are upgrading Motion, and it isn't in the camera's New(), add it to the machines list. +// If you are upgrading Motion, and it isn't in the camera's Initialize(), add it to the machines list. /obj/machinery/camera/proc/upgradeMotion() assembly.upgrades.Add(new /obj/item/device/assembly/prox_sensor(assembly)) upgrades |= CAMERA_UPGRADE_MOTION diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm index a007aef101..23d3598951 100644 --- a/code/game/machinery/camera/tracking.dm +++ b/code/game/machinery/camera/tracking.dm @@ -6,7 +6,7 @@ return var/list/L = list() - for (var/obj/machinery/camera/C in cameranet.cameras) + for (var/obj/machinery/camera/C in GLOB.cameranet.cameras) L.Add(C) camera_sort(L) @@ -48,7 +48,7 @@ if(usr.stat == 2) return list() - for(var/mob/living/M in mob_list) + for(var/mob/living/M in GLOB.mob_list) if(!M.can_track(usr)) continue @@ -138,9 +138,9 @@ return 0 if(iscyborg(M)) var/mob/living/silicon/robot/R = M - if(!(R.camera && R.camera.can_use()) && !cameranet.checkCameraVis(M)) + if(!(R.camera && R.camera.can_use()) && !GLOB.cameranet.checkCameraVis(M)) return 0 - else if(!cameranet.checkCameraVis(M)) + else if(!GLOB.cameranet.checkCameraVis(M)) return 0 return 1 diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index d63e6dc4e0..433470bf1b 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -6,7 +6,7 @@ #define CLONE_INITIAL_DAMAGE 190 //Clones in clonepods start with 190 cloneloss damage and 190 brainloss damage, thats just logical #define MINIMUM_HEAL_LEVEL 40 -#define SPEAK(message) radio.talk_into(src, message, radio_channel, get_spans()) +#define SPEAK(message) radio.talk_into(src, message, radio_channel, get_spans(), get_default_language()) /obj/machinery/clonepod anchored = 1 @@ -15,7 +15,7 @@ density = 1 icon = 'icons/obj/cloning.dmi' icon_state = "pod_0" - req_access = list(access_cloning) //For premature unlocking. + req_access = list(GLOB.access_cloning) //For premature unlocking. verb_say = "states" var/heal_level //The clone is released once its health reaches this level. var/obj/machinery/computer/cloning/connected = null //So we remember the connected clone machine. @@ -166,7 +166,7 @@ H.hardset_dna(ui, se, H.real_name, null, mrace, features) if(efficiency > 2) - var/list/unclean_mutations = (not_good_mutations|bad_mutations) + var/list/unclean_mutations = (GLOB.not_good_mutations|GLOB.bad_mutations) H.dna.remove_mutation_group(unclean_mutations) if(efficiency > 5 && prob(20)) H.randmutvg() diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index ebb9ea64f6..3c26f5d71a 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -10,10 +10,11 @@ light_color = LIGHT_COLOR_BLUE /obj/machinery/computer/operating/Initialize() + ..() find_table() /obj/machinery/computer/operating/proc/find_table() - for(var/dir in cardinal) + for(var/dir in GLOB.cardinal) table = locate(/obj/structure/table/optable, get_step(src, dir)) if(table) table.computer = src diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index 6eac3ca24f..441e68bcf7 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -1,7 +1,7 @@ /obj/machinery/computer/aifixer name = "\improper AI system integrity restorer" desc = "Used with intelliCards containing nonfunctioning AIs to restore them to working order." - req_access = list(access_captain, access_robotics, access_heads) + req_access = list(GLOB.access_captain, GLOB.access_robotics, GLOB.access_heads) var/mob/living/silicon/ai/occupier = null var/active = 0 circuit = /obj/item/weapon/circuitboard/computer/aifixer diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm index 9ada010732..39bd31bdb7 100644 --- a/code/game/machinery/computer/apc_control.dm +++ b/code/game/machinery/computer/apc_control.dm @@ -3,7 +3,7 @@ desc = "Used to remotely control the flow of power to different parts of the station." icon_screen = "solar" icon_keyboard = "power_key" - req_access = list(access_engine) + req_access = list(GLOB.access_engine) circuit = /obj/item/weapon/circuitboard/computer/apc_control light_color = LIGHT_COLOR_YELLOW var/list/apcs //APCs the computer has access to @@ -22,7 +22,7 @@ /obj/machinery/computer/apc_control/process() apcs = list() //Clear the list every tick - for(var/V in apcs_list) + for(var/V in GLOB.apcs_list) var/obj/machinery/power/apc/APC = V if(check_apc(APC)) apcs[APC.name] = APC @@ -37,9 +37,11 @@ active_apc.update_icon() active_apc = null -/obj/machinery/computer/apc_control/attack_ai(mob/living/AI) //You already have APC access, cheater! - AI << "[src] does not support AI control." - return +/obj/machinery/computer/apc_control/attack_ai(mob/user) + if(!IsAdminGhost(user)) + to_chat(user,"[src] does not support AI control.") //You already have APC access, cheater! + return + ..(user) /obj/machinery/computer/apc_control/proc/check_apc(obj/machinery/power/apc/APC) return APC.z == z && !APC.malfhack && !APC.aidisabled && !APC.emagged && !APC.stat && !istype(APC.area, /area/ai_monitored) && !APC.area.outdoors @@ -120,7 +122,7 @@ LAZYADD(logs, "-=- Logging restored to full functionality at this point -=-") if(href_list["access_apc"]) playsound(src, "terminal_type", 50, 0) - var/obj/machinery/power/apc/APC = locate(href_list["access_apc"]) in apcs_list + var/obj/machinery/power/apc/APC = locate(href_list["access_apc"]) in GLOB.apcs_list if(!APC || APC.aidisabled || APC.panel_open || QDELETED(APC)) to_chat(usr, "\icon[I] APC does not return interface request. Remote access may be disabled.") return @@ -134,7 +136,7 @@ active_apc = null to_chat(usr, "\icon[I] Connected to APC in [get_area(APC)]. Interface request sent.") log_activity("remotely accessed APC in [get_area(APC)]") - APC.interact(usr, not_incapacitated_state) + APC.interact(usr, GLOB.not_incapacitated_state) playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) message_admins("[key_name_admin(usr)] remotely accessed [APC] from [src] at [get_area(src)].") log_game("[key_name_admin(usr)] remotely accessed [APC] from [src] at [get_area(src)].") diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 3019528f8b..e401f7348d 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -34,7 +34,6 @@ /obj/item/toy/redbutton = 2, /obj/item/toy/talking/owl = 2, /obj/item/toy/talking/griffin = 2, - /obj/item/toy/talking/skeleton = 2, /obj/item/weapon/coin/antagtoken = 2, /obj/item/stack/tile/fakespace/loaded = 2, /obj/item/stack/tile/fakepit/loaded = 2, @@ -48,6 +47,9 @@ light_color = LIGHT_COLOR_GREEN +/obj/machinery/computer/arcade/proc/Reset() + return + /obj/machinery/computer/arcade/New() ..() // If it's a generic arcade machine, pick a random arcade @@ -74,8 +76,9 @@ "[src] dispenses a [prize]!", "You hear a chime and a clunk.") - prize.loc = src.loc + prize.loc = loc #undef PULSE_MEDAL + /obj/machinery/computer/arcade/emp_act(severity) ..(severity) @@ -91,8 +94,8 @@ num_of_prizes = rand(0,2) for(var/i = num_of_prizes; i > 0; i--) empprize = pickweight(prizes) - new empprize(src.loc) - explosion(src.loc, -1, 0, 1+num_of_prizes, flame_range = 1+num_of_prizes) + new empprize(loc) + explosion(loc, -1, 0, 1+num_of_prizes, flame_range = 1+num_of_prizes) // ** BATTLE ** // @@ -109,12 +112,11 @@ var/player_mp = 10 var/enemy_hp = 45 //Enemy health/attack points var/enemy_mp = 20 - var/gameover = 0 - var/blocked = 0 //Player cannot attack/heal while set + var/gameover = FALSE + var/blocked = FALSE //Player cannot attack/heal while set var/turtle = 0 -/obj/machinery/computer/arcade/battle/New() - ..() +/obj/machinery/computer/arcade/battle/Reset() var/name_action var/name_part1 var/name_part2 @@ -124,20 +126,20 @@ name_part1 = pick("the Automatic ", "Farmer ", "Lord ", "Professor ", "the Cuban ", "the Evil ", "the Dread King ", "the Space ", "Lord ", "the Great ", "Duke ", "General ") name_part2 = pick("Melonoid", "Murdertron", "Sorcerer", "Ruin", "Jeff", "Ectoplasm", "Crushulon", "Uhangoid", "Vhakoid", "Peteoid", "slime", "Griefer", "ERPer", "Lizard Man", "Unicorn", "Bloopers") - src.enemy_name = replacetext((name_part1 + name_part2), "the ", "") - src.name = (name_action + name_part1 + name_part2) + enemy_name = replacetext((name_part1 + name_part2), "the ", "") + name = (name_action + name_part1 + name_part2) /obj/machinery/computer/arcade/battle/attack_hand(mob/user) if(..()) return user.set_machine(src) var/dat = "Close" - dat += "

[src.enemy_name]

" + dat += "

[enemy_name]

" - dat += "

[src.temp]

" - dat += "
Health: [src.player_hp] | Magic: [src.player_mp] | Enemy Health: [src.enemy_hp]
" + dat += "

[temp]

" + dat += "
Health: [player_hp] | Magic: [player_mp] | Enemy Health: [enemy_hp]
" - if (src.gameover) + if (gameover) dat += "
New Game" else dat += "
Attack | " @@ -147,7 +149,7 @@ dat += "
" var/datum/browser/popup = new(user, "arcade", "Space Villian 2000") popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) + popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) popup.open() return @@ -155,48 +157,48 @@ if(..()) return - if (!src.blocked && !src.gameover) + if (!blocked && !gameover) if (href_list["attack"]) - src.blocked = 1 + blocked = TRUE var/attackamt = rand(2,6) - src.temp = "You attack for [attackamt] damage!" - playsound(src.loc, 'sound/arcade/Hit.ogg', 50, 1, extrarange = -3, falloff = 10) - src.updateUsrDialog() + temp = "You attack for [attackamt] damage!" + playsound(loc, 'sound/arcade/Hit.ogg', 50, 1, extrarange = -3, falloff = 10) + updateUsrDialog() if(turtle > 0) turtle-- sleep(10) - src.enemy_hp -= attackamt - src.arcade_action() + enemy_hp -= attackamt + arcade_action() else if (href_list["heal"]) - src.blocked = 1 + blocked = TRUE var/pointamt = rand(1,3) var/healamt = rand(6,8) - src.temp = "You use [pointamt] magic to heal for [healamt] damage!" - playsound(src.loc, 'sound/arcade/Heal.ogg', 50, 1, extrarange = -3, falloff = 10) - src.updateUsrDialog() + temp = "You use [pointamt] magic to heal for [healamt] damage!" + playsound(loc, 'sound/arcade/Heal.ogg', 50, 1, extrarange = -3, falloff = 10) + updateUsrDialog() turtle++ sleep(10) - src.player_mp -= pointamt - src.player_hp += healamt - src.blocked = 1 - src.updateUsrDialog() - src.arcade_action() + player_mp -= pointamt + player_hp += healamt + blocked = TRUE + updateUsrDialog() + arcade_action() else if (href_list["charge"]) - src.blocked = 1 + blocked = 1 var/chargeamt = rand(4,7) - src.temp = "You regain [chargeamt] points" - playsound(src.loc, 'sound/arcade/Mana.ogg', 50, 1, extrarange = -3, falloff = 10) - src.player_mp += chargeamt + temp = "You regain [chargeamt] points" + playsound(loc, 'sound/arcade/Mana.ogg', 50, 1, extrarange = -3, falloff = 10) + player_mp += chargeamt if(turtle > 0) turtle-- - src.updateUsrDialog() + updateUsrDialog() sleep(10) - src.arcade_action() + arcade_action() if (href_list["close"]) usr.unset_machine() @@ -208,31 +210,31 @@ player_mp = 10 enemy_hp = 45 enemy_mp = 20 - gameover = 0 + gameover = FALSE turtle = 0 if(emagged) - src.New() + Reset() emagged = 0 - src.add_fingerprint(usr) - src.updateUsrDialog() + add_fingerprint(usr) + updateUsrDialog() return /obj/machinery/computer/arcade/battle/proc/arcade_action() - if ((src.enemy_mp <= 0) || (src.enemy_hp <= 0)) + if ((enemy_mp <= 0) || (enemy_hp <= 0)) if(!gameover) - src.gameover = 1 - src.temp = "[src.enemy_name] has fallen! Rejoice!" - playsound(src.loc, 'sound/arcade/Win.ogg', 50, 1, extrarange = -3, falloff = 10) + gameover = TRUE + temp = "[enemy_name] has fallen! Rejoice!" + playsound(loc, 'sound/arcade/Win.ogg', 50, 1, extrarange = -3, falloff = 10) if(emagged) feedback_inc("arcade_win_emagged") - new /obj/effect/spawner/newbomb/timer/syndicate(src.loc) - new /obj/item/clothing/head/collectable/petehat(src.loc) + new /obj/effect/spawner/newbomb/timer/syndicate(loc) + new /obj/item/clothing/head/collectable/petehat(loc) message_admins("[key_name_admin(usr)] has outbombed Cuban Pete and been awarded a bomb.") log_game("[key_name(usr)] has outbombed Cuban Pete and been awarded a bomb.") - src.New() + Reset() emagged = 0 else feedback_inc("arcade_win_normal") @@ -240,51 +242,51 @@ else if (emagged && (turtle >= 4)) var/boomamt = rand(5,10) - src.temp = "[src.enemy_name] throws a bomb, exploding you for [boomamt] damage!" - playsound(src.loc, 'sound/arcade/Boom.ogg', 50, 1, extrarange = -3, falloff = 10) - src.player_hp -= boomamt + temp = "[enemy_name] throws a bomb, exploding you for [boomamt] damage!" + playsound(loc, 'sound/arcade/Boom.ogg', 50, 1, extrarange = -3, falloff = 10) + player_hp -= boomamt - else if ((src.enemy_mp <= 5) && (prob(70))) + else if ((enemy_mp <= 5) && (prob(70))) var/stealamt = rand(2,3) - src.temp = "[src.enemy_name] steals [stealamt] of your power!" - playsound(src.loc, 'sound/arcade/Steal.ogg', 50, 1, extrarange = -3, falloff = 10) - src.player_mp -= stealamt - src.updateUsrDialog() + temp = "[enemy_name] steals [stealamt] of your power!" + playsound(loc, 'sound/arcade/Steal.ogg', 50, 1, extrarange = -3, falloff = 10) + player_mp -= stealamt + updateUsrDialog() - if (src.player_mp <= 0) - src.gameover = 1 + if (player_mp <= 0) + gameover = TRUE sleep(10) - src.temp = "You have been drained! GAME OVER" - playsound(src.loc, 'sound/arcade/Lose.ogg', 50, 1, extrarange = -3, falloff = 10) + temp = "You have been drained! GAME OVER" + playsound(loc, 'sound/arcade/Lose.ogg', 50, 1, extrarange = -3, falloff = 10) if(emagged) feedback_inc("arcade_loss_mana_emagged") usr.gib() else feedback_inc("arcade_loss_mana_normal") - else if ((src.enemy_hp <= 10) && (src.enemy_mp > 4)) - src.temp = "[src.enemy_name] heals for 4 health!" - playsound(src.loc, 'sound/arcade/Heal.ogg', 50, 1, extrarange = -3, falloff = 10) - src.enemy_hp += 4 - src.enemy_mp -= 4 + else if ((enemy_hp <= 10) && (enemy_mp > 4)) + temp = "[enemy_name] heals for 4 health!" + playsound(loc, 'sound/arcade/Heal.ogg', 50, 1, extrarange = -3, falloff = 10) + enemy_hp += 4 + enemy_mp -= 4 else var/attackamt = rand(3,6) - src.temp = "[src.enemy_name] attacks for [attackamt] damage!" - playsound(src.loc, 'sound/arcade/Hit.ogg', 50, 1, extrarange = -3, falloff = 10) - src.player_hp -= attackamt + temp = "[enemy_name] attacks for [attackamt] damage!" + playsound(loc, 'sound/arcade/Hit.ogg', 50, 1, extrarange = -3, falloff = 10) + player_hp -= attackamt - if ((src.player_mp <= 0) || (src.player_hp <= 0)) - src.gameover = 1 - src.temp = "You have been crushed! GAME OVER" - playsound(src.loc, 'sound/arcade/Lose.ogg', 50, 1, extrarange = -3, falloff = 10) + if ((player_mp <= 0) || (player_hp <= 0)) + gameover = TRUE + temp = "You have been crushed! GAME OVER" + playsound(loc, 'sound/arcade/Lose.ogg', 50, 1, extrarange = -3, falloff = 10) if(emagged) feedback_inc("arcade_loss_hp_emagged") usr.gib() else feedback_inc("arcade_loss_hp_normal") - src.blocked = 0 + blocked = FALSE return @@ -295,16 +297,16 @@ player_mp = 10 enemy_hp = 45 enemy_mp = 20 - gameover = 0 - blocked = 0 + gameover = FALSE + blocked = FALSE - emagged = 1 + emagged = TRUE enemy_name = "Cuban Pete" name = "Outbomb Cuban Pete" - src.updateUsrDialog() + updateUsrDialog() @@ -363,8 +365,7 @@ var/gameStatus = ORION_STATUS_START var/canContinueEvent = 0 -/obj/machinery/computer/arcade/orion_trail/New() - ..() +/obj/machinery/computer/arcade/orion_trail/Reset() // Sets up the main trail stops = list("Pluto","Asteroid Belt","Proxima Centauri","Dead Space","Rigel Prime","Tau Ceti Beta","Black Hole","Space Outpost Beta-9","Orion Prime") stopblurbs = list( @@ -462,7 +463,7 @@ dat += "

Close

" var/datum/browser/popup = new(user, "arcade", "The Orion Trail",400,700) popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) + popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) popup.open() return @@ -522,12 +523,12 @@ M.Weaken(3) say("A sudden gust of powerful wind slams [M] into the floor!") M.take_bodypart_damage(25) - playsound(src.loc, 'sound/weapons/Genhit.ogg', 100, 1) + playsound(loc, 'sound/weapons/Genhit.ogg', 100, 1) else to_chat(M, "A violent gale blows past you, and you barely manage to stay standing!") if(ORION_TRAIL_COLLISION) //by far the most damaging event if(prob(90)) - playsound(src.loc, 'sound/effects/bang.ogg', 100, 1) + playsound(loc, 'sound/effects/bang.ogg', 100, 1) var/turf/open/floor/F for(F in orange(1, src)) F.ChangeTurf(F.baseturf) @@ -535,16 +536,16 @@ if(hull) sleep(10) say("A new floor suddenly appears around [src]. What the hell?") - playsound(src.loc, 'sound/weapons/Genhit.ogg', 100, 1) + playsound(loc, 'sound/weapons/Genhit.ogg', 100, 1) var/turf/open/space/T for(T in orange(1, src)) T.ChangeTurf(/turf/open/floor/plating/) else say("Something slams into the floor around [src] - luckily, it didn't get through!") - playsound(src.loc, 'sound/effects/bang.ogg', 50, 1) + playsound(loc, 'sound/effects/bang.ogg', 50, 1) if(ORION_TRAIL_MALFUNCTION) - playsound(src.loc, 'sound/effects/EMPulse.ogg', 50, 1) - src.visible_message("[src] malfunctions, randomizing in-game stats!") + playsound(loc, 'sound/effects/EMPulse.ogg', 50, 1) + visible_message("[src] malfunctions, randomizing in-game stats!") var/oldfood = food var/oldfuel = fuel food = rand(10,80) / rand(1,2) @@ -552,12 +553,12 @@ if(electronics) sleep(10) if(oldfuel > fuel && oldfood > food) - src.audible_message("[src] lets out a somehow reassuring chime.") + audible_message("[src] lets out a somehow reassuring chime.") else if(oldfuel < fuel || oldfood < food) - src.audible_message("[src] lets out a somehow ominous chime.") + audible_message("[src] lets out a somehow ominous chime.") food = oldfood fuel = oldfuel - playsound(src.loc, 'sound/machines/chime.ogg', 50, 1) + playsound(loc, 'sound/machines/chime.ogg', 50, 1) else if(href_list["newgame"]) //Reset everything if(gameStatus == ORION_STATUS_START) @@ -609,7 +610,7 @@ event = ORION_TRAIL_BLACKHOLE event() if(emagged) //has to be here because otherwise it doesn't work - playsound(src.loc, 'sound/effects/supermatter.ogg', 100, 1) + playsound(loc, 'sound/effects/supermatter.ogg', 100, 1) say("A miniature black hole suddenly appears in front of [src], devouring [usr] alive!") usr.Stun(10) //you can't run :^) var/S = new /obj/singularity/academy(usr.loc) @@ -743,8 +744,8 @@ last_spaceport_action = "Traded Food for Fuel" event() - src.add_fingerprint(usr) - src.updateUsrDialog() + add_fingerprint(usr) + updateUsrDialog() busy = 0 return @@ -990,9 +991,9 @@ newcrew = specific else if(prob(50)) - newcrew = pick(first_names_male) + newcrew = pick(GLOB.first_names_male) else - newcrew = pick(first_names_female) + newcrew = pick(GLOB.first_names_female) if(newcrew) settlers += newcrew alive++ @@ -1022,7 +1023,7 @@ gameStatus = ORION_STATUS_START say("Congratulations, you made it to Orion!") if(emagged) - new /obj/item/weapon/orion_ship(src.loc) + new /obj/item/weapon/orion_ship(loc) message_admins("[key_name_admin(usr)] made it to Orion on an emagged machine and got an explosive toy ship.") log_game("[key_name(usr)] made it to Orion on an emagged machine and got an explosive toy ship.") else @@ -1059,7 +1060,7 @@ back = /obj/item/weapon/storage/backpack has_id = 1 id_job = "Officer" - id_access_list = list(access_syndicate) + id_access_list = list(GLOB.access_syndicate) /obj/item/weapon/orion_ship name = "model settler ship" @@ -1087,18 +1088,18 @@ to_chat(user, "You flip the switch on the underside of [src].") active = 1 - src.visible_message("[src] softly beeps and whirs to life!") - playsound(src.loc, 'sound/machines/defib_SaftyOn.ogg', 25, 1) + visible_message("[src] softly beeps and whirs to life!") + playsound(loc, 'sound/machines/defib_SaftyOn.ogg', 25, 1) say("This is ship ID #[rand(1,1000)] to Orion Port Authority. We're coming in for landing, over.") sleep(20) - src.visible_message("[src] begins to vibrate...") + visible_message("[src] begins to vibrate...") say("Uh, Port? Having some issues with our reactor, could you check it out? Over.") sleep(30) say("Oh, God! Code Eight! CODE EIGHT! IT'S GONNA BL-") - playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 25, 1) + playsound(loc, 'sound/machines/buzz-sigh.ogg', 25, 1) sleep(3.6) - src.visible_message("[src] explodes!") - explosion(src.loc, 2,4,8, flame_range = 16) + visible_message("[src] explodes!") + explosion(loc, 2,4,8, flame_range = 16) qdel(src) diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm index bb73d75467..15959253ee 100644 --- a/code/game/machinery/computer/atmos_alert.dm +++ b/code/game/machinery/computer/atmos_alert.dm @@ -21,7 +21,7 @@ return ..() /obj/machinery/computer/atmos_alert/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/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "atmos_alert", name, 350, 300, master_ui, state) @@ -58,7 +58,7 @@ /obj/machinery/computer/atmos_alert/proc/set_frequency(new_frequency) SSradio.remove_object(src, receive_frequency) receive_frequency = new_frequency - radio_connection = SSradio.add_object(src, receive_frequency, RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, receive_frequency, GLOB.RADIO_ATMOSIA) /obj/machinery/computer/atmos_alert/receive_signal(datum/signal/signal) if(!signal || signal.encryption) return diff --git a/code/game/machinery/computer/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm index bccb99dfdd..0955d1e76b 100644 --- a/code/game/machinery/computer/atmos_control.dm +++ b/code/game/machinery/computer/atmos_control.dm @@ -37,13 +37,13 @@ var/gas_name = air_sample.gases[gas_id][GAS_META][META_GAS_NAME] signal.data["gases"][gas_name] = air_sample.gases[gas_id][MOLES] / total_moles * 100 - radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) + radio_connection.post_signal(src, signal, filter = GLOB.RADIO_ATMOSIA) /obj/machinery/air_sensor/proc/set_frequency(new_frequency) SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_ATMOSIA) /obj/machinery/air_sensor/Initialize() ..() @@ -94,7 +94,7 @@ return ..() /obj/machinery/computer/atmos_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) + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "atmos_control", name, 400, 925, master_ui, state) @@ -131,7 +131,7 @@ /obj/machinery/computer/atmos_control/proc/set_frequency(new_frequency) SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_ATMOSIA) ///////////////////////////////////////////////////////////// // LARGE TANK CONTROL @@ -177,7 +177,7 @@ U.broadcast_status() /obj/machinery/computer/atmos_control/tank/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/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "atmos_control", name, 500, 305, master_ui, state) @@ -211,12 +211,12 @@ signal.data += list("tag" = output_tag, "power_toggle" = TRUE) . = TRUE if("pressure") - var/target = input("New target pressure:", name, output_info["internal"]) as num|null + var/target = input("New target pressure:", name, output_info ? output_info["internal"] : 0) as num|null if(!isnull(target) && !..()) target = Clamp(target, 0, 50 * ONE_ATMOSPHERE) signal.data += list("tag" = output_tag, "set_internal_pressure" = target) . = TRUE - radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) + radio_connection.post_signal(src, signal, filter = GLOB.RADIO_ATMOSIA) /obj/machinery/computer/atmos_control/tank/receive_signal(datum/signal/signal) if(!signal || signal.encryption) diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 34c859280f..d4a0b7efa4 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -123,7 +123,7 @@ //returns the list of cameras accessible from this computer /obj/machinery/computer/security/proc/get_available_cameras() var/list/L = list() - for (var/obj/machinery/camera/C in cameranet.cameras) + for (var/obj/machinery/camera/C in GLOB.cameranet.cameras) if((z > ZLEVEL_SPACEMAX || C.z > ZLEVEL_SPACEMAX) && (C.z != z))//if on away mission, can only recieve feed from same z_level cameras continue L.Add(C) diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm index e3bf9573c9..f0adeac226 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -3,6 +3,7 @@ desc = "Used to access the various cameras on the station." icon_screen = "cameras" icon_keyboard = "security_key" + var/z_lock = null // Lock use to this zlevel var/mob/camera/aiEye/remote/eyeobj var/mob/living/current_user = null var/list/networks = list("SS13") @@ -49,14 +50,14 @@ if(!eyeobj.eye_initialized) var/camera_location - for(var/obj/machinery/camera/C in cameranet.cameras) - if(!C.can_use()) + for(var/obj/machinery/camera/C in GLOB.cameranet.cameras) + if(!C.can_use() || z_lock && C.z != z_lock) continue - if(C.network&networks) + if(C.network & networks) camera_location = get_turf(C) break if(camera_location) - eyeobj.eye_initialized = 1 + eyeobj.eye_initialized = TRUE give_eye_control(L) eyeobj.setLoc(camera_location) else @@ -79,6 +80,7 @@ obj/machinery/computer/camera_advanced/attack_ai(mob/user) eyeobj.name = "Camera Eye ([user.name])" user.remote_control = eyeobj user.reset_perspective(eyeobj) + eyeobj.setLoc(eyeobj.loc) /mob/camera/aiEye/remote name = "Inactive Camera Eye" @@ -107,7 +109,7 @@ obj/machinery/computer/camera_advanced/attack_ai(mob/user) return T = get_turf(T) loc = T - cameranet.visibility(src) + GLOB.cameranet.visibility(src) if(visible_icon) if(eye_user.client) eye_user.client.images -= user_image @@ -124,7 +126,7 @@ obj/machinery/computer/camera_advanced/attack_ai(mob/user) for(var/i = 0; i < max(sprint, initial); i += 20) var/turf/step = get_turf(get_step(src, direct)) if(step) - src.setLoc(step) + setLoc(step) cooldown = world.timeofday + 5 if(acceleration) @@ -152,7 +154,7 @@ obj/machinery/computer/camera_advanced/attack_ai(mob/user) C.client.images -= chunk.obscured C.remote_control = null C.unset_machine() - src.Remove(C) + Remove(C) playsound(remote_eye.origin, 'sound/machines/terminal_off.ogg', 25, 0) /datum/action/innate/camera_jump @@ -168,7 +170,9 @@ obj/machinery/computer/camera_advanced/attack_ai(mob/user) var/list/L = list() - for (var/obj/machinery/camera/cam in cameranet.cameras) + for (var/obj/machinery/camera/cam in GLOB.cameranet.cameras) + if(origin.z_lock && cam.z != origin.z_lock) + continue L.Add(cam) camera_sort(L) @@ -176,10 +180,9 @@ obj/machinery/computer/camera_advanced/attack_ai(mob/user) var/list/T = list() for (var/obj/machinery/camera/netcam in L) - var/list/tempnetwork = netcam.network&origin.networks + var/list/tempnetwork = netcam.network & origin.networks if (tempnetwork.len) - T[text("[][]", netcam.c_tag, (netcam.can_use() ? null : " (Deactivated)"))] = netcam - + T["[netcam.c_tag][netcam.can_use() ? null : " (Deactivated)"]"] = netcam playsound(origin, 'sound/machines/terminal_prompt.ogg', 25, 0) var/camera = input("Choose which camera you want to view", "Cameras") as null|anything in T diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index 90d6fecd03..907d7b5a6d 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -2,14 +2,14 @@ //Keeps track of the time for the ID console. Having it as a global variable prevents people from dismantling/reassembling it to //increase the slots of many jobs. -var/time_last_changed_position = 0 +GLOBAL_VAR_INIT(time_last_changed_position, 0) /obj/machinery/computer/card name = "identification console" desc = "You can use this to manage jobs and ID access." icon_screen = "id" icon_keyboard = "id_key" - req_one_access = list(access_heads, access_change_ids) + req_one_access = list(GLOB.access_heads, GLOB.access_change_ids) circuit = /obj/item/weapon/circuitboard/computer/card var/obj/item/weapon/card/id/scan = null var/obj/item/weapon/card/id/modify = null @@ -107,8 +107,8 @@ var/time_last_changed_position = 0 /obj/machinery/computer/card/proc/can_open_job(datum/job/job) if(job) if(!job_blacklisted(job.title)) - if((job.total_positions <= player_list.len * (max_relative_positions / 100))) - var/delta = (world.time / 10) - time_last_changed_position + if((job.total_positions <= GLOB.player_list.len * (max_relative_positions / 100))) + var/delta = (world.time / 10) - GLOB.time_last_changed_position if((change_position_cooldown < delta) || (opened_positions[job.title] < 0)) return 1 return -2 @@ -120,7 +120,7 @@ var/time_last_changed_position = 0 if(job) if(!job_blacklisted(job.title)) if(job.total_positions > job.current_positions) - var/delta = (world.time / 10) - time_last_changed_position + var/delta = (world.time / 10) - GLOB.time_last_changed_position if((change_position_cooldown < delta) || (opened_positions[job.title] > 0)) return 1 return -2 @@ -133,11 +133,11 @@ var/time_last_changed_position = 0 user.set_machine(src) var/dat - if(!ticker) + if(!SSticker) return if (mode == 1) // accessing crew manifest var/crew = "" - for(var/datum/data/record/t in sortRecord(data_core.general)) + for(var/datum/data/record/t in sortRecord(GLOB.data_core.general)) crew += t.fields["name"] + " - " + t.fields["rank"] + "
" dat = "Crew Manifest:
Please use security record computer to modify entries.

[crew]Print

Access ID modification console.
" @@ -154,7 +154,7 @@ var/time_last_changed_position = 0 dat += "" dat += "" var/ID - if(scan && (access_change_ids in scan.access) && !target_dept) + if(scan && (GLOB.access_change_ids in scan.access) && !target_dept) ID = 1 else ID = 0 @@ -174,7 +174,7 @@ var/time_last_changed_position = 0 if(-1) dat += "Denied" if(-2) - var/time_to_wait = round(change_position_cooldown - ((world.time / 10) - time_last_changed_position), 1) + var/time_to_wait = round(change_position_cooldown - ((world.time / 10) - GLOB.time_last_changed_position), 1) var/mins = round(time_to_wait / 60) var/seconds = time_to_wait - (60*mins) dat += "Cooldown ongoing: [mins]:[(seconds < 10) ? "0[seconds]" : "[seconds]"]" @@ -190,7 +190,7 @@ var/time_last_changed_position = 0 if(-1) dat += "Denied" if(-2) - var/time_to_wait = round(change_position_cooldown - ((world.time / 10) - time_last_changed_position), 1) + var/time_to_wait = round(change_position_cooldown - ((world.time / 10) - GLOB.time_last_changed_position), 1) var/mins = round(time_to_wait / 60) var/seconds = time_to_wait - (60*mins) dat += "Cooldown ongoing: [mins]:[(seconds < 10) ? "0[seconds]" : "[seconds]"]" @@ -350,7 +350,7 @@ var/time_last_changed_position = 0 switch(href_list["choice"]) if ("modify") if (modify) - data_core.manifest_modify(modify.registered_name, modify.assignment) + GLOB.data_core.manifest_modify(modify.registered_name, modify.assignment) modify.update_label() modify.loc = loc modify.verb_pickup() @@ -388,7 +388,7 @@ var/time_last_changed_position = 0 if (check_access(scan)) region_access = list() head_subordinates = list() - if(access_change_ids in scan.access) + if(GLOB.access_change_ids in scan.access) if(target_dept) head_subordinates = get_all_jobs() region_access |= target_dept @@ -398,20 +398,20 @@ var/time_last_changed_position = 0 playsound(src, 'sound/machines/terminal_on.ogg', 50, 0) else - if((access_hop in scan.access) && ((target_dept==1) || !target_dept)) + if((GLOB.access_hop in scan.access) && ((target_dept==1) || !target_dept)) region_access |= 1 region_access |= 6 get_subordinates("Head of Personnel") - if((access_hos in scan.access) && ((target_dept==2) || !target_dept)) + if((GLOB.access_hos in scan.access) && ((target_dept==2) || !target_dept)) region_access |= 2 get_subordinates("Head of Security") - if((access_cmo in scan.access) && ((target_dept==3) || !target_dept)) + if((GLOB.access_cmo in scan.access) && ((target_dept==3) || !target_dept)) region_access |= 3 get_subordinates("Chief Medical Officer") - if((access_rd in scan.access) && ((target_dept==4) || !target_dept)) + if((GLOB.access_rd in scan.access) && ((target_dept==4) || !target_dept)) region_access |= 4 get_subordinates("Research Director") - if((access_ce in scan.access) && ((target_dept==5) || !target_dept)) + if((GLOB.access_ce in scan.access) && ((target_dept==5) || !target_dept)) region_access |= 5 get_subordinates("Chief Engineer") if(region_access) @@ -488,7 +488,7 @@ var/time_last_changed_position = 0 if("make_job_available") // MAKE ANOTHER JOB POSITION AVAILABLE FOR LATE JOINERS - if(scan && (access_change_ids in scan.access) && !target_dept) + if(scan && (GLOB.access_change_ids in scan.access) && !target_dept) var/edit_job_target = href_list["job"] var/datum/job/j = SSjob.GetJob(edit_job_target) if(!j) @@ -496,14 +496,14 @@ var/time_last_changed_position = 0 if(can_open_job(j) != 1) return 0 if(opened_positions[edit_job_target] >= 0) - time_last_changed_position = world.time / 10 + GLOB.time_last_changed_position = world.time / 10 j.total_positions++ opened_positions[edit_job_target]++ playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) if("make_job_unavailable") // MAKE JOB POSITION UNAVAILABLE FOR LATE JOINERS - if(scan && (access_change_ids in scan.access) && !target_dept) + if(scan && (GLOB.access_change_ids in scan.access) && !target_dept) var/edit_job_target = href_list["job"] var/datum/job/j = SSjob.GetJob(edit_job_target) if(!j) @@ -512,14 +512,14 @@ var/time_last_changed_position = 0 return 0 //Allow instant closing without cooldown if a position has been opened before if(opened_positions[edit_job_target] <= 0) - time_last_changed_position = world.time / 10 + GLOB.time_last_changed_position = world.time / 10 j.total_positions-- opened_positions[edit_job_target]-- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) if ("prioritize_job") // TOGGLE WHETHER JOB APPEARS AS PRIORITIZED IN THE LOBBY - if(scan && (access_change_ids in scan.access) && !target_dept) + if(scan && (GLOB.access_change_ids in scan.access) && !target_dept) var/priority_target = href_list["job"] var/datum/job/j = SSjob.GetJob(priority_target) if(!j) @@ -541,7 +541,7 @@ var/time_last_changed_position = 0 sleep(50) var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( loc ) var/t1 = "Crew Manifest:
" - for(var/datum/data/record/t in sortRecord(data_core.general)) + for(var/datum/data/record/t in sortRecord(GLOB.data_core.general)) t1 += t.fields["name"] + " - " + t.fields["rank"] + "
" P.info = t1 P.name = "paper- 'Crew Manifest'" @@ -560,7 +560,7 @@ var/time_last_changed_position = 0 /obj/machinery/computer/card/centcom name = "\improper Centcom identification console" circuit = /obj/item/weapon/circuitboard/computer/card/centcom - req_access = list(access_cent_captain) + req_access = list(GLOB.access_cent_captain) /obj/machinery/computer/card/minor name = "department management console" diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 222c628ec7..afa054428a 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -5,7 +5,7 @@ icon_screen = "dna" icon_keyboard = "med_key" circuit = /obj/item/weapon/circuitboard/computer/cloning - req_access = list(access_heads) //Only used for record deletion right now. + req_access = list(GLOB.access_heads) //Only used for record deletion right now. var/obj/machinery/dna_scannernew/scanner = null //Linked scanner. For scanning. var/list/pods //Linked cloning pods var/temp = "Inactive" diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 7247288466..5af4f9c281 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -1,12 +1,10 @@ -var/const/CALL_SHUTTLE_REASON_LENGTH = 12 - // The communications computer /obj/machinery/computer/communications name = "communications console" desc = "This can be used for various important functions. Still under developement." icon_screen = "comm" icon_keyboard = "tech_key" - req_access = list(access_heads) + req_access = list(GLOB.access_heads) circuit = /obj/item/weapon/circuitboard/computer/communications var/authenticated = 0 var/auth_id = "Unknown" //Who is currently logged in? @@ -44,7 +42,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12 return TRUE /obj/machinery/computer/communications/New() - shuttle_caller_list += src + GLOB.shuttle_caller_list += src ..() /obj/machinery/computer/communications/process() @@ -103,19 +101,19 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12 var/obj/item/device/pda/pda = I I = pda.id if (I && istype(I)) - if(access_captain in I.access) - var/old_level = security_level + if(GLOB.access_captain in I.access) + var/old_level = GLOB.security_level if(!tmp_alertlevel) tmp_alertlevel = SEC_LEVEL_GREEN if(tmp_alertlevel < SEC_LEVEL_GREEN) tmp_alertlevel = SEC_LEVEL_GREEN if(tmp_alertlevel > SEC_LEVEL_BLUE) tmp_alertlevel = SEC_LEVEL_BLUE //Cannot engage delta with this set_security_level(tmp_alertlevel) - if(security_level != old_level) + if(GLOB.security_level != old_level) to_chat(usr, "Authorization confirmed. Modifying security level.") playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) //Only notify the admins if an actual change happened log_game("[key_name(usr)] has changed the security level to [get_security_level()].") message_admins("[key_name_admin(usr)] has changed the security level to [get_security_level()].") - switch(security_level) + switch(GLOB.security_level) if(SEC_LEVEL_GREEN) feedback_inc("alert_comms_green",1) if(SEC_LEVEL_BLUE) @@ -168,7 +166,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12 to_chat(usr, "You have not met the requirements for purchasing this shuttle.") else if(SSshuttle.points >= S.credit_cost) - var/obj/machinery/shuttle_manipulator/M = locate() in machines + var/obj/machinery/shuttle_manipulator/M = locate() in GLOB.machines if(M) SSshuttle.shuttle_purchased = TRUE M.unload_preview() @@ -359,16 +357,16 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12 if("ai-securitylevel") src.tmp_alertlevel = text2num( href_list["newalertlevel"] ) if(!tmp_alertlevel) tmp_alertlevel = 0 - var/old_level = security_level + var/old_level = GLOB.security_level if(!tmp_alertlevel) tmp_alertlevel = SEC_LEVEL_GREEN if(tmp_alertlevel < SEC_LEVEL_GREEN) tmp_alertlevel = SEC_LEVEL_GREEN if(tmp_alertlevel > SEC_LEVEL_BLUE) tmp_alertlevel = SEC_LEVEL_BLUE //Cannot engage delta with this set_security_level(tmp_alertlevel) - if(security_level != old_level) + if(GLOB.security_level != old_level) //Only notify the admins if an actual change happened log_game("[key_name(usr)] has changed the security level to [get_security_level()].") message_admins("[key_name_admin(usr)] has changed the security level to [get_security_level()].") - switch(security_level) + switch(GLOB.security_level) if(SEC_LEVEL_GREEN) feedback_inc("alert_comms_green",1) if(SEC_LEVEL_BLUE) @@ -509,7 +507,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12 playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) if(STATE_ALERT_LEVEL) dat += "Current alert level: [get_security_level()]
" - if(security_level == SEC_LEVEL_DELTA) + if(GLOB.security_level == SEC_LEVEL_DELTA) dat += "The self-destruct mechanism is active. Find a way to deactivate the mechanism to lower the alert level or evacuate." else dat += "Blue
" @@ -520,7 +518,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12 dat += "Swipe ID to confirm change.
" if(STATE_TOGGLE_EMERGENCY) playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0) - if(emergency_access == 1) + if(GLOB.emergency_access == 1) dat += "Emergency Maintenance Access is currently ENABLED" dat += "
Restore maintenance access restrictions?
\[ OK | Cancel \]" else @@ -640,14 +638,14 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12 if(STATE_ALERT_LEVEL) dat += "Current alert level: [get_security_level()]
" - if(security_level == SEC_LEVEL_DELTA) + if(GLOB.security_level == SEC_LEVEL_DELTA) dat += "The self-destruct mechanism is active. Find a way to deactivate the mechanism to lower the alert level or evacuate." else dat += "Blue
" dat += "Green" if(STATE_TOGGLE_EMERGENCY) - if(emergency_access == 1) + if(GLOB.emergency_access == 1) dat += "Emergency Maintenance Access is currently ENABLED" dat += "
Restore maintenance access restrictions?
\[ OK | Cancel \]" else @@ -688,7 +686,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12 /obj/machinery/computer/communications/Destroy() - shuttle_caller_list -= src + GLOB.shuttle_caller_list -= src SSshuttle.autoEvac() return ..() diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index de65c1bed2..1d331051e6 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -7,27 +7,22 @@ idle_power_usage = 250 active_power_usage = 500 circuit = /obj/item/weapon/circuitboard/computer/crew - var/monitor = null //For VV debugging purposes light_color = LIGHT_COLOR_BLUE -/obj/machinery/computer/crew/New() - monitor = crewmonitor - return ..() - /obj/machinery/computer/crew/attack_ai(mob/user) if(stat & (BROKEN|NOPOWER)) return - crewmonitor.show(user) + GLOB.crewmonitor.show(user) /obj/machinery/computer/crew/attack_hand(mob/user) if(..()) return if(stat & (BROKEN|NOPOWER)) return - crewmonitor.show(user) + GLOB.crewmonitor.show(user) -var/global/datum/crewmonitor/crewmonitor = new +GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) /datum/crewmonitor var/list/jobs @@ -151,7 +146,7 @@ var/global/datum/crewmonitor/crewmonitor = new var/pos_y var/life_status - for(var/mob/living/carbon/human/H in mob_list) + for(var/mob/living/carbon/human/H in GLOB.mob_list) // Check if their z-level is correct and if they are wearing a uniform. // Accept H.z==0 as well in case the mob is inside an object. if ((H.z == 0 || H.z == z) && istype(H.w_uniform, /obj/item/clothing/under)) @@ -256,15 +251,15 @@ var/global/datum/crewmonitor/crewmonitor = new . = ..() - if (old_z != src.z) crewmonitor.queueUpdate(old_z) - crewmonitor.queueUpdate(src.z) + if (old_z != src.z) GLOB.crewmonitor.queueUpdate(old_z) + GLOB.crewmonitor.queueUpdate(src.z) else return ..() /datum/crewmonitor/proc/queueUpdate(z) - addtimer(CALLBACK(crewmonitor, .proc/update, z), 5, TIMER_UNIQUE) + addtimer(CALLBACK(src, .proc/update, z), 5, TIMER_UNIQUE) /datum/crewmonitor/proc/sendResources(var/client/client) send_asset(client, "crewmonitor.js") send_asset(client, "crewmonitor.css") - SSminimap.send(client) \ No newline at end of file + SSminimap.send(client) diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index a100f16184..4837e64e89 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -401,12 +401,12 @@ if(buffer_slot["SE"]) I = new /obj/item/weapon/dnainjector/timed(loc) var/powers = 0 - for(var/datum/mutation/human/HM in good_mutations + bad_mutations + not_good_mutations) + for(var/datum/mutation/human/HM in GLOB.good_mutations + GLOB.bad_mutations + GLOB.not_good_mutations) if(HM.check_block_string(buffer_slot["SE"])) I.add_mutations.Add(HM) - if(HM in good_mutations) + if(HM in GLOB.good_mutations) powers += 1 - if(HM in bad_mutations + not_good_mutations) + if(HM in GLOB.bad_mutations + GLOB.not_good_mutations) powers -= 1 //To prevent just unlocking everything to get all powers to a syringe for max tech else I.remove_mutations.Add(HM) diff --git a/code/game/machinery/computer/gulag_teleporter.dm b/code/game/machinery/computer/gulag_teleporter.dm index b9dc410e57..60376d4ead 100644 --- a/code/game/machinery/computer/gulag_teleporter.dm +++ b/code/game/machinery/computer/gulag_teleporter.dm @@ -4,7 +4,7 @@ desc = "Used to send criminals to the Labor Camp" icon_screen = "explosive" icon_keyboard = "security_key" - req_access = list(access_armory) + req_access = list(GLOB.access_armory) circuit = /obj/item/weapon/circuitboard/computer/gulag_teleporter_console var/default_goal = 200 var/obj/item/weapon/card/id/prisoner/id = null @@ -38,7 +38,7 @@ return ..() /obj/machinery/computer/gulag_teleporter_computer/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/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "gulag_console", name, 455, 440, master_ui, state) @@ -55,8 +55,8 @@ prisoner_list["name"] = prisoner.real_name if(id) can_teleport = TRUE - if(!isnull(data_core.general)) - for(var/r in data_core.security) + if(!isnull(GLOB.data_core.general)) + for(var/r in GLOB.data_core.security) var/datum/data/record/R = r if(R.fields["name"] == prisoner_list["name"]) temporary_record = R @@ -135,7 +135,7 @@ /obj/machinery/computer/gulag_teleporter_computer/proc/findteleporter() var/obj/machinery/gulag_teleporter/teleporterf = null - for(dir in cardinal) + for(dir in GLOB.cardinal) teleporterf = locate(/obj/machinery/gulag_teleporter, get_step(src, dir)) if(teleporterf && teleporterf.is_operational()) return teleporterf diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index fc4e9f6071..dee63b902c 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -5,7 +5,7 @@ desc = "This can be used to check medical records." icon_screen = "medcomp" icon_keyboard = "med_key" - req_one_access = list(access_medical, access_forensics_lockers) + req_one_access = list(GLOB.access_medical, GLOB.access_forensics_lockers) circuit = /obj/item/weapon/circuitboard/computer/med_data var/obj/item/weapon/card/id/scan = null var/authenticated = null @@ -72,11 +72,11 @@ "} - if(!isnull(data_core.general)) - for(var/datum/data/record/R in sortRecord(data_core.general, sortBy, order)) + if(!isnull(GLOB.data_core.general)) + for(var/datum/data/record/R in sortRecord(GLOB.data_core.general, sortBy, order)) var/blood_type = "" var/b_dna = "" - for(var/datum/data/record/E in data_core.medical) + for(var/datum/data/record/E in GLOB.data_core.medical) if((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"])) blood_type = E.fields["blood_type"] b_dna = E.fields["b_dna"] @@ -98,8 +98,8 @@ dat += text("", R.fields["p_stat"]) dat += text("", R.fields["m_stat"]) dat += "
JobSlotsOpen jobClose jobPrioritize
[][]

" -// if(data_core.general) -// for(var/datum/data/record/R in sortRecord(data_core.general)) +// if(GLOB.data_core.general) +// for(var/datum/data/record/R in sortRecord(GLOB.data_core.general)) // dat += "[R.fields["id"]]: [R.fields["name"]]
" // //Foreach goto(132) dat += text("
Back", src) @@ -108,7 +108,7 @@ if(4) dat += "" - if(active1 in data_core.general) + if(active1 in GLOB.data_core.general) if(istype(active1.fields["photo_front"], /obj/item/weapon/photo)) var/obj/item/weapon/photo/P1 = active1.fields["photo_front"] user << browse_rsc(P1.img, "photo_front") @@ -130,7 +130,7 @@ dat += "" dat += "" - if(active2 in data_core.medical) + if(active2 in GLOB.data_core.medical) dat += "" dat += "" dat += "" @@ -172,7 +172,7 @@ dat += "Back" dat += "
Medical Robots:" var/bdat = null - for(var/mob/living/simple_animal/bot/medbot/M in living_mob_list) + for(var/mob/living/simple_animal/bot/medbot/M in GLOB.living_mob_list) if(M.z != src.z) continue //only find medibots on the same z-level as the computer var/turf/bl = get_turf(M) @@ -201,9 +201,9 @@ . = ..() if(.) return . - if(!(active1 in data_core.general)) + if(!(active1 in GLOB.data_core.general)) src.active1 = null - if(!(active2 in data_core.medical)) + if(!(active2 in GLOB.data_core.medical)) src.active2 = null if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr) || IsAdminGhost(usr)) @@ -293,7 +293,7 @@ else if(href_list["del_all2"]) investigate_log("[usr.name] ([usr.key]) has deleted all medical records.", "records") - data_core.medical.Cut() + GLOB.data_core.medical.Cut() src.temp = "All records deleted." else if(href_list["field"]) @@ -464,9 +464,9 @@ active2 = null else if(href_list["d_rec"]) - active1 = find_record("id", href_list["d_rec"], data_core.general) + active1 = find_record("id", href_list["d_rec"], GLOB.data_core.general) if(active1) - active2 = find_record("id", href_list["d_rec"], data_core.medical) + active2 = find_record("id", href_list["d_rec"], GLOB.data_core.medical) if(!active2) active1 = null screen = 4 @@ -488,12 +488,12 @@ R.fields["cdi"] = "None" R.fields["cdi_d"] = "No diseases have been diagnosed at the moment." R.fields["notes"] = "No notes." - data_core.medical += R + GLOB.data_core.medical += R src.active2 = R src.screen = 4 else if(href_list["add_c"]) - if(!(active2 in data_core.medical)) + if(!(active2 in GLOB.data_core.medical)) return var/a2 = src.active2 var/t1 = stripped_multiline_input("Add Comment:", "Med. records", null, null) @@ -502,7 +502,7 @@ var/counter = 1 while(src.active2.fields[text("com_[]", counter)]) counter++ - src.active2.fields[text("com_[]", counter)] = text("Made by [] ([]) on [] [], []
[]", src.authenticated, src.rank, worldtime2text(), time2text(world.realtime, "MMM DD"), year_integer+540, t1) + src.active2.fields[text("com_[]", counter)] = text("Made by [] ([]) on [] [], []
[]", src.authenticated, src.rank, worldtime2text(), time2text(world.realtime, "MMM DD"), GLOB.year_integer+540, t1) else if(href_list["del_c"]) if((istype(src.active2, /datum/data/record) && src.active2.fields[text("com_[]", href_list["del_c"])])) @@ -515,7 +515,7 @@ src.active1 = null src.active2 = null t1 = lowertext(t1) - for(var/datum/data/record/R in data_core.medical) + for(var/datum/data/record/R in GLOB.data_core.medical) if((lowertext(R.fields["name"]) == t1 || t1 == lowertext(R.fields["id"]) || t1 == lowertext(R.fields["b_dna"]))) src.active2 = R else @@ -523,7 +523,7 @@ if(!( src.active2 )) src.temp = text("Could not locate record [].", sanitize(t1)) else - for(var/datum/data/record/E in data_core.general) + for(var/datum/data/record/E in GLOB.data_core.general) if((E.fields["name"] == src.active2.fields["name"] || E.fields["id"] == src.active2.fields["id"])) src.active1 = E else @@ -533,28 +533,28 @@ else if(href_list["print_p"]) if(!( src.printing )) src.printing = 1 - data_core.medicalPrintCount++ + GLOB.data_core.medicalPrintCount++ playsound(loc, 'sound/items/poster_being_created.ogg', 100, 1) sleep(30) var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( src.loc ) - P.info = "
Medical Record - (MR-[data_core.medicalPrintCount])

" - if(active1 in data_core.general) + P.info = "
Medical Record - (MR-[GLOB.data_core.medicalPrintCount])

" + if(active1 in GLOB.data_core.general) P.info += text("Name: [] ID: []
\nSex: []
\nAge: []
", src.active1.fields["name"], src.active1.fields["id"], src.active1.fields["sex"], src.active1.fields["age"]) if(config.mutant_races) P.info += "\nSpecies: [active1.fields["species"]]
" P.info += text("\nFingerprint: []
\nPhysical Status: []
\nMental Status: []
", src.active1.fields["fingerprint"], src.active1.fields["p_stat"], src.active1.fields["m_stat"]) else P.info += "General Record Lost!
" - if(active2 in data_core.medical) + if(active2 in GLOB.data_core.medical) P.info += text("
\n
Medical Data

\nBlood Type: []
\nDNA: []
\n
\nMinor Disabilities: []
\nDetails: []
\n
\nMajor Disabilities: []
\nDetails: []
\n
\nAllergies: []
\nDetails: []
\n
\nCurrent Diseases: [] (per disease info placed in log/comment section)
\nDetails: []
\n
\nImportant Notes:
\n\t[]
\n
\n
Comments/Log

", src.active2.fields["blood_type"], src.active2.fields["b_dna"], src.active2.fields["mi_dis"], src.active2.fields["mi_dis_d"], src.active2.fields["ma_dis"], src.active2.fields["ma_dis_d"], src.active2.fields["alg"], src.active2.fields["alg_d"], src.active2.fields["cdi"], src.active2.fields["cdi_d"], src.active2.fields["notes"]) var/counter = 1 while(src.active2.fields[text("com_[]", counter)]) P.info += text("[]
", src.active2.fields[text("com_[]", counter)]) counter++ - P.name = text("MR-[] '[]'", data_core.medicalPrintCount, src.active1.fields["name"]) + P.name = text("MR-[] '[]'", GLOB.data_core.medicalPrintCount, src.active1.fields["name"]) else P.info += "Medical Record Lost!
" - P.name = text("MR-[] '[]'", data_core.medicalPrintCount, "Record Lost") + P.name = text("MR-[] '[]'", GLOB.data_core.medicalPrintCount, "Record Lost") P.info += "" src.printing = null @@ -564,7 +564,7 @@ /obj/machinery/computer/med_data/emp_act(severity) if(!(stat & (BROKEN|NOPOWER))) - for(var/datum/data/record/R in data_core.medical) + for(var/datum/data/record/R in GLOB.data_core.medical) if(prob(10/severity)) switch(rand(1,6)) if(1) diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index a0ada38d1e..0b61f19f0a 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -60,8 +60,8 @@ ..() //Is the server isn't linked to a server, and there's a server available, default it to the first one in the list. if(!linkedServer) - if(message_servers && message_servers.len > 0) - linkedServer = message_servers[1] + if(GLOB.message_servers && GLOB.message_servers.len > 0) + linkedServer = GLOB.message_servers[1] /obj/machinery/computer/message_monitor/attack_hand(mob/living/user) if(..()) @@ -269,11 +269,11 @@ if(auth) linkedServer.active = !linkedServer.active //Find a server if (href_list["find"]) - if(message_servers && message_servers.len > 1) - src.linkedServer = input(usr,"Please select a server.", "Select a server.", null) as null|anything in message_servers + if(GLOB.message_servers && GLOB.message_servers.len > 1) + src.linkedServer = input(usr,"Please select a server.", "Select a server.", null) as null|anything in GLOB.message_servers message = "NOTICE: Server selected." - else if(message_servers && message_servers.len > 0) - linkedServer = message_servers[1] + else if(GLOB.message_servers && GLOB.message_servers.len > 0) + linkedServer = GLOB.message_servers[1] message = "NOTICE: Only Single Server Detected - Server selected." else message = noserver @@ -376,7 +376,7 @@ if("Recepient") //Get out list of viable PDAs var/list/obj/item/device/pda/sendPDAs = get_viewable_pdas() - if(PDAs && PDAs.len > 0) + if(GLOB.PDAs && GLOB.PDAs.len > 0) customrecepient = input(usr, "Select a PDA from the list.") as null|anything in sortNames(sendPDAs) else customrecepient = null @@ -458,8 +458,8 @@ /obj/item/weapon/paper/monitorkey/New() ..() spawn(10) - if(message_servers) - for(var/obj/machinery/message_server/server in message_servers) + if(GLOB.message_servers) + for(var/obj/machinery/message_server/server in GLOB.message_servers) if(!isnull(server)) if(!isnull(server.decryptkey)) info = "

Daily Key Reset


The new message monitor key is '[server.decryptkey]'.
Please keep this a secret and away from the clown.
If necessary, change the password to a more secure one." diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm index f41375a705..42ff2b9ee7 100644 --- a/code/game/machinery/computer/pod.dm +++ b/code/game/machinery/computer/pod.dm @@ -130,7 +130,7 @@ name = "\improper ProComp Executive IIc" desc = "The Syndicate operate on a tight budget. Operates external airlocks." title = "External Airlock Controls" - req_access = list(access_syndicate) + req_access = list(GLOB.access_syndicate) /obj/machinery/computer/pod/old/syndicate/attack_hand(mob/user) if(!allowed(user)) diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm index c6aa932c6c..27d4275ee5 100644 --- a/code/game/machinery/computer/prisoner.dm +++ b/code/game/machinery/computer/prisoner.dm @@ -3,7 +3,7 @@ desc = "Used to manage tracking implants placed inside criminals." icon_screen = "explosive" icon_keyboard = "security_key" - req_access = list(access_brig) + req_access = list(GLOB.access_brig) var/id = 0 var/temp = null var/status = 0 @@ -34,7 +34,7 @@ dat += "

Prisoner Implant Management

" dat += "
Chemical Implants
" var/turf/Tr = null - for(var/obj/item/weapon/implant/chem/C in tracked_chem_implants) + for(var/obj/item/weapon/implant/chem/C in GLOB.tracked_chem_implants) Tr = get_turf(C) if((Tr) && (Tr.z != src.z)) continue//Out of range @@ -47,7 +47,7 @@ dat += "((10))
" dat += "********************************
" dat += "
Tracking Implants
" - for(var/obj/item/weapon/implant/tracking/T in tracked_implants) + for(var/obj/item/weapon/implant/tracking/T in GLOB.tracked_implants) if(!isliving(T.imp_in)) continue Tr = get_turf(T) @@ -111,16 +111,16 @@ num = min(num,1000) //Cap the quota to the equivilent of 10 minutes. inserted_id.goal = num else if(href_list["inject1"]) - var/obj/item/weapon/implant/I = locate(href_list["inject1"]) in tracked_chem_implants + var/obj/item/weapon/implant/I = locate(href_list["inject1"]) in GLOB.tracked_chem_implants if(I && istype(I)) I.activate(1) else if(href_list["inject5"]) - var/obj/item/weapon/implant/I = locate(href_list["inject5"]) in tracked_chem_implants + var/obj/item/weapon/implant/I = locate(href_list["inject5"]) in GLOB.tracked_chem_implants if(I && istype(I)) I.activate(5) else if(href_list["inject10"]) - var/obj/item/weapon/implant/I = locate(href_list["inject10"]) in tracked_chem_implants + var/obj/item/weapon/implant/I = locate(href_list["inject10"]) in GLOB.tracked_chem_implants if(I && istype(I)) I.activate(10) @@ -132,8 +132,9 @@ else if(href_list["warn"]) var/warning = copytext(sanitize(input(usr,"Message:","Enter your message here!","")),1,MAX_MESSAGE_LEN) - if(!warning) return - var/obj/item/weapon/implant/I = locate(href_list["warn"]) in tracked_chem_implants + if(!warning) + return + var/obj/item/weapon/implant/I = locate(href_list["warn"]) in GLOB.tracked_implants if(I && istype(I) && I.imp_in) var/mob/living/R = I.imp_in to_chat(R, "You hear a voice in your head saying: '[warning]'") diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm index 0cb2ea8cc2..3772dacbdb 100644 --- a/code/game/machinery/computer/robot.dm +++ b/code/game/machinery/computer/robot.dm @@ -6,7 +6,7 @@ desc = "Used to remotely lockdown or detonate linked Cyborgs." icon_screen = "robot" icon_keyboard = "rd_key" - req_access = list(access_robotics) + req_access = list(GLOB.access_robotics) circuit = /obj/item/weapon/circuitboard/computer/robotics var/temp = null @@ -37,7 +37,7 @@ user.set_machine(src) var/dat var/robots = 0 - for(var/mob/living/silicon/robot/R in mob_list) + for(var/mob/living/silicon/robot/R in GLOB.mob_list) if(!can_control(user, R)) continue robots++ @@ -75,7 +75,7 @@ dat += "
" var/drones = 0 - for(var/mob/living/simple_animal/drone/D in mob_list) + for(var/mob/living/simple_animal/drone/D in GLOB.mob_list) if(D.hacked) continue drones++ @@ -103,7 +103,7 @@ else if (href_list["killbot"]) if(src.allowed(usr)) - var/mob/living/silicon/robot/R = locate(href_list["killbot"]) in silicon_mobs + var/mob/living/silicon/robot/R = locate(href_list["killbot"]) in GLOB.silicon_mobs if(can_control(usr, R)) var/choice = input("Are you certain you wish to detonate [R.name]?") in list("Confirm", "Abort") if(choice == "Confirm" && can_control(usr, R) && !..()) @@ -123,7 +123,7 @@ else if (href_list["stopbot"]) if(src.allowed(usr)) - var/mob/living/silicon/robot/R = locate(href_list["stopbot"]) in silicon_mobs + var/mob/living/silicon/robot/R = locate(href_list["stopbot"]) in GLOB.silicon_mobs if(can_control(usr, R)) var/choice = input("Are you certain you wish to [R.canmove ? "lock down" : "release"] [R.name]?") in list("Confirm", "Abort") if(choice == "Confirm" && can_control(usr, R) && !..()) @@ -139,7 +139,7 @@ else if (href_list["magbot"]) if((issilicon(usr) && is_special_character(usr)) || IsAdminGhost(usr)) - var/mob/living/silicon/robot/R = locate(href_list["magbot"]) in silicon_mobs + var/mob/living/silicon/robot/R = locate(href_list["magbot"]) in GLOB.silicon_mobs if(istype(R) && !R.emagged && ((R.syndicate && R == usr) || R.connected_ai == usr || IsAdminGhost(usr)) && !R.scrambledcodes && can_control(usr, R)) log_game("[key_name(usr)] emagged [R.name] using robotic console!") message_admins("[key_name_admin(usr)] emagged cyborg [key_name_admin(R)] using robotic console!") @@ -149,7 +149,7 @@ else if(href_list["convert"]) if(issilicon(usr) && is_special_character(usr)) - var/mob/living/silicon/robot/R = locate(href_list["convert"]) in silicon_mobs + var/mob/living/silicon/robot/R = locate(href_list["convert"]) in GLOB.silicon_mobs if(istype(R) && !is_servant_of_ratvar(R) && is_servant_of_ratvar(usr) && R.connected_ai == usr) log_game("[key_name(usr)] converted [R.name] using robotic console!") message_admins("[key_name_admin(usr)] converted cyborg [key_name_admin(R)] using robotic console!") diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index fbbae48ad3..b8d777e42d 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -1,9 +1,9 @@ /obj/machinery/computer/secure_data//TODO:SANITY name = "security records console" - desc = "Used to view and edit personnel's security records" + desc = "Used to view and edit personnel's security records." icon_screen = "security" icon_keyboard = "security_key" - req_one_access = list(access_security, access_forensics_lockers) + req_one_access = list(GLOB.access_security, GLOB.access_forensics_lockers) circuit = /obj/item/weapon/circuitboard/computer/secure_data var/obj/item/weapon/card/id/scan = null var/authenticated = null @@ -122,10 +122,10 @@ "} - if(!isnull(data_core.general)) - for(var/datum/data/record/R in sortRecord(data_core.general, sortBy, order)) + if(!isnull(GLOB.data_core.general)) + for(var/datum/data/record/R in sortRecord(GLOB.data_core.general, sortBy, order)) var/crimstat = "" - for(var/datum/data/record/E in data_core.security) + for(var/datum/data/record/E in GLOB.data_core.security) if((E.fields["name"] == R.fields["name"]) && (E.fields["id"] == R.fields["id"])) crimstat = E.fields["criminal"] var/background @@ -163,7 +163,7 @@ dat += "
Delete All Records

Back" if(3) dat += "Security Record
" - if(istype(active1, /datum/data/record) && data_core.general.Find(active1)) + if(istype(active1, /datum/data/record) && GLOB.data_core.general.Find(active1)) if(istype(active1.fields["photo_front"], /obj/item/weapon/photo)) var/obj/item/weapon/photo/P1 = active1.fields["photo_front"] user << browse_rsc(P1.img, "photo_front") @@ -189,7 +189,7 @@
Medical Record
General Record Lost!

Medical Data
Blood Type: [active2.fields["blood_type"]] 
DNA: [active2.fields["b_dna"]] 

Minor Disabilities:

 [active2.fields["mi_dis"]] 
Fingerprints Criminal Status
"} else dat += "
General Record Lost!
" - if((istype(active2, /datum/data/record) && data_core.security.Find(active2))) + if((istype(active2, /datum/data/record) && GLOB.data_core.security.Find(active2))) dat += "Security Data" dat += "
Criminal Status: [active2.fields["criminal"]]" dat += "

Minor Crimes: Add New" @@ -262,9 +262,9 @@ What a mess.*/ . = ..() if(.) return . - if(!( data_core.general.Find(active1) )) + if(!( GLOB.data_core.general.Find(active1) )) active1 = null - if(!( data_core.security.Find(active2) )) + if(!( GLOB.data_core.security.Find(active2) )) active2 = null if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr) || IsAdminGhost(usr)) usr.set_machine(src) @@ -341,10 +341,10 @@ What a mess.*/ if("Browse Record") var/datum/data/record/R = locate(href_list["d_rec"]) var/S = locate(href_list["d_rec"]) - if(!( data_core.general.Find(R) )) + if(!( GLOB.data_core.general.Find(R) )) temp = "Record Not Found!" else - for(var/datum/data/record/E in data_core.security) + for(var/datum/data/record/E in GLOB.data_core.security) if((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) S = E active1 = R @@ -355,19 +355,19 @@ What a mess.*/ if("Print Record") if(!( printing )) printing = 1 - data_core.securityPrintCount++ + GLOB.data_core.securityPrintCount++ playsound(loc, 'sound/items/poster_being_created.ogg', 100, 1) sleep(30) var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( loc ) - P.info = "
Security Record - (SR-[data_core.securityPrintCount])

" - if((istype(active1, /datum/data/record) && data_core.general.Find(active1))) + P.info = "
Security Record - (SR-[GLOB.data_core.securityPrintCount])

" + if((istype(active1, /datum/data/record) && GLOB.data_core.general.Find(active1))) P.info += text("Name: [] ID: []
\nSex: []
\nAge: []
", active1.fields["name"], active1.fields["id"], active1.fields["sex"], active1.fields["age"]) if(config.mutant_races) P.info += "\nSpecies: [active1.fields["species"]]
" P.info += text("\nFingerprint: []
\nPhysical Status: []
\nMental Status: []
", active1.fields["fingerprint"], active1.fields["p_stat"], active1.fields["m_stat"]) else P.info += "General Record Lost!
" - if((istype(active2, /datum/data/record) && data_core.security.Find(active2))) + if((istype(active2, /datum/data/record) && GLOB.data_core.security.Find(active2))) P.info += text("
\n
Security Data

\nCriminal Status: []", active2.fields["criminal"]) P.info += "
\n
\nMinor Crimes:
\n" @@ -408,10 +408,10 @@ What a mess.*/ while(active2.fields[text("com_[]", counter)]) P.info += text("[]
", active2.fields[text("com_[]", counter)]) counter++ - P.name = text("SR-[] '[]'", data_core.securityPrintCount, active1.fields["name"]) + P.name = text("SR-[] '[]'", GLOB.data_core.securityPrintCount, active1.fields["name"]) else P.info += "Security Record Lost!
" - P.name = text("SR-[] '[]'", data_core.securityPrintCount, "Record Lost") + P.name = text("SR-[] '[]'", GLOB.data_core.securityPrintCount, "Record Lost") P.info += "" printing = null if("Print Poster") @@ -439,7 +439,7 @@ What a mess.*/ playsound(loc, 'sound/items/poster_being_created.ogg', 100, 1) printing = 1 sleep(30) - if((istype(active1, /datum/data/record) && data_core.general.Find(active1)))//make sure the record still exists. + if((istype(active1, /datum/data/record) && GLOB.data_core.general.Find(active1)))//make sure the record still exists. var/obj/item/weapon/photo/photo = active1.fields["photo_front"] new /obj/item/weapon/poster/wanted(src.loc, photo.img, wanted_name, info) printing = 0 @@ -453,9 +453,9 @@ What a mess.*/ if("Purge All Records") investigate_log("[usr.name] ([usr.key]) has purged all the security records.", "records") - for(var/datum/data/record/R in data_core.security) + for(var/datum/data/record/R in GLOB.data_core.security) qdel(R) - data_core.security.Cut() + GLOB.data_core.security.Cut() temp = "All Security records deleted." if("Add Entry") @@ -468,7 +468,7 @@ What a mess.*/ var/counter = 1 while(active2.fields[text("com_[]", counter)]) counter++ - active2.fields[text("com_[]", counter)] = text("Made by [] ([]) on [] [], []
[]", src.authenticated, src.rank, worldtime2text(), time2text(world.realtime, "MMM DD"), year_integer+540, t1) + active2.fields[text("com_[]", counter)] = text("Made by [] ([]) on [] [], []
[]", src.authenticated, src.rank, worldtime2text(), time2text(world.realtime, "MMM DD"), GLOB.year_integer+540, t1) if("Delete Record (ALL)") if(active1) @@ -496,7 +496,7 @@ What a mess.*/ R.fields["mi_crim"] = list() R.fields["ma_crim"] = list() R.fields["notes"] = "No notes." - data_core.security += R + GLOB.data_core.security += R active2 = R screen = 3 @@ -515,7 +515,7 @@ What a mess.*/ G.fields["fingerprint"] = "?????" G.fields["p_stat"] = "Active" G.fields["m_stat"] = "Stable" - data_core.general += G + GLOB.data_core.general += G active1 = G //Security Record @@ -527,7 +527,7 @@ What a mess.*/ R.fields["mi_crim"] = list() R.fields["ma_crim"] = list() R.fields["notes"] = "No notes." - data_core.security += R + GLOB.data_core.security += R active2 = R //Medical Record @@ -545,7 +545,7 @@ What a mess.*/ M.fields["cdi"] = "None" M.fields["cdi_d"] = "No diseases have been diagnosed at the moment." M.fields["notes"] = "No notes." - data_core.medical += M + GLOB.data_core.medical += M @@ -593,7 +593,7 @@ What a mess.*/ active1.fields["age"] = t1 if("species") if(istype(active1, /datum/data/record)) - var/t1 = input("Select a species", "Species Selection") as null|anything in roundstart_species + var/t1 = input("Select a species", "Species Selection") as null|anything in GLOB.roundstart_species if(!canUseSecurityRecordsConsole(usr, t1, a1)) return active1.fields["species"] = t1 @@ -623,28 +623,28 @@ What a mess.*/ var/t2 = stripped_multiline_input(usr, "Please input minor crime details:", "Secure. records", "", null) if(!canUseSecurityRecordsConsole(usr, t1, null, a2)) return - var/crime = data_core.createCrimeEntry(t1, t2, authenticated, worldtime2text()) - data_core.addMinorCrime(active1.fields["id"], crime) + var/crime = GLOB.data_core.createCrimeEntry(t1, t2, authenticated, worldtime2text()) + GLOB.data_core.addMinorCrime(active1.fields["id"], crime) if("mi_crim_delete") if(istype(active1, /datum/data/record)) if(href_list["cdataid"]) if(!canUseSecurityRecordsConsole(usr, "delete", null, a2)) return - data_core.removeMinorCrime(active1.fields["id"], href_list["cdataid"]) + GLOB.data_core.removeMinorCrime(active1.fields["id"], href_list["cdataid"]) if("ma_crim_add") if(istype(active1, /datum/data/record)) var/t1 = stripped_input(usr, "Please input major crime names:", "Secure. records", "", null) var/t2 = stripped_multiline_input(usr, "Please input major crime details:", "Secure. records", "", null) if(!canUseSecurityRecordsConsole(usr, t1, null, a2)) return - var/crime = data_core.createCrimeEntry(t1, t2, authenticated, worldtime2text()) - data_core.addMajorCrime(active1.fields["id"], crime) + var/crime = GLOB.data_core.createCrimeEntry(t1, t2, authenticated, worldtime2text()) + GLOB.data_core.addMajorCrime(active1.fields["id"], crime) if("ma_crim_delete") if(istype(active1, /datum/data/record)) if(href_list["cdataid"]) if(!canUseSecurityRecordsConsole(usr, "delete", null, a2)) return - data_core.removeMajorCrime(active1.fields["id"], href_list["cdataid"]) + GLOB.data_core.removeMajorCrime(active1.fields["id"], href_list["cdataid"]) if("notes") if(istype(active2, /datum/data/record)) var/t1 = stripped_input(usr, "Please summarize notes:", "Secure. records", active2.fields["notes"], null) @@ -697,7 +697,7 @@ What a mess.*/ if("released") active2.fields["criminal"] = "Discharged" investigate_log("[active1.fields["name"]] has been set from [old_field] to [active2.fields["criminal"]] by [usr.name] ([usr.key]).", "records") - for(var/mob/living/carbon/human/H in mob_list) //thanks for forcing me to do this, whoever wrote this shitty records system + for(var/mob/living/carbon/human/H in GLOB.mob_list) //thanks for forcing me to do this, whoever wrote this shitty records system H.sec_hud_set_security_status() if("Delete Record (Security) Execute") investigate_log("[usr.name] ([usr.key]) has deleted the security records for [active1.fields["name"]].", "records") @@ -708,7 +708,7 @@ What a mess.*/ if("Delete Record (ALL) Execute") if(active1) investigate_log("[usr.name] ([usr.key]) has deleted all records for [active1.fields["name"]].", "records") - for(var/datum/data/record/R in data_core.medical) + for(var/datum/data/record/R in GLOB.data_core.medical) if((R.fields["name"] == active1.fields["name"] || R.fields["id"] == active1.fields["id"])) qdel(R) break @@ -742,14 +742,14 @@ What a mess.*/ ..(severity) return - for(var/datum/data/record/R in data_core.security) + for(var/datum/data/record/R in GLOB.data_core.security) if(prob(10/severity)) switch(rand(1,8)) if(1) if(prob(10)) R.fields["name"] = "[pick(lizard_name(MALE),lizard_name(FEMALE))]" else - R.fields["name"] = "[pick(pick(first_names_male), pick(first_names_female))] [pick(last_names)]" + R.fields["name"] = "[pick(pick(GLOB.first_names_male), pick(GLOB.first_names_female))] [pick(GLOB.last_names)]" if(2) R.fields["sex"] = pick("Male", "Female") if(3) @@ -761,9 +761,9 @@ What a mess.*/ if(6) R.fields["m_stat"] = pick("*Insane*", "*Unstable*", "*Watch*", "Stable") if(7) - R.fields["species"] = pick(roundstart_species) + R.fields["species"] = pick(GLOB.roundstart_species) if(8) - var/datum/data/record/G = pick(data_core.general) + var/datum/data/record/G = pick(GLOB.data_core.general) R.fields["photo_front"] = G.fields["photo_front"] R.fields["photo_side"] = G.fields["photo_side"] continue diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm index 2d27bef53c..d626811e6a 100644 --- a/code/game/machinery/computer/station_alert.dm +++ b/code/game/machinery/computer/station_alert.dm @@ -9,7 +9,7 @@ light_color = LIGHT_COLOR_CYAN /obj/machinery/computer/station_alert/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/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "station_alert", name, 300, 500, master_ui, state) diff --git a/code/game/machinery/computer/telecrystalconsoles.dm b/code/game/machinery/computer/telecrystalconsoles.dm index daf2864374..4bb872b347 100644 --- a/code/game/machinery/computer/telecrystalconsoles.dm +++ b/code/game/machinery/computer/telecrystalconsoles.dm @@ -1,6 +1,6 @@ #define NUKESCALINGMODIFIER 1 -var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","Foxtrot","Zero", "Niner") +GLOBAL_LIST_INIT(possible_uplinker_IDs, list("Alfa","Bravo","Charlie","Delta","Echo","Foxtrot","Zero", "Niner")) /obj/machinery/computer/telecrystals name = "\improper Telecrystal assignment station" @@ -21,16 +21,13 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F var/obj/item/uplinkholder = null var/obj/machinery/computer/telecrystals/boss/linkedboss = null -/obj/machinery/computer/telecrystals/uplinker/New() +/obj/machinery/computer/telecrystals/uplinker/Initialize() ..() - var/ID - if(possible_uplinker_IDs.len) - ID = pick(possible_uplinker_IDs) - possible_uplinker_IDs -= ID - name = "[name] [ID]" - else - name = "[name] [rand(1,999)]" + var/ID = pick_n_take(GLOB.possible_uplinker_IDs) + if(!ID) + ID = rand(1,999) + name = "[name] [ID]" /obj/machinery/computer/telecrystals/uplinker/attackby(obj/item/O, mob/user, params) if(uplinkholder) @@ -147,8 +144,7 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F /obj/machinery/computer/telecrystals/boss/proc/getDangerous()//This scales the TC assigned with the round population. ..() - var/danger - danger = joined_player_list.len - ticker.mode.syndicates.len + var/danger = GLOB.joined_player_list.len - SSticker.mode.syndicates.len danger = Ceiling(danger, 10) scaleTC(danger) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 89390560b4..df5366024b 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -37,8 +37,10 @@ #define AIRLOCK_DAMAGE_DEFLECTION_N 20 // Normal airlock damage deflection #define AIRLOCK_DAMAGE_DEFLECTION_R 30 // Reinforced airlock damage deflection +#define NOT_ELECTRIFIED 0 +#define ELECTRIFIED_PERMANENT -1 + -var/list/airlock_overlays = list() /obj/machinery/door/airlock name = "airlock" @@ -90,13 +92,16 @@ var/list/airlock_overlays = list() hud_possible = list(DIAG_AIRLOCK_HUD) var/air_tight = FALSE //TRUE means density will be set as soon as the door begins to close + var/prying_so_hard = FALSE + + var/static/list/airlock_overlays = list() /obj/machinery/door/airlock/Initialize() ..() wires = new /datum/wires/airlock(src) if(src.closeOtherId != null) spawn (5) - for (var/obj/machinery/door/airlock/A in airlocks) + for (var/obj/machinery/door/airlock/A in GLOB.airlocks) if(A.closeOtherId == src.closeOtherId && A != src) src.closeOther = A break @@ -111,7 +116,7 @@ var/list/airlock_overlays = list() if(damage_deflection == AIRLOCK_DAMAGE_DEFLECTION_N && security_level > AIRLOCK_SECURITY_METAL) damage_deflection = AIRLOCK_DAMAGE_DEFLECTION_R prepare_huds() - var/datum/atom_hud/data/diagnostic/diag_hud = huds[DATA_HUD_DIAGNOSTIC] + var/datum/atom_hud/data/diagnostic/diag_hud = GLOB.huds[DATA_HUD_DIAGNOSTIC] diag_hud.add_to_hud(src) diag_hud_set_electrified() @@ -208,7 +213,7 @@ var/list/airlock_overlays = list() cyclelinkedairlock.cyclelinkedairlock = null cyclelinkedairlock = null if(id_tag) - for(var/obj/machinery/doorButtons/D in machines) + for(var/obj/machinery/doorButtons/D in GLOB.machines) D.removeMe(src) return ..() @@ -264,7 +269,7 @@ var/list/airlock_overlays = list() user.Weaken(3) /obj/machinery/door/airlock/proc/isElectrified() - if(src.secondsElectrified != 0) + if(src.secondsElectrified != NOT_ELECTRIFIED) return 1 return 0 @@ -487,6 +492,9 @@ var/list/airlock_overlays = list() add_overlay(damag_overlay) /proc/get_airlock_overlay(icon_state, icon_file) + var/obj/machinery/door/airlock/A + pass(A) //suppress unused warning + var/list/airlock_overlays = A.airlock_overlays var/iconkey = "[icon_state][icon_file]" if(airlock_overlays[iconkey]) return airlock_overlays[iconkey] @@ -617,10 +625,10 @@ var/list/airlock_overlays = list() if(wires.is_cut(WIRE_SHOCK)) t1 += text("Electrification wire is cut.
\n") - if(src.secondsElectrified==-1) + if(secondsElectrified==ELECTRIFIED_PERMANENT) t1 += text("Door is electrified indefinitely. Un-electrify it?
\n", src) - else if(src.secondsElectrified>0) - t1 += text("Door is electrified temporarily ([] seconds). Un-electrify it?
\n", src.secondsElectrified, src) + else if(secondsElectrified>NOT_ELECTRIFIED) + t1 += text("Door is electrified temporarily ([] seconds). Un-electrify it?
\n", secondsElectrified, src) else t1 += text("Door is not electrified. Electrify it for 30 seconds? Or, Electrify it indefinitely until someone cancels the electrification?
\n", src, src) @@ -792,9 +800,7 @@ var/list/airlock_overlays = list() //un-electrify door if(wires.is_cut(WIRE_SHOCK)) to_chat(usr, text("Can't un-electrify the airlock - The electrification wire is cut.")) - else if(secondsElectrified==-1) - set_electrified(0) - else if(secondsElectrified>0) + else if(isElectrified()) set_electrified(0) if(8) @@ -871,33 +877,33 @@ var/list/airlock_overlays = list() //electrify door for 30 seconds if(wires.is_cut(WIRE_SHOCK)) to_chat(usr, text("The electrification wire has been cut.
\n")) - else if(src.secondsElectrified==-1) + else if(secondsElectrified==ELECTRIFIED_PERMANENT) to_chat(usr, text("The door is already indefinitely electrified. You'd have to un-electrify it before you can re-electrify it with a non-forever duration.
\n")) - else if(src.secondsElectrified!=0) + else if(isElectrified()) to_chat(usr, text("The door is already electrified. You can't re-electrify it while it's already electrified.
\n")) else shockedby += "\[[time_stamp()]\][usr](ckey:[usr.ckey])" add_logs(usr, src, "electrified") set_electrified(30) spawn(10) - while (src.secondsElectrified>0) - src.secondsElectrified-=1 - if(src.secondsElectrified<0) - set_electrified(0) - src.updateUsrDialog() + while (secondsElectrified > 0) + secondsElectrified-- + if(secondsElectrified <= 0) + set_electrified(NOT_ELECTRIFIED) + updateUsrDialog() sleep(10) if(6) //electrify door indefinitely if(wires.is_cut(WIRE_SHOCK)) to_chat(usr, text("The electrification wire has been cut.
\n")) - else if(src.secondsElectrified==-1) + else if(secondsElectrified==ELECTRIFIED_PERMANENT) to_chat(usr, text("The door is already indefinitely electrified.
\n")) - else if(src.secondsElectrified!=0) + else if(isElectrified()) to_chat(usr, text("The door is already electrified. You can't re-electrify it while it's already electrified.
\n")) else shockedby += text("\[[time_stamp()]\][usr](ckey:[usr.ckey])") add_logs(usr, src, "electrified") - set_electrified(-1) + set_electrified(ELECTRIFIED_PERMANENT) if (8) // Not in order >.> // Safeties! Maybe we do need some stinking safeties! @@ -1221,10 +1227,13 @@ var/list/airlock_overlays = list() return var/time_to_open = 5 - if(hasPower()) + if(hasPower() && !prying_so_hard) time_to_open = 50 playsound(src, 'sound/machines/airlock_alien_prying.ogg',100,1) //is it aliens or just the CE being a dick? - if(do_after(user, time_to_open,target = src)) + prying_so_hard = TRUE + var/result = do_after(user, time_to_open,target = src) + prying_so_hard = FALSE + if(result) open(2) if(density && !open(2)) to_chat(user, "Despite your attempts, the [src] refuses to open.") @@ -1274,7 +1283,7 @@ var/list/airlock_overlays = list() if(!density) return 1 - if(!ticker || !ticker.mode) + if(!SSticker || !SSticker.mode) return 0 operating = 1 update_icon(AIRLOCK_OPENING, 1) @@ -1465,7 +1474,7 @@ var/list/airlock_overlays = list() safe = FALSE //DOOR CRUSH close() bolt() //Bolt it! - set_electrified(-1) //Shock it! + set_electrified(ELECTRIFIED_PERMANENT) //Shock it! if(origin) shockedby += "\[[time_stamp()]\][origin](ckey:[origin.ckey])" @@ -1474,7 +1483,7 @@ var/list/airlock_overlays = list() // Must be powered and have working AI wire. if(canAIControl(src) && !stat) unbolt() - set_electrified(0) + set_electrified(NOT_ELECTRIFIED) open() safe = TRUE @@ -1546,3 +1555,26 @@ var/list/airlock_overlays = list() qdel(src) return TRUE return FALSE + +#undef AIRLOCK_CLOSED +#undef AIRLOCK_CLOSING +#undef AIRLOCK_OPEN +#undef AIRLOCK_OPENING +#undef AIRLOCK_DENY +#undef AIRLOCK_EMAG + +#undef AIRLOCK_SECURITY_NONE +#undef AIRLOCK_SECURITY_METAL +#undef AIRLOCK_SECURITY_PLASTEEL_I_S +#undef AIRLOCK_SECURITY_PLASTEEL_I +#undef AIRLOCK_SECURITY_PLASTEEL_O_S +#undef AIRLOCK_SECURITY_PLASTEEL_O +#undef AIRLOCK_SECURITY_PLASTEEL + +#undef AIRLOCK_INTEGRITY_N +#undef AIRLOCK_INTEGRITY_MULTIPLIER +#undef AIRLOCK_DAMAGE_DEFLECTION_N +#undef AIRLOCK_DAMAGE_DEFLECTION_R + +#undef NOT_ELECTRIFIED +#undef ELECTRIFIED_PERMANENT diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm index 9771c91763..705eafa381 100644 --- a/code/game/machinery/doors/airlock_electronics.dm +++ b/code/game/machinery/doors/airlock_electronics.dm @@ -1,12 +1,12 @@ /obj/item/weapon/electronics/airlock name = "airlock electronics" - req_access = list(access_maint_tunnels) + req_access = list(GLOB.access_maint_tunnels) var/list/accesses = list() var/one_access = 0 /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) + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.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, master_ui, state) diff --git a/code/game/machinery/doors/alarmlock.dm b/code/game/machinery/doors/alarmlock.dm index 74b3104099..e07596e4a1 100644 --- a/code/game/machinery/doors/alarmlock.dm +++ b/code/game/machinery/doors/alarmlock.dm @@ -24,7 +24,7 @@ /obj/machinery/door/airlock/alarmlock/Initialize() ..() SSradio.remove_object(src, air_frequency) - air_connection = SSradio.add_object(src, air_frequency, RADIO_TO_AIRALARM) + air_connection = SSradio.add_object(src, air_frequency, GLOB.RADIO_TO_AIRALARM) open() /obj/machinery/door/airlock/alarmlock/receive_signal(datum/signal/signal) diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index 124061e6fe..fae47406b8 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -23,7 +23,7 @@ icon = 'icons/obj/status_display.dmi' icon_state = "frame" desc = "A remote control for a door." - req_access = list(access_security) + req_access = list(GLOB.access_security) anchored = 1 density = 0 var/id = null // id of linked machinery/lockers @@ -112,8 +112,8 @@ return 0 if(!forced) - Radio.set_frequency(SEC_FREQ) - Radio.talk_into(src, "Timer has expired. Releasing prisoner.", SEC_FREQ) + Radio.set_frequency(GLOB.SEC_FREQ) + Radio.talk_into(src, "Timer has expired. Releasing prisoner.", GLOB.SEC_FREQ, get_default_language()) timing = FALSE activation_time = null @@ -147,7 +147,7 @@ timer_duration = new_time /obj/machinery/door_timer/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/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "brig_timer", name, 300, 200, master_ui, state) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index bcce65161b..a5af541d2d 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -40,7 +40,7 @@ layer = OPEN_DOOR_LAYER //Under all objects if opened. 2.7 due to tables being at 2.6 update_freelook_sight() air_update_turf(1) - airlocks += src + GLOB.airlocks += src spark_system = new /datum/effect_system/spark_spread spark_system.set_up(2, 1, src) @@ -50,7 +50,7 @@ density = 0 air_update_turf(1) update_freelook_sight() - airlocks -= src + GLOB.airlocks -= src if(spark_system) qdel(spark_system) spark_system = null @@ -229,7 +229,7 @@ return 1 if(operating) return - if(!ticker || !ticker.mode) + if(!SSticker || !SSticker.mode) return 0 operating = 1 do_animate("opening") @@ -314,8 +314,8 @@ return !(stat & NOPOWER) /obj/machinery/door/proc/update_freelook_sight() - if(!glass && cameranet) - cameranet.updateVisibility(src, 0) + if(!glass && GLOB.cameranet) + GLOB.cameranet.updateVisibility(src, 0) /obj/machinery/door/BlockSuperconductivity() // All non-glass airlocks block heat, this is intended. if(opacity || heat_proof) diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 3b64796b2e..d4eb99c613 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -4,9 +4,6 @@ #define CONSTRUCTION_GUTTED 3 //Wires are removed, circuit ready to remove #define CONSTRUCTION_NOCIRCUIT 4 //Circuit board removed, can safely weld apart -/var/const/OPEN = 1 -/var/const/CLOSED = 2 - /obj/machinery/door/firedoor name = "firelock" desc = "Apply crowbar." @@ -183,10 +180,10 @@ if(operating || stat & NOPOWER || !nextstate) return switch(nextstate) - if(OPEN) + if(FIREDOOR_OPEN) nextstate = null open() - if(CLOSED) + if(FIREDOOR_CLOSED) nextstate = null close() @@ -422,4 +419,4 @@ /obj/structure/firelock_frame/heavy name = "heavy firelock frame" - reinforced = 1 + reinforced = 1 \ No newline at end of file diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 2e48e34f71..20dd6860ea 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -70,7 +70,7 @@ else do_animate("deny") return - if (!( ticker )) + if (!( SSticker )) return var/mob/M = AM if(M.restrained() || ((isdrone(M) || iscyborg(M)) && M.stat)) @@ -129,7 +129,7 @@ /obj/machinery/door/window/open(forced=0) if (src.operating == 1) //doors can still open when emag-disabled return 0 - if(!ticker || !ticker.mode) + if(!SSticker || !SSticker.mode) return 0 if(!forced) if(!hasPower()) @@ -344,7 +344,7 @@ open() /obj/machinery/door/window/clockwork/ratvar_act() - if(ratvar_awakens) + if(GLOB.ratvar_awakens) obj_integrity = max_integrity /obj/machinery/door/window/clockwork/hasPower() diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm index 012d558135..48dc35da4b 100644 --- a/code/game/machinery/doppler_array.dm +++ b/code/game/machinery/doppler_array.dm @@ -1,4 +1,4 @@ -var/list/doppler_arrays = list() +GLOBAL_LIST_EMPTY(doppler_arrays) /obj/machinery/doppler_array name = "tachyon-doppler array" @@ -13,10 +13,10 @@ var/list/doppler_arrays = list() /obj/machinery/doppler_array/New() ..() - doppler_arrays += src + GLOB.doppler_arrays += src /obj/machinery/doppler_array/Destroy() - doppler_arrays -= src + GLOB.doppler_arrays -= src return ..() /obj/machinery/doppler_array/process() diff --git a/code/game/machinery/embedded_controller/access_controller.dm b/code/game/machinery/embedded_controller/access_controller.dm index b3f2c20893..bc8e5972f8 100644 --- a/code/game/machinery/embedded_controller/access_controller.dm +++ b/code/game/machinery/embedded_controller/access_controller.dm @@ -47,11 +47,11 @@ var/busy /obj/machinery/doorButtons/access_button/findObjsByTag() - for(var/obj/machinery/doorButtons/airlock_controller/A in machines) + for(var/obj/machinery/doorButtons/airlock_controller/A in GLOB.machines) if(A.idSelf == idSelf) controller = A break - for(var/obj/machinery/door/airlock/I in machines) + for(var/obj/machinery/door/airlock/I in GLOB.machines) if(I.id_tag == idDoor) door = I break @@ -120,7 +120,7 @@ exteriorAirlock = null /obj/machinery/doorButtons/airlock_controller/Destroy() - for(var/obj/machinery/doorButtons/access_button/A in machines) + for(var/obj/machinery/doorButtons/access_button/A in GLOB.machines) if(A.controller == src) A.controller = null return ..() @@ -241,7 +241,7 @@ update_icon() /obj/machinery/doorButtons/airlock_controller/findObjsByTag() - for(var/obj/machinery/door/airlock/A in machines) + for(var/obj/machinery/door/airlock/A in GLOB.machines) if(A.id_tag == idInterior) interiorAirlock = A else if(A.id_tag == idExterior) diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index 4bc16cccf6..97f09820d1 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -63,7 +63,7 @@ return if(src.z == ZLEVEL_STATION) - add_overlay("overlay_[security_level]") + add_overlay("overlay_[GLOB.security_level]") else //var/green = SEC_LEVEL_GREEN add_overlay("overlay_[SEC_LEVEL_GREEN]") @@ -111,7 +111,7 @@ addtimer(CALLBACK(src, .proc/reset), time) /obj/machinery/firealarm/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/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "firealarm", name, 300, 150, master_ui, state) diff --git a/code/game/machinery/gulag_item_reclaimer.dm b/code/game/machinery/gulag_item_reclaimer.dm index 826d707f0a..61d1588372 100644 --- a/code/game/machinery/gulag_item_reclaimer.dm +++ b/code/game/machinery/gulag_item_reclaimer.dm @@ -3,7 +3,7 @@ desc = "Used to reclaim your items after you finish your sentence at the labor camp" icon = 'icons/obj/terminals.dmi' icon_state = "dorm_taken" - req_access = list(access_security) //reqaccess to access all stored items + req_access = list(GLOB.access_security) //reqaccess to access all stored items density = 0 anchored = 1 use_power = 1 @@ -43,7 +43,7 @@ return ..() /obj/machinery/gulag_item_reclaimer/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/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "gulag_item_reclaimer", name, 455, 440, master_ui, state) diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 883da04cf6..f28e6cdbdb 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -29,9 +29,7 @@ Possible to do for anyone motivated enough: #define RANGE_BASED 4 #define AREA_BASED 6 -var/const/HOLOPAD_MODE = RANGE_BASED - -var/list/holopads = list() +#define HOLOPAD_MODE RANGE_BASED /obj/machinery/holopad name = "\improper AI holopad" @@ -39,8 +37,6 @@ var/list/holopads = list() icon_state = "holopad0" layer = LOW_OBJ_LAYER flags = HEAR - languages_spoken = ROBOT | HUMAN - languages_understood = ROBOT | HUMAN anchored = 1 use_power = 1 idle_power_usage = 5 @@ -52,6 +48,7 @@ var/list/holopads = list() var/last_request = 0 //to prevent request spam. ~Carn var/holo_range = 5 // Change to change how far the AI can move away from the holopad before deactivating. var/temp = "" + var/static/list/holopads = list() /obj/machinery/holopad/New() ..() @@ -123,7 +120,7 @@ var/list/holopads = list() temp = "You requested an AI's presence.
" temp += "Main Menu" var/area/area = get_area(src) - for(var/mob/living/silicon/ai/AI in living_mob_list) + for(var/mob/living/silicon/ai/AI in GLOB.living_mob_list) if(!AI.client) continue to_chat(AI, "Your presence is requested at \the [area].") @@ -189,11 +186,11 @@ var/list/holopads = list() /*This is the proc for special two-way communication between AI and holopad/people talking near holopad. For the other part of the code, check silicon say.dm. Particularly robot talk.*/ -/obj/machinery/holopad/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans) +/obj/machinery/holopad/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode) if(speaker && masters.len && !radio_freq)//Master is mostly a safety in case lag hits or something. Radio_freq so AIs dont hear holopad stuff through radios. for(var/mob/living/silicon/ai/master in masters) if(masters[master] && speaker != master) - master.relay_speech(message, speaker, message_langs, raw_message, radio_freq, spans) + master.relay_speech(message, speaker, message_language, raw_message, radio_freq, spans, message_mode) /obj/machinery/holopad/proc/create_holo(mob/living/silicon/ai/A, turf/T = loc) var/obj/effect/overlay/holo_pad_hologram/h = new(T)//Spawn a blank effect at the location. diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index eb3ee75e31..e4e1f7e75d 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -7,11 +7,14 @@ var/mob/living/carbon/attached = null var/mode = 1 // 1 is injecting, 0 is taking blood. var/obj/item/weapon/reagent_containers/beaker = null + var/list/drip_containers = list(/obj/item/weapon/reagent_containers/blood, + /obj/item/weapon/reagent_containers/food, + /obj/item/weapon/reagent_containers/glass) - -/obj/machinery/iv_drip/New() +/obj/machinery/iv_drip/Initialize() ..() update_icon() + drip_containers = typecacheof(drip_containers) /obj/machinery/iv_drip/update_icon() if(attached) @@ -73,14 +76,14 @@ if(beaker) usr.visible_message("[usr] attaches \the [src] to \the [target].", "You attach \the [src] to \the [target].") attached = target - START_PROCESSING(SSmachine, src) + START_PROCESSING(SSmachines, src) update_icon() else to_chat(usr, "There's nothing attached to the IV drip!") /obj/machinery/iv_drip/attackby(obj/item/weapon/W, mob/user, params) - if (istype(W, /obj/item/weapon/reagent_containers)) + if (is_type_in_typecache(W, drip_containers)) if(!isnull(beaker)) to_chat(user, "There is already a reagent container loaded!") return diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index b69d728617..137a492b3a 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -128,17 +128,17 @@ Class Procs: if (!armor) armor = list(melee = 25, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 70) ..() - machines += src + GLOB.machines += src if(!speed_process) - START_PROCESSING(SSmachine, src) + START_PROCESSING(SSmachines, src) else START_PROCESSING(SSfastprocess, src) power_change() /obj/machinery/Destroy() - machines.Remove(src) + GLOB.machines.Remove(src) if(!speed_process) - STOP_PROCESSING(SSmachine, src) + STOP_PROCESSING(SSmachines, src) else STOP_PROCESSING(SSfastprocess, src) dropContents() diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm index 84de028966..26e62c365e 100644 --- a/code/game/machinery/magnet.dm +++ b/code/game/machinery/magnet.dm @@ -37,7 +37,7 @@ spawn(10) // must wait for map loading to finish if(SSradio) - SSradio.add_object(src, freq, RADIO_MAGNETS) + SSradio.add_object(src, freq, GLOB.RADIO_MAGNETS) spawn() magnetic_process() @@ -233,14 +233,14 @@ ..() if(autolink) - for(var/obj/machinery/magnetic_module/M in machines) + for(var/obj/machinery/magnetic_module/M in GLOB.machines) if(M.freq == frequency && M.code == code) magnets.Add(M) spawn(45) // must wait for map loading to finish if(SSradio) - radio_connection = SSradio.add_object(src, frequency, RADIO_MAGNETS) + radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_MAGNETS) if(path) // check for default path @@ -255,7 +255,7 @@ /obj/machinery/magnetic_controller/process() if(magnets.len == 0 && autolink) - for(var/obj/machinery/magnetic_module/M in machines) + for(var/obj/machinery/magnetic_module/M in GLOB.machines) if(M.freq == frequency && M.code == code) magnets.Add(M) @@ -323,7 +323,7 @@ // Broadcast the signal - radio_connection.post_signal(src, signal, filter = RADIO_MAGNETS) + radio_connection.post_signal(src, signal, filter = GLOB.RADIO_MAGNETS) spawn(1) updateUsrDialog() // pretty sure this increases responsiveness @@ -390,7 +390,7 @@ // Broadcast the signal spawn() - radio_connection.post_signal(src, signal, filter = RADIO_MAGNETS) + radio_connection.post_signal(src, signal, filter = GLOB.RADIO_MAGNETS) if(speed == 10) sleep(1) diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index 6c9f3e8523..862175ab6a 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -21,7 +21,7 @@ var/list/codes // assoc. list of transponder codes var/codes_txt = "" // codes as set on map: "tag1;tag2" or "tag1=value;tag2=value" - req_access = list(access_engine, access_robotics) + req_access = list(GLOB.access_engine, GLOB.access_robotics) /obj/machinery/navbeacon/New() ..() @@ -31,16 +31,16 @@ var/turf/T = loc hide(T.intact) if(codes["patrol"]) - if(!navbeacons["[z]"]) - navbeacons["[z]"] = list() - navbeacons["[z]"] += src //Register with the patrol list! + if(!GLOB.navbeacons["[z]"]) + GLOB.navbeacons["[z]"] = list() + GLOB.navbeacons["[z]"] += src //Register with the patrol list! if(codes["delivery"]) - deliverybeacons += src - deliverybeacontags += location + GLOB.deliverybeacons += src + GLOB.deliverybeacontags += location /obj/machinery/navbeacon/Destroy() - navbeacons["[z]"] -= src //Remove from beacon list, if in one. - deliverybeacons -= src + GLOB.navbeacons["[z]"] -= src //Remove from beacon list, if in one. + GLOB.deliverybeacons -= src return ..() // set the transponder codes assoc list from codes_txt diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 1fbbfbb41b..a50a2973fc 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -1,5 +1,5 @@ -var/datum/newscaster/feed_network/news_network = new /datum/newscaster/feed_network -var/list/obj/machinery/newscaster/allCasters = list() +GLOBAL_DATUM_INIT(news_network, /datum/newscaster/feed_network, new) +GLOBAL_LIST_EMPTY(allCasters) /datum/newscaster @@ -26,7 +26,7 @@ var/list/obj/machinery/newscaster/allCasters = list() /datum/newscaster/feed_message/proc/returnAuthor(censor) if(censor == -1) censor = authorCensor - var/txt = "[news_network.redactedText]" + var/txt = "[GLOB.news_network.redactedText]" if(!censor) txt = author return txt @@ -34,26 +34,26 @@ var/list/obj/machinery/newscaster/allCasters = list() /datum/newscaster/feed_message/proc/returnBody(censor) if(censor == -1) censor = bodyCensor - var/txt = "[news_network.redactedText]" + var/txt = "[GLOB.news_network.redactedText]" if(!censor) txt = body return txt /datum/newscaster/feed_message/proc/toggleCensorAuthor() if(authorCensor) - authorCensorTime.Add(news_network.lastAction*-1) + authorCensorTime.Add(GLOB.news_network.lastAction*-1) else - authorCensorTime.Add(news_network.lastAction) + authorCensorTime.Add(GLOB.news_network.lastAction) authorCensor = !authorCensor - news_network.lastAction ++ + GLOB.news_network.lastAction ++ /datum/newscaster/feed_message/proc/toggleCensorBody() if(bodyCensor) - bodyCensorTime.Add(news_network.lastAction*-1) + bodyCensorTime.Add(GLOB.news_network.lastAction*-1) else - bodyCensorTime.Add(news_network.lastAction) + bodyCensorTime.Add(GLOB.news_network.lastAction) bodyCensor = !bodyCensor - news_network.lastAction ++ + GLOB.news_network.lastAction ++ /datum/newscaster/feed_channel var/channel_name = "" @@ -69,26 +69,26 @@ var/list/obj/machinery/newscaster/allCasters = list() /datum/newscaster/feed_channel/proc/returnAuthor(censor) if(censor == -1) censor = authorCensor - var/txt = "[news_network.redactedText]" + var/txt = "[GLOB.news_network.redactedText]" if(!censor) txt = author return txt /datum/newscaster/feed_channel/proc/toggleCensorDclass() if(censored) - DclassCensorTime.Add(news_network.lastAction*-1) + DclassCensorTime.Add(GLOB.news_network.lastAction*-1) else - DclassCensorTime.Add(news_network.lastAction) + DclassCensorTime.Add(GLOB.news_network.lastAction) censored = !censored - news_network.lastAction ++ + GLOB.news_network.lastAction ++ /datum/newscaster/feed_channel/proc/toggleCensorAuthor() if(authorCensor) - authorCensorTime.Add(news_network.lastAction*-1) + authorCensorTime.Add(GLOB.news_network.lastAction*-1) else - authorCensorTime.Add(news_network.lastAction) + authorCensorTime.Add(GLOB.news_network.lastAction) authorCensor = !authorCensor - news_network.lastAction ++ + GLOB.news_network.lastAction ++ /datum/newscaster/wanted_message var/active @@ -130,7 +130,7 @@ var/list/obj/machinery/newscaster/allCasters = list() if(FC.channel_name == channel_name) FC.messages += newMsg break - for(var/obj/machinery/newscaster/NEWSCASTER in allCasters) + for(var/obj/machinery/newscaster/NEWSCASTER in GLOB.allCasters) NEWSCASTER.newsAlert(channel_name) lastAction ++ newMsg.creationTime = lastAction @@ -144,7 +144,7 @@ var/list/obj/machinery/newscaster/allCasters = list() if(photo) wanted_issue.img = photo.img if(newMessage) - for(var/obj/machinery/newscaster/N in allCasters) + for(var/obj/machinery/newscaster/N in GLOB.allCasters) N.newsAlert() N.update_icon() @@ -154,7 +154,7 @@ var/list/obj/machinery/newscaster/allCasters = list() wanted_issue.body = null wanted_issue.scannedUser = null wanted_issue.img = null - for(var/obj/machinery/newscaster/NEWSCASTER in allCasters) + for(var/obj/machinery/newscaster/NEWSCASTER in GLOB.allCasters) NEWSCASTER.update_icon() @@ -205,13 +205,13 @@ var/list/obj/machinery/newscaster/allCasters = list() pixel_x = (dir & 3)? 0 : (dir == 4 ? -32 : 32) pixel_y = (dir & 3)? (dir ==1 ? -32 : 32) : 0 - allCasters += src - for(var/obj/machinery/newscaster/NEWSCASTER in allCasters) + GLOB.allCasters += src + for(var/obj/machinery/newscaster/NEWSCASTER in GLOB.allCasters) unit_no++ update_icon() /obj/machinery/newscaster/Destroy() - allCasters -= src + GLOB.allCasters -= src viewing_channel = null photo = null return ..() @@ -221,7 +221,7 @@ var/list/obj/machinery/newscaster/allCasters = list() if(stat & (NOPOWER|BROKEN)) icon_state = "newscaster_off" else - if(news_network.wanted_issue.active) + if(GLOB.news_network.wanted_issue.active) icon_state = "newscaster_wanted" else icon_state = "newscaster_normal" @@ -268,7 +268,7 @@ var/list/obj/machinery/newscaster/allCasters = list() if(0) dat += "Welcome to Newscasting Unit #[unit_no].
Interface & News networks Operational." dat += "
Property of Nanotrasen Inc" - if(news_network.wanted_issue.active) + if(GLOB.news_network.wanted_issue.active) dat+= "
Read Wanted Issue" dat+= "

Create Feed Channel" dat+= "
View Feed Channels" @@ -278,7 +278,7 @@ var/list/obj/machinery/newscaster/allCasters = list() dat+= "

Exit" if(securityCaster) var/wanted_already = 0 - if(news_network.wanted_issue.active) + if(GLOB.news_network.wanted_issue.active) wanted_already = 1 dat+="
Feed Security functions:
" dat+="
[(wanted_already) ? ("Manage") : ("Publish")] \"Wanted\" Issue" @@ -287,10 +287,10 @@ var/list/obj/machinery/newscaster/allCasters = list() dat+="

The newscaster recognises you as: [scanned_user]" if(1) dat+= "Station Feed Channels
" - if( isemptylist(news_network.network_channels) ) + if( isemptylist(GLOB.news_network.network_channels) ) dat+="No active channels found..." else - for(var/datum/newscaster/feed_channel/CHANNEL in news_network.network_channels) + for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels) if(CHANNEL.is_admin_channel) dat+="[CHANNEL.channel_name]
" else @@ -329,9 +329,9 @@ var/list/obj/machinery/newscaster/allCasters = list() if(7) dat+="ERROR: Could not submit Feed Channel to Network.

" var/list/existing_authors = list() - for(var/datum/newscaster/feed_channel/FC in news_network.network_channels) + for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels) if(FC.authorCensor) - existing_authors += news_network.redactedText + existing_authors += GLOB.news_network.redactedText else existing_authors += FC.author if(scanned_user in existing_authors) @@ -339,7 +339,7 @@ var/list/obj/machinery/newscaster/allCasters = list() if(channel_name=="" || channel_name == "\[REDACTED\]") dat+="Invalid channel name.
" var/check = 0 - for(var/datum/newscaster/feed_channel/FC in news_network.network_channels) + for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels) if(FC.channel_name == channel_name) check = 1 break @@ -349,10 +349,10 @@ var/list/obj/machinery/newscaster/allCasters = list() dat+="Channel author unverified.
" dat+="
Return
" if(8) - var/total_num=length(news_network.network_channels) + var/total_num=length(GLOB.news_network.network_channels) var/active_num=total_num var/message_num=0 - for(var/datum/newscaster/feed_channel/FC in news_network.network_channels) + for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels) if(!FC.censored) message_num += length(FC.messages) else @@ -395,10 +395,10 @@ var/list/obj/machinery/newscaster/allCasters = list() dat+="NOTE: Due to the nature of news Feeds, total deletion of a Feed Story is not possible.
" dat+="Keep in mind that users attempting to view a censored feed will instead see the \[REDACTED\] tag above it.
" dat+="
Select Feed channel to get Stories from:
" - if(isemptylist(news_network.network_channels)) + if(isemptylist(GLOB.news_network.network_channels)) dat+="No feed channels found active...
" else - for(var/datum/newscaster/feed_channel/CHANNEL in news_network.network_channels) + for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels) dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
" dat+="
Cancel" if(11) @@ -406,10 +406,10 @@ var/list/obj/machinery/newscaster/allCasters = list() dat+="A D-Notice is to be bestowed upon the channel if the handling Authority deems it as harmful for the station's" dat+="morale, integrity or disciplinary behaviour. A D-Notice will render a channel unable to be updated by anyone, without deleting any feed" dat+="stories it might contain at the time. You can lift a D-Notice if you have the required access at any time.
" - if(isemptylist(news_network.network_channels)) + if(isemptylist(GLOB.news_network.network_channels)) dat+="No feed channels found active...
" else - for(var/datum/newscaster/feed_channel/CHANNEL in news_network.network_channels) + for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels) dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
" dat+="
Back" if(12) @@ -442,7 +442,7 @@ var/list/obj/machinery/newscaster/allCasters = list() dat+="Wanted Issue Handler:" var/wanted_already = 0 var/end_param = 1 - if(news_network.wanted_issue.active) + if(GLOB.news_network.wanted_issue.active) wanted_already = 1 end_param = 2 if(wanted_already) @@ -452,7 +452,7 @@ var/list/obj/machinery/newscaster/allCasters = list() dat+="Description: [msg]
" dat+="Attach Photo: [(photo ? "Photo Attached" : "No Photo")]
" if(wanted_already) - dat+="Wanted Issue created by:[news_network.wanted_issue.scannedUser]
" + dat+="Wanted Issue created by:[GLOB.news_network.wanted_issue.scannedUser]
" else dat+="Wanted Issue will be created under prosecutor:[scanned_user]
" dat+="
[(wanted_already) ? ("Edit Issue") : ("Submit")]" @@ -475,13 +475,13 @@ var/list/obj/machinery/newscaster/allCasters = list() dat+="Wanted Issue successfully deleted from Circulation
" dat+="
Return
" if(18) - if(news_network.wanted_issue.active) - dat+="-- STATIONWIDE WANTED ISSUE --
\[Submitted by: [news_network.wanted_issue.scannedUser]\]
" - dat+="Criminal: [news_network.wanted_issue.criminal]
" - dat+="Description: [news_network.wanted_issue.body]
" + if(GLOB.news_network.wanted_issue.active) + dat+="-- STATIONWIDE WANTED ISSUE --
\[Submitted by: [GLOB.news_network.wanted_issue.scannedUser]\]
" + dat+="Criminal: [GLOB.news_network.wanted_issue.criminal]
" + dat+="Description: [GLOB.news_network.wanted_issue.body]
" dat+="Photo:: " - if(news_network.wanted_issue.img) - usr << browse_rsc(news_network.wanted_issue.img, "tmp_photow.png") + if(GLOB.news_network.wanted_issue.img) + usr << browse_rsc(GLOB.news_network.wanted_issue.img, "tmp_photow.png") dat+="
" else dat+="None" @@ -518,13 +518,13 @@ var/list/obj/machinery/newscaster/allCasters = list() updateUsrDialog() else if(href_list["submit_new_channel"]) var/list/existing_authors = list() - for(var/datum/newscaster/feed_channel/FC in news_network.network_channels) + for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels) if(FC.authorCensor) - existing_authors += news_network.redactedText + existing_authors += GLOB.news_network.redactedText else existing_authors += FC.author var/check = 0 - for(var/datum/newscaster/feed_channel/FC in news_network.network_channels) + for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels) if(FC.channel_name == channel_name) check = 1 break @@ -534,13 +534,13 @@ var/list/obj/machinery/newscaster/allCasters = list() var/choice = alert("Please confirm Feed channel creation","Network Channel Handler","Confirm","Cancel") if(choice=="Confirm") scan_user(usr) - news_network.CreateFeedChannel(channel_name, scanned_user, c_locked) + GLOB.news_network.CreateFeedChannel(channel_name, scanned_user, c_locked) feedback_inc("newscaster_channels",1) screen=5 updateUsrDialog() else if(href_list["set_channel_receiving"]) var/list/available_channels = list() - for(var/datum/newscaster/feed_channel/F in news_network.network_channels) + for(var/datum/newscaster/feed_channel/F in GLOB.news_network.network_channels) if( (!F.locked || F.author == scanned_user) && !F.censored) available_channels += F.channel_name channel_name = input(usr, "Choose receiving Feed Channel", "Network Channel Handler") in available_channels @@ -557,7 +557,7 @@ var/list/obj/machinery/newscaster/allCasters = list() if(msg =="" || msg=="\[REDACTED\]" || scanned_user == "Unknown" || channel_name == "" ) screen=6 else - news_network.SubmitArticle("[parsepencode(msg, usr, SIGNFONT)]", scanned_user, channel_name, photo, 0, allow_comments) + GLOB.news_network.SubmitArticle("[parsepencode(msg, usr, SIGNFONT)]", scanned_user, channel_name, photo, 0, allow_comments) feedback_inc("newscaster_stories",1) screen=4 msg = "" @@ -586,11 +586,11 @@ var/list/obj/machinery/newscaster/allCasters = list() updateUsrDialog() else if(href_list["menu_wanted"]) var/already_wanted = 0 - if(news_network.wanted_issue.active) + if(GLOB.news_network.wanted_issue.active) already_wanted = 1 if(already_wanted) - channel_name = news_network.wanted_issue.criminal - msg = news_network.wanted_issue.body + channel_name = GLOB.news_network.wanted_issue.criminal + msg = GLOB.news_network.wanted_issue.body screen = 14 updateUsrDialog() else if(href_list["set_wanted_name"]) @@ -608,22 +608,22 @@ var/list/obj/machinery/newscaster/allCasters = list() if(choice=="Confirm") scan_user(usr) if(input_param==1) //If input_param == 1 we're submitting a new wanted issue. At 2 we're just editing an existing one. - news_network.submitWanted(channel_name, msg, scanned_user, photo, 0 , 1) + GLOB.news_network.submitWanted(channel_name, msg, scanned_user, photo, 0 , 1) screen = 15 else - if(news_network.wanted_issue.isAdminMsg) + if(GLOB.news_network.wanted_issue.isAdminMsg) alert("The wanted issue has been distributed by a Nanotrasen higherup. You cannot edit it.","Ok") return - news_network.submitWanted(channel_name, msg, scanned_user, photo) + GLOB.news_network.submitWanted(channel_name, msg, scanned_user, photo) screen = 19 updateUsrDialog() else if(href_list["cancel_wanted"]) - if(news_network.wanted_issue.isAdminMsg) + if(GLOB.news_network.wanted_issue.isAdminMsg) alert("The wanted issue has been distributed by a Nanotrasen higherup. You cannot take it down.","Ok") return var/choice = alert("Please confirm Wanted Issue removal","Network Security Handler","Confirm","Cancel") if(choice=="Confirm") - news_network.deleteWanted() + GLOB.news_network.deleteWanted() screen=17 updateUsrDialog() else if(href_list["view_wanted"]) @@ -852,16 +852,16 @@ var/list/obj/machinery/newscaster/allCasters = list() /obj/machinery/newscaster/proc/print_paper() feedback_inc("newscaster_newspapers_printed",1) var/obj/item/weapon/newspaper/NEWSPAPER = new /obj/item/weapon/newspaper - for(var/datum/newscaster/feed_channel/FC in news_network.network_channels) + for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels) NEWSPAPER.news_content += FC - if(news_network.wanted_issue.active) - NEWSPAPER.wantedAuthor = news_network.wanted_issue.scannedUser - NEWSPAPER.wantedCriminal = news_network.wanted_issue.criminal - NEWSPAPER.wantedBody = news_network.wanted_issue.body - if(news_network.wanted_issue.img) - NEWSPAPER.wantedPhoto = news_network.wanted_issue.img + if(GLOB.news_network.wanted_issue.active) + NEWSPAPER.wantedAuthor = GLOB.news_network.wanted_issue.scannedUser + NEWSPAPER.wantedCriminal = GLOB.news_network.wanted_issue.criminal + NEWSPAPER.wantedBody = GLOB.news_network.wanted_issue.body + if(GLOB.news_network.wanted_issue.img) + NEWSPAPER.wantedPhoto = GLOB.news_network.wanted_issue.img NEWSPAPER.loc = get_turf(src) - NEWSPAPER.creationTime = news_network.lastAction + NEWSPAPER.creationTime = GLOB.news_network.lastAction paper_remaining-- /obj/machinery/newscaster/proc/newsAlert(channel) diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index ff6836dfae..bcc056c654 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -22,7 +22,7 @@ Buildable meters var/flipped = 0 var/is_bent = 0 - var/global/list/pipe_types = list( + var/static/list/pipe_types = list( PIPE_SIMPLE, \ PIPE_MANIFOLD, \ PIPE_4WAYMANIFOLD, \ @@ -73,7 +73,7 @@ Buildable meters src.pipe_type = pipe_type src.setDir(dir) - if(src.dir in diagonals) + if(src.dir in GLOB.diagonals) is_bent = 1 update() @@ -81,7 +81,7 @@ Buildable meters src.pixel_y = rand(-5, 5) //update the name and icon of the pipe item depending on the type -var/global/list/pipeID2State = list( +GLOBAL_LIST_INIT(pipeID2State, list( "[PIPE_SIMPLE]" = "simple", \ "[PIPE_MANIFOLD]" = "manifold", \ "[PIPE_4WAYMANIFOLD]" = "manifold4w", \ @@ -103,7 +103,7 @@ var/global/list/pipeID2State = list( \ "[PIPE_GAS_FILTER]" = "filter", \ "[PIPE_GAS_MIXER]" = "mixer", \ -) +)) /obj/item/pipe/proc/update() var/list/nlist = list(\ @@ -133,7 +133,7 @@ var/global/list/pipeID2State = list( ) //fix_pipe_type() name = nlist["[pipe_type][is_bent ? "_b" : ""]"] + " fitting" - icon_state = pipeID2State["[pipe_type]"] + icon_state = GLOB.pipeID2State["[pipe_type]"] // rotate the pipe item clockwise @@ -186,7 +186,7 @@ var/global/list/pipeID2State = list( setDir(old_dir )//pipes changing direction when moved is just annoying and buggy /obj/item/pipe/proc/unflip(direction) - if(direction in diagonals) + if(direction in GLOB.diagonals) return turn(direction, 45) return direction diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index 53e3d43dd3..d689b076fa 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -12,7 +12,7 @@ use_power = 1 //this turret uses and requires power idle_power_usage = 50 //when inactive, this turret takes up constant 50 Equipment power active_power_usage = 300 //when active, this turret takes up constant 300 Equipment power - req_access = list(access_security) + req_access = list(GLOB.access_security) power_channel = EQUIP //drains power from the EQUIPMENT channel var/base_icon_state = "standard" @@ -311,9 +311,11 @@ if(prob(30)) spark_system.start() if(on && !attacked && !emagged) - attacked = 1 - spawn(60) - attacked = 0 + attacked = TRUE + addtimer(CALLBACK(src, .proc/reset_attacked), 60) + +/obj/machinery/porta_turret/proc/reset_attacked() + attacked = FALSE /obj/machinery/porta_turret/deconstruct(disassembled = TRUE) qdel(src) @@ -465,7 +467,7 @@ if(check_records) //if the turret can check the records, check if they are set to *Arrest* on records var/perpname = perp.get_face_name(perp.get_id_name()) - var/datum/data/record/R = find_record("name", perpname, data_core.security) + var/datum/data/record/R = find_record("name", perpname, GLOB.data_core.security) if(!R || (R.fields["criminal"] == "*Arrest*")) threatcount += 4 @@ -632,7 +634,7 @@ var/locked = 1 var/control_area = null //can be area name, path or nothing. var/ailock = 0 // AI cannot use this - req_access = list(access_ai_upload) + req_access = list(GLOB.access_ai_upload) var/list/obj/machinery/porta_turret/turrets = list() resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF @@ -654,7 +656,7 @@ if(!mapload) return if(control_area && istext(control_area)) - for(var/V in sortedAreas) + for(var/V in GLOB.sortedAreas) var/area/A = V if(A.name == control_area) control_area = A @@ -843,7 +845,7 @@ . = ..() /obj/machinery/porta_turret/lasertag - req_access = list(access_maint_tunnels, access_theatre) + req_access = list(GLOB.access_maint_tunnels, GLOB.access_theatre) check_records = 0 criminals = 0 auth_weapons = 1 @@ -911,4 +913,4 @@ if(istype(P, /obj/item/projectile/beam/lasertag/bluetag)) on = 0 spawn(100) - on = 1 \ No newline at end of file + on = 1 diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index e1b0131c1b..4d8af0543a 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -7,7 +7,7 @@ use_power = 1 idle_power_usage = 5 active_power_usage = 1000 - req_access = list(access_robotics) + req_access = list(GLOB.access_robotics) var/recharge_speed var/repairs state_open = 1 diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index 8a8514e457..57e6ee3f09 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -1,4 +1,4 @@ -var/const/SAFETY_COOLDOWN = 100 +#define SAFETY_COOLDOWN 100 /obj/machinery/recycler name = "recycler" @@ -12,7 +12,7 @@ var/const/SAFETY_COOLDOWN = 100 var/icon_name = "grinder-o" var/blood = 0 var/eat_dir = WEST - var/amount_produced = 1 + var/amount_produced = 50 var/datum/material_container/materials var/crush_damage = 1000 var/eat_victim_items = TRUE @@ -40,9 +40,9 @@ var/const/SAFETY_COOLDOWN = 100 mat_mod = 2 * B.rating mat_mod *= 50000 for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) - amt_made = 25 * M.rating //% of materials salvaged + amt_made = 12.5 * M.rating //% of materials salvaged materials.max_amount = mat_mod - amount_produced = min(100, amt_made) + amount_produced = min(50, amt_made) + 50 /obj/machinery/recycler/examine(mob/user) ..() @@ -109,9 +109,12 @@ var/const/SAFETY_COOLDOWN = 100 eat(AM) /obj/machinery/recycler/proc/eat(atom/AM0, sound=TRUE) - var/list/to_eat = list(AM0) + var/list/to_eat if(istype(AM0, /obj/item)) - to_eat += AM0.GetAllContents() + to_eat = AM0.GetAllContents() + else + to_eat = list(AM0) + var/items_recycled = 0 for(var/i in to_eat) @@ -204,3 +207,5 @@ var/const/SAFETY_COOLDOWN = 100 /obj/item/weapon/paper/recycler name = "paper - 'garbage duty instructions'" info = "

New Assignment

You have been assigned to collect garbage from trash bins, located around the station. The crewmembers will put their trash into it and you will collect the said trash.

There is a recycling machine near your closet, inside maintenance; use it to recycle the trash for a small chance to get useful minerals. Then deliver these minerals to cargo or engineering. You are our last hope for a clean station, do not screw this up!" + +#undef SAFETY_COOLDOWN \ No newline at end of file diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 6f014a52b7..648b44932a 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -1,10 +1,10 @@ /******************** Requests Console ********************/ /** Originally written by errorage, updated by: Carn, needs more work though. I just added some security fixes */ -var/req_console_assistance = list() -var/req_console_supplies = list() -var/req_console_information = list() -var/list/obj/machinery/requests_console/allConsoles = list() +GLOBAL_LIST_EMPTY(req_console_assistance) +GLOBAL_LIST_EMPTY(req_console_supplies) +GLOBAL_LIST_EMPTY(req_console_information) +GLOBAL_LIST_EMPTY(allConsoles) /obj/machinery/requests_console name = "requests console" @@ -91,46 +91,46 @@ var/list/obj/machinery/requests_console/allConsoles = list() /obj/machinery/requests_console/Initialize() ..() name = "\improper [department] requests console" - allConsoles += src + GLOB.allConsoles += src switch(departmentType) if(1) - if(!("[department]" in req_console_assistance)) - req_console_assistance += department + if(!("[department]" in GLOB.req_console_assistance)) + GLOB.req_console_assistance += department if(2) - if(!("[department]" in req_console_supplies)) - req_console_supplies += department + if(!("[department]" in GLOB.req_console_supplies)) + GLOB.req_console_supplies += department if(3) - if(!("[department]" in req_console_information)) - req_console_information += department + if(!("[department]" in GLOB.req_console_information)) + GLOB.req_console_information += department if(4) - if(!("[department]" in req_console_assistance)) - req_console_assistance += department - if(!("[department]" in req_console_supplies)) - req_console_supplies += department + if(!("[department]" in GLOB.req_console_assistance)) + GLOB.req_console_assistance += department + if(!("[department]" in GLOB.req_console_supplies)) + GLOB.req_console_supplies += department if(5) - if(!("[department]" in req_console_assistance)) - req_console_assistance += department - if(!("[department]" in req_console_information)) - req_console_information += department + if(!("[department]" in GLOB.req_console_assistance)) + GLOB.req_console_assistance += department + if(!("[department]" in GLOB.req_console_information)) + GLOB.req_console_information += department if(6) - if(!("[department]" in req_console_supplies)) - req_console_supplies += department - if(!("[department]" in req_console_information)) - req_console_information += department + if(!("[department]" in GLOB.req_console_supplies)) + GLOB.req_console_supplies += department + if(!("[department]" in GLOB.req_console_information)) + GLOB.req_console_information += department if(7) - if(!("[department]" in req_console_assistance)) - req_console_assistance += department - if(!("[department]" in req_console_supplies)) - req_console_supplies += department - if(!("[department]" in req_console_information)) - req_console_information += department + if(!("[department]" in GLOB.req_console_assistance)) + GLOB.req_console_assistance += department + if(!("[department]" in GLOB.req_console_supplies)) + GLOB.req_console_supplies += department + if(!("[department]" in GLOB.req_console_information)) + GLOB.req_console_information += department Radio = new /obj/item/device/radio(src) Radio.listening = 0 /obj/machinery/requests_console/Destroy() QDEL_NULL(Radio) - allConsoles -= src + GLOB.allConsoles -= src return ..() /obj/machinery/requests_console/attack_hand(mob/user) @@ -142,7 +142,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() if(1) //req. assistance dat += "Which department do you need assistance from?

" dat += "" - for(var/dpt in req_console_assistance) + for(var/dpt in GLOB.req_console_assistance) if (dpt != department) dat += "" dat += "" @@ -157,7 +157,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() if(2) //req. supplies dat += "Which department do you need supplies from?

" dat += "
[dpt]
" - for(var/dpt in req_console_supplies) + for(var/dpt in GLOB.req_console_supplies) if (dpt != department) dat += "" dat += "" @@ -172,7 +172,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() if(3) //relay information dat += "Which department would you like to send information to?

" dat += "
[dpt]
" - for(var/dpt in req_console_information) + for(var/dpt in GLOB.req_console_information) if (dpt != department) dat += "" dat += "" @@ -193,7 +193,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() dat += "Continue
" if(8) //view messages - for (var/obj/machinery/requests_console/Console in allConsoles) + for (var/obj/machinery/requests_console/Console in GLOB.allConsoles) if (Console.department == department) Console.newmessagepriority = 0 Console.update_icon() @@ -304,7 +304,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() if(!announcementConsole) return minor_announce(message, "[department] Announcement:") - news_network.SubmitArticle(message, department, "Station Announcements", null) + GLOB.news_network.SubmitArticle(message, department, "Station Announcements", null) log_say("[key_name(usr)] has made a station announcement: [message]") message_admins("[key_name_admin(usr)] has made a station announcement.") announceAuth = 0 @@ -316,21 +316,19 @@ var/list/obj/machinery/requests_console/allConsoles = list() var/radio_freq switch(text2num(href_list["emergency"])) if(1) //Security - radio_freq = SEC_FREQ + radio_freq = GLOB.SEC_FREQ emergency = "Security" if(2) //Engineering - radio_freq = ENG_FREQ + radio_freq = GLOB.ENG_FREQ emergency = "Engineering" if(3) //Medical - radio_freq = MED_FREQ + radio_freq = GLOB.MED_FREQ emergency = "Medical" if(radio_freq) Radio.set_frequency(radio_freq) - Radio.talk_into(src,"[emergency] emergency in [department]!!",radio_freq) + Radio.talk_into(src,"[emergency] emergency in [department]!!",radio_freq,get_spans(),get_default_language()) update_icon() - spawn(3000) - emergency = null - update_icon() + addtimer(CALLBACK(src, .proc/clear_emergency), 3000) if( href_list["department"] && message ) var/log_msg = message @@ -345,7 +343,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() screen = 7 //if it's successful, this will get overrwritten (7 = unsufccessfull, 6 = successfull) if (sending) var/pass = 0 - for (var/obj/machinery/message_server/MS in machines) + for (var/obj/machinery/message_server/MS in GLOB.machines) if(!MS.active) continue MS.send_rc_message(href_list["department"],department,log_msg,msgStamped,msgVerified,priority) pass = 1 @@ -354,24 +352,24 @@ var/list/obj/machinery/requests_console/allConsoles = list() var/radio_freq = 0 switch(href_list["department"]) if("bridge") - radio_freq = COMM_FREQ + radio_freq = GLOB.COMM_FREQ if("medbay") - radio_freq = MED_FREQ + radio_freq = GLOB.MED_FREQ if("science") - radio_freq = SCI_FREQ + radio_freq = GLOB.SCI_FREQ if("engineering") - radio_freq = ENG_FREQ + radio_freq = GLOB.ENG_FREQ if("security") - radio_freq = SEC_FREQ + radio_freq = GLOB.SEC_FREQ if("cargobay" || "mining") - radio_freq = SUPP_FREQ + radio_freq = GLOB.SUPP_FREQ Radio.set_frequency(radio_freq) var/authentic if(msgVerified || msgStamped) authentic = " (Authenticated)" var/alert = "" - for (var/obj/machinery/requests_console/Console in allConsoles) + for (var/obj/machinery/requests_console/Console in GLOB.allConsoles) if (ckey(Console.department) == ckey(href_list["department"])) switch(priority) if(2) //High priority @@ -386,7 +384,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() screen = 6 if(radio_freq) - Radio.talk_into(src,"[alert]: [message]",radio_freq) + Radio.talk_into(src,"[alert]: [message]",radio_freq,get_spans(),get_default_language()) switch(priority) if(2) @@ -441,13 +439,17 @@ var/list/obj/machinery/requests_console/allConsoles = list() updateUsrDialog() return -/obj/machinery/say_quote(input, list/spans) +/obj/machinery/requests_console/say_quote(input, list/spans, message_mode) var/ending = copytext(input, length(input) - 2) if (ending == "!!!") return "blares, \"[attach_spans(input, spans)]\"" return ..() +/obj/machinery/requests_console/proc/clear_emergency() + emergency = null + update_icon() + /obj/machinery/requests_console/proc/createmessage(source, title, message, priority) var/linkedsender if(istype(source, /obj/machinery/requests_console)) @@ -513,7 +515,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() msgVerified = "Verified by [ID.registered_name] ([ID.assignment])" updateUsrDialog() if(screen == 10) - if (access_RC_announce in ID.access) + if (GLOB.access_RC_announce in ID.access) announceAuth = 1 else announceAuth = 0 diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index 562328810b..ea679cfa4e 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -27,8 +27,10 @@ move_update_air(T) /obj/structure/emergency_shield/CanPass(atom/movable/mover, turf/target, height) - if(!height) return 0 - else return ..() + if(!height) + return FALSE + else + return ..() /obj/structure/emergency_shield/emp_act(severity) switch(severity) @@ -81,7 +83,7 @@ opacity = 0 anchored = 0 pressure_resistance = 2*ONE_ATMOSPHERE - req_access = list(access_engine) + req_access = list(GLOB.access_engine) max_integrity = 100 obj_integrity = 100 var/active = 0 @@ -216,15 +218,8 @@ else icon_state = (stat & BROKEN) ? "shieldoffbr":"shieldoff" - - - - - - - - -#define maxstoredpower 500 +#define ACTIVE_SETUPFIELDS 1 +#define ACTIVE_HASFIELDS 2 /obj/machinery/shieldwallgen name = "shield wall generator" desc = "A shield generator." @@ -232,166 +227,130 @@ icon_state = "Shield_Gen" anchored = 0 density = 1 - req_access = list(access_teleporter) + req_access = list(GLOB.access_teleporter) flags = CONDUCT use_power = 0 obj_integrity = 300 max_integrity = 300 - var/active = 0 + var/active = FALSE var/power = 0 - var/steps = 0 - var/last_check = 0 - var/check_delay = 10 - var/recalc = 0 + var/maximum_stored_power = 500 var/locked = 1 - var/obj/structure/cable/attached // the attached cable - var/storedpower = 0 + var/shield_range = 8 + var/obj/structure/cable/attached // the attached cable + +/obj/machinery/shieldwallgen/Destroy() + for(var/d in GLOB.cardinal) + cleanup_field(d) + return ..() /obj/machinery/shieldwallgen/proc/power() if(!anchored) power = 0 - return 0 - var/turf/T = src.loc + return + var/turf/T = get_turf(src) var/obj/structure/cable/C = T.get_cable_node() var/datum/powernet/PN if(C) - PN = C.powernet // find the powernet of the connected cable + PN = C.powernet //find the powernet of the connected cable if(!PN) - power = 0 - return 0 + return - var/surplus = max(PN.avail-PN.load, 0) - var/shieldload = min(rand(50,200), surplus) - if(shieldload==0 && !storedpower) // no cable or no power, and no power stored - power = 0 - return 0 - else - power = 1 // IVE GOT THE POWER! - if(PN) //runtime errors fixer. They were caused by PN.newload trying to access missing network in case of working on stored power. - storedpower += shieldload - PN.load += shieldload //uses powernet power. - -/obj/machinery/shieldwallgen/attack_hand(mob/user) - if(!anchored) - to_chat(user, "\The [src] needs to be firmly secured to the floor first!") - return 1 - if(locked && !issilicon(user)) - to_chat(user, "The controls are locked!") - return 1 - if(power != 1) - to_chat(user, "\The [src] needs to be powered by wire underneath!") - return 1 - - if(active >= 1) - active = 0 - icon_state = "Shield_Gen" - - user.visible_message("[user] turned \the [src] off.", \ - "You turn off \the [src].", \ - "You hear heavy droning fade out.") - cleanup() - else - active = 1 - icon_state = "Shield_Gen +a" - user.visible_message("[user] turned \the [src] on.", \ - "You turn on \the [src].", \ - "You hear heavy droning.") - add_fingerprint(user) + var/surplus = max(PN.avail - PN.load, 0) + var/avail_power = min(rand(50,200), surplus) + if(avail_power) + power += avail_power + PN.load += avail_power //uses powernet power. /obj/machinery/shieldwallgen/process() power() - if(power) - storedpower -= 50 //this way it can survive longer and survive at all - storedpower = Clamp(storedpower, 0, maxstoredpower) + use_stored_power(50) +/obj/machinery/shieldwallgen/proc/use_stored_power(amount) + power = Clamp(power - amount, 0, maximum_stored_power) + update_activity() - if(active == 1) - if(!anchored) - active = 0 - return - setup_field(1) - setup_field(2) - setup_field(4) - setup_field(8) - src.active = 2 - if(active >= 1) - if(power == 0) +/obj/machinery/shieldwallgen/proc/update_activity() + if(active) + icon_state = "Shield_Gen +a" + if(active == ACTIVE_SETUPFIELDS) + var/fields = 0 + for(var/d in GLOB.cardinal) + if(setup_field(d)) + fields++ + if(fields) + active = ACTIVE_HASFIELDS + if(!power) visible_message("The [src.name] shuts down due to lack of power!", \ "You hear heavy droning fade out.") icon_state = "Shield_Gen" - active = 0 - cleanup(1) - cleanup(2) - cleanup(4) - cleanup(8) + active = FALSE + for(var/d in GLOB.cardinal) + cleanup_field(d) + else + icon_state = "Shield_Gen" + for(var/d in GLOB.cardinal) + cleanup_field(d) -/obj/machinery/shieldwallgen/proc/setup_field(NSEW = 0) - var/turf/T = src.loc - var/turf/T2 = src.loc +/obj/machinery/shieldwallgen/proc/setup_field(direction) + if(!direction) + return + + var/turf/T = loc var/obj/machinery/shieldwallgen/G var/steps = 0 - var/oNSEW = 0 + var/opposite_direction = turn(direction, 180) - if(!NSEW)//Make sure its ran right - return - - if(NSEW == 1) - oNSEW = 2 - else if(NSEW == 2) - oNSEW = 1 - else if(NSEW == 4) - oNSEW = 8 - else if(NSEW == 8) - oNSEW = 4 - - for(var/dist = 0, dist <= 9, dist += 1) // checks out to 8 tiles away for another generator - T = get_step(T2, NSEW) - T2 = T - steps += 1 - if(locate(/obj/machinery/shieldwallgen) in T) - G = (locate(/obj/machinery/shieldwallgen) in T) - steps -= 1 + for(var/i in 1 to shield_range) //checks out to 8 tiles away for another generator + T = get_step(T, direction) + G = (locate(/obj/machinery/shieldwallgen) in T) + if(G) if(!G.active) return - G.cleanup(oNSEW) + G.cleanup_field(opposite_direction) break + else + steps++ - if(isnull(G)) + if(!G || !steps) //no shield gen or no tiles between us and the gen return - T2 = src.loc + for(var/i in 1 to steps) //creates each field tile + T = get_step(T, opposite_direction) + new/obj/machinery/shieldwall(T, src, G) + return TRUE - for(var/dist = 0, dist < steps, dist += 1) // creates each field tile - var/field_dir = get_dir(T2,get_step(T2, NSEW)) - T = get_step(T2, NSEW) - T2 = T - var/obj/machinery/shieldwall/CF = new/obj/machinery/shieldwall/(src, G) //(ref to this gen, ref to connected gen) - CF.loc = T - CF.setDir(field_dir) +/obj/machinery/shieldwallgen/proc/cleanup_field(direction) + var/obj/machinery/shieldwall/F + var/obj/machinery/shieldwallgen/G + var/turf/T = loc + for(var/i in 1 to shield_range) + T = get_step(T, direction) + + G = (locate(/obj/machinery/shieldwallgen) in T) + if(G && !G.active) + break + + F = (locate(/obj/machinery/shieldwall) in T) + if(F && (F.gen_primary == src || F.gen_secondary == src)) //it's ours, kill it. + qdel(F) + +/obj/machinery/shieldwallgen/can_be_unfasten_wrench(mob/user, silent) + if(active) + if(!silent) + to_chat(user, "Turn off the shield generator first!") + return FAILED_UNFASTEN + return ..() /obj/machinery/shieldwallgen/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/weapon/wrench)) - if(active) - to_chat(user, "Turn off the field generator first!") - return + default_unfasten_wrench(user, W, 0) - else if(!anchored && !isinspace()) //Can't fasten this thing in space - playsound(src.loc, W.usesound, 75, 1) - to_chat(user, "You secure the external reinforcing bolts to the floor.") - anchored = 1 - return - - else //You can unfasten it tough, if you somehow manage to fasten it. - playsound(src.loc, W.usesound, 75, 1) - to_chat(user, "You undo the external reinforcing bolts.") - anchored = 0 - return - - if(W.GetID()) - if (allowed(user)) + else if(W.GetID()) + if(allowed(user)) locked = !locked to_chat(user, "You [src.locked ? "lock" : "unlock"] the controls.") else @@ -401,31 +360,30 @@ add_fingerprint(user) return ..() -/obj/machinery/shieldwallgen/proc/cleanup(NSEW) - var/obj/machinery/shieldwall/F - var/obj/machinery/shieldwallgen/G - var/turf/T = src.loc - var/turf/T2 = src.loc - - for(var/dist = 0, dist <= 9, dist += 1) // checks out to 8 tiles away for fields - T = get_step(T2, NSEW) - T2 = T - if(locate(/obj/machinery/shieldwall) in T) - F = (locate(/obj/machinery/shieldwall) in T) - qdel(F) - - if(locate(/obj/machinery/shieldwallgen) in T) - G = (locate(/obj/machinery/shieldwallgen) in T) - if(!G.active) - break - -/obj/machinery/shieldwallgen/Destroy() - cleanup(1) - cleanup(2) - cleanup(4) - cleanup(8) - return ..() +/obj/machinery/shieldwallgen/attack_hand(mob/user) + if(!anchored) + to_chat(user, "\The [src] needs to be firmly secured to the floor first!") + return + if(locked && !issilicon(user)) + to_chat(user, "The controls are locked!") + return + if(!power) + to_chat(user, "\The [src] needs to be powered by a wire!") + return + if(active) + user.visible_message("[user] turned \the [src] off.", \ + "You turn off \the [src].", \ + "You hear heavy droning fade out.") + active = FALSE + update_activity() + else + user.visible_message("[user] turned \the [src] on.", \ + "You turn on \the [src].", \ + "You hear heavy droning.") + active = ACTIVE_SETUPFIELDS + update_activity() + add_fingerprint(user) //////////////Containment Field START @@ -438,42 +396,36 @@ density = 1 resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF light_range = 3 - var/needs_power = 0 - var/active = 1 - var/delay = 5 - var/last_active - var/mob/U + var/needs_power = FALSE var/obj/machinery/shieldwallgen/gen_primary var/obj/machinery/shieldwallgen/gen_secondary -/obj/machinery/shieldwall/New(var/obj/machinery/shieldwallgen/A, var/obj/machinery/shieldwallgen/B) - ..() - src.gen_primary = A - src.gen_secondary = B - if(A && B) - needs_power = 1 - for(var/mob/living/L in get_turf(src.loc)) - visible_message("\The [src] is suddenly occupying the same space as \the [L]'s organs!") +/obj/machinery/shieldwall/Initialize(mapload, obj/machinery/shieldwallgen/first_gen, obj/machinery/shieldwallgen/second_gen) + . = ..() + gen_primary = first_gen + gen_secondary = second_gen + if(gen_primary && gen_secondary) + needs_power = TRUE + setDir(get_dir(gen_primary, gen_secondary)) + for(var/mob/living/L in get_turf(src)) + visible_message("\The [src] is suddenly occupying the same space as \the [L]!") L.gib() +/obj/machinery/shieldwall/Destroy() + gen_primary = null + gen_secondary = null + return ..() + /obj/machinery/shieldwall/attack_hand(mob/user) return - /obj/machinery/shieldwall/process() if(needs_power) - if(isnull(gen_primary)||isnull(gen_secondary)) + if(!gen_primary || !gen_primary.active || !gen_secondary || !gen_secondary.active) qdel(src) return - if(!(gen_primary.active)||!(gen_secondary.active)) - qdel(src) - return - - if(prob(50)) - gen_primary.storedpower -= 10 - else - gen_secondary.storedpower -=10 + drain_power(10) /obj/machinery/shieldwall/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) @@ -489,37 +441,19 @@ drain_power(damage_amount) /obj/machinery/shieldwall/proc/drain_power(drain_amount) - if(needs_power) - var/obj/machinery/shieldwallgen/G - if(prob(50)) - G = gen_primary - else - G = gen_secondary - G.storedpower -= drain_amount - -/obj/machinery/shieldwall/bullet_act(obj/item/projectile/P) - . = ..() - drain_power(P.damage) - - -/obj/machinery/shieldwall/ex_act(severity, target) - if(needs_power) - var/drain_amount = 20 - switch(severity) - if(1) - drain_amount = 200 - if(2) - drain_amount = 50 - drain_power(drain_amount) - + if(needs_power && gen_primary) + gen_primary.use_stored_power(drain_amount*0.5) + if(gen_secondary) //using power may cause us to be destroyed + gen_secondary.use_stored_power(drain_amount*0.5) /obj/machinery/shieldwall/CanPass(atom/movable/mover, turf/target, height=0) - if(height==0) return 1 + if(height==0) + return FALSE if(istype(mover) && mover.checkpass(PASSGLASS)) return prob(20) else - if (istype(mover, /obj/item/projectile)) + if(istype(mover, /obj/item/projectile)) return prob(10) else - return !src.density + return !density diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm index 95afbfeb0c..66c85a1784 100644 --- a/code/game/machinery/slotmachine.dm +++ b/code/game/machinery/slotmachine.dm @@ -33,7 +33,7 @@ light_color = LIGHT_COLOR_BROWN -/obj/machinery/computer/slot_machine/New() +/obj/machinery/computer/slot_machine/Initialize() ..() jackpots = rand(1, 4) //false hope plays = rand(75, 200) @@ -47,9 +47,8 @@ toggle_reel_spin(0) for(var/cointype in typesof(/obj/item/weapon/coin)) - var/obj/item/weapon/coin/C = new cointype(src) - coinvalues["[cointype]"] = C.value - qdel(C) + var/obj/item/weapon/coin/C = cointype + coinvalues["[cointype]"] = initial(C.value) /obj/machinery/computer/slot_machine/Destroy() if(balance) diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index 0f29c50de5..df76fef5a9 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -175,7 +175,7 @@ return ..() /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) + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.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, master_ui, state) diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 1ddd5bd53d..7fc0f98b1c 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -322,7 +322,7 @@ return ..() /obj/machinery/suit_storage_unit/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) + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "suit_storage_unit", name, 400, 305, master_ui, state) @@ -375,18 +375,13 @@ if("dispense") if(!state_open) return - switch(params["item"]) - if("helmet") - helmet.loc = loc - helmet = null - if("suit") - suit.loc = loc - suit = null - if("mask") - mask.loc = loc - mask = null - if("storage") - storage.loc = loc - storage = null + + var/static/list/valid_items = list("helmet", "suit", "mask", "storage") + var/item_name = params["item"] + if(item_name in valid_items) + var/obj/item/I = vars[item_name] + vars[item_name] = null + if(I) + I.forceMove(loc) . = TRUE update_icon() diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index 291e514a36..7a5f8af5bd 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -22,7 +22,7 @@ if(surplus() < 1500) if(user) to_chat(user, "The connected wire doesn't have enough current.") return - for(var/obj/singularity/singulo in singularities) + for(var/obj/singularity/singulo in GLOB.singularities) if(singulo.z == z) singulo.target = src icon_state = "[icontype]1" @@ -32,7 +32,7 @@ /obj/machinery/power/singularity_beacon/proc/Deactivate(mob/user = null) - for(var/obj/singularity/singulo in singularities) + for(var/obj/singularity/singulo in GLOB.singularities) if(singulo.target == src) singulo.target = null icon_state = "[icontype]0" @@ -88,7 +88,7 @@ add_load(1500) if(cooldown <= world.time) cooldown = world.time + 100 - for(var/obj/singularity/singulo in singularities) + for(var/obj/singularity/singulo in GLOB.singularities) if(singulo.z == z) say("The [singulo] is now [get_dist(src,singulo)] standard lengths away to the [dir2text(get_dir(src,singulo))]") else diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 6f7e7ec902..4d8ad29941 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -533,7 +533,7 @@ /obj/item/device/syndicatedetonator/attack_self(mob/user) if(timer < world.time) - for(var/obj/machinery/syndicatebomb/B in machines) + for(var/obj/machinery/syndicatebomb/B in GLOB.machines) if(B.active) B.detonation_timer = world.time + BUTTON_DELAY detonated++ @@ -545,7 +545,7 @@ var/area/A = get_area(T) detonated-- var/log_str = "[ADMIN_LOOKUPFLW(user)] has remotely detonated [detonated ? "syndicate bombs" : "a syndicate bomb"] using a [name] at [A.name] [ADMIN_JMP(T)]." - bombers += log_str + GLOB.bombers += log_str message_admins(log_str) log_game("[key_name(user)] has remotely detonated [detonated ? "syndicate bombs" : "a syndicate bomb"] using a [name] at [A.name][COORD(T)]") detonated = 0 diff --git a/code/game/machinery/telecomms/broadcasting.dm b/code/game/machinery/telecomms/broadcasting.dm index 7227a393df..84321a1760 100644 --- a/code/game/machinery/telecomms/broadcasting.dm +++ b/code/game/machinery/telecomms/broadcasting.dm @@ -58,7 +58,7 @@ var/vmask, var/obj/item/device/radio/radio, var/message, var/name, var/job, var/realname, var/data, var/compression, var/list/level, var/freq, var/list/spans, - var/verb_say, var/verb_ask, var/verb_exclaim, var/verb_yell) + var/verb_say, var/verb_ask, var/verb_exclaim, var/verb_yell, var/datum/language/language) message = copytext(message, 1, MAX_BROADCAST_LEN) @@ -70,8 +70,6 @@ var/atom/movable/virtualspeaker/virt = new /atom/movable/virtualspeaker(null) virt.name = name virt.job = job - virt.languages_spoken = AM.languages_spoken - virt.languages_understood = AM.languages_understood virt.source = AM virt.radio = radio virt.verb_say = verb_say @@ -85,7 +83,7 @@ // --- Broadcast only to intercom devices --- if(data == 1) - for(var/obj/item/device/radio/intercom/R in all_radios["[freq]"]) + for(var/obj/item/device/radio/intercom/R in GLOB.all_radios["[freq]"]) if(R.receive_range(freq, level) > -1) radios += R @@ -93,7 +91,7 @@ else if(data == 2) - for(var/obj/item/device/radio/R in all_radios["[freq]"]) + for(var/obj/item/device/radio/R in GLOB.all_radios["[freq]"]) if(R.subspace_transmission) continue @@ -106,8 +104,8 @@ else if(data == 5) - for(var/obj/item/device/radio/R in all_radios["[freq]"]) - if(!R.centcom) + for(var/obj/item/device/radio/R in GLOB.all_radios["[freq]"]) + if(!R.independent) continue if(R.receive_range(freq, level) > -1) @@ -116,13 +114,13 @@ // --- Broadcast to ALL radio devices --- else - for(var/obj/item/device/radio/R in all_radios["[freq]"]) + for(var/obj/item/device/radio/R in GLOB.all_radios["[freq]"]) if(R.receive_range(freq, level) > -1) radios += R var/freqtext = num2text(freq) - for(var/obj/item/device/radio/R in all_radios["[SYND_FREQ]"]) //syndicate radios use magic that allows them to hear everything. this was already the case, now it just doesn't need the allinone anymore. solves annoying bugs that aren't worth solving. - if(R.receive_range(SYND_FREQ, list(R.z)) > -1 && freqtext in radiochannelsreverse) + for(var/obj/item/device/radio/R in GLOB.all_radios["[GLOB.SYND_FREQ]"]) //syndicate radios use magic that allows them to hear everything. this was already the case, now it just doesn't need the allinone anymore. solves annoying bugs that aren't worth solving. + if(R.receive_range(GLOB.SYND_FREQ, list(R.z)) > -1 && freqtext in GLOB.reverseradiochannels) radios |= R // Get a list of mobs who can hear from the radios we collected. @@ -132,278 +130,46 @@ if (R.client && R.client.holder && !(R.client.prefs.chat_toggles & CHAT_RADIO)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios. receive -= R - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) if(isobserver(M) && M.client && (M.client.prefs.chat_toggles & CHAT_GHOSTRADIO)) receive |= M - var/rendered = virt.compose_message(virt, virt.languages_spoken, message, freq, spans) //Always call this on the virtualspeaker to advoid issues. + var/rendered = virt.compose_message(virt, language, message, freq, spans) //Always call this on the virtualspeaker to advoid issues. for(var/atom/movable/hearer in receive) - hearer.Hear(rendered, virt, AM.languages_spoken, message, freq, spans) + hearer.Hear(rendered, virt, language, message, freq, spans) if(length(receive)) // --- This following recording is intended for research and feedback in the use of department radio channels --- var/blackbox_msg = "[AM] [AM.say_quote(message, spans)]" - if(istype(blackbox)) + if(istype(GLOB.blackbox)) switch(freq) if(1459) - blackbox.msg_common += blackbox_msg + GLOB.blackbox.msg_common += blackbox_msg if(1351) - blackbox.msg_science += blackbox_msg + GLOB.blackbox.msg_science += blackbox_msg if(1353) - blackbox.msg_command += blackbox_msg + GLOB.blackbox.msg_command += blackbox_msg if(1355) - blackbox.msg_medical += blackbox_msg + GLOB.blackbox.msg_medical += blackbox_msg if(1357) - blackbox.msg_engineering += blackbox_msg + GLOB.blackbox.msg_engineering += blackbox_msg if(1359) - blackbox.msg_security += blackbox_msg + GLOB.blackbox.msg_security += blackbox_msg if(1441) - blackbox.msg_deathsquad += blackbox_msg + GLOB.blackbox.msg_deathsquad += blackbox_msg if(1213) - blackbox.msg_syndicate += blackbox_msg + GLOB.blackbox.msg_syndicate += blackbox_msg if(1349) - blackbox.msg_service += blackbox_msg + GLOB.blackbox.msg_service += blackbox_msg if(1347) - blackbox.msg_cargo += blackbox_msg + GLOB.blackbox.msg_cargo += blackbox_msg else - blackbox.messages += blackbox_msg + GLOB.blackbox.messages += blackbox_msg spawn(50) qdel(virt) -/proc/Broadcast_SimpleMessage(source, frequency, text, data, mob/M, compression, level) - - /* ###### Prepare the radio connection ###### */ - - if(!M) - var/mob/living/carbon/human/H = new - M = H - - var/datum/radio_frequency/connection = SSradio.return_frequency(frequency) - - var/display_freq = connection.frequency - - var/list/receive = list() - - - // --- Broadcast only to intercom devices --- - - if(data == 1) - for (var/obj/item/device/radio/intercom/R in connection.devices["[RADIO_CHAT]"]) - var/turf/position = get_turf(R) - if(position && position.z == level) - receive |= R.send_hear(display_freq, level) - - - // --- Broadcast only to intercoms and station-bounced radios --- - - else if(data == 2) - for (var/obj/item/device/radio/R in connection.devices["[RADIO_CHAT]"]) - if(R.subspace_transmission) - continue - var/turf/position = get_turf(R) - if(position && position.z == level) - receive |= R.send_hear(display_freq) - - - // --- Broadcast to syndicate radio! --- - - else if(data == 3) - var/datum/radio_frequency/syndicateconnection = SSradio.return_frequency(SYND_FREQ) - - for (var/obj/item/device/radio/R in syndicateconnection.devices["[RADIO_CHAT]"]) - var/turf/position = get_turf(R) - if(position && position.z == level) - receive |= R.send_hear(SYND_FREQ) - - // --- Centcom radio, yo. --- - - else if(data == 5) - - for(var/obj/item/device/radio/R in all_radios["[RADIO_CHAT]"]) - if(R.centcom) - receive |= R.send_hear(CENTCOM_FREQ) - - // --- Broadcast to ALL radio devices --- - - else - for (var/obj/item/device/radio/R in connection.devices["[RADIO_CHAT]"]) - var/turf/position = get_turf(R) - if(position && position.z == level) - receive |= R.send_hear(display_freq) - - - /* ###### Organize the receivers into categories for displaying the message ###### */ - - // Understood the message: - var/list/heard_normal = list() // normal message - - // Did not understand the message: - var/list/heard_garbled = list() // garbled message (ie "f*c* **u, **i*er!") - var/list/heard_gibberish= list() // completely screwed over message (ie "F%! (O*# *#!<>&**%!") - - for (var/mob/R in receive) - - /* --- Loop through the receivers and categorize them --- */ - - if (R.client && !(R.client.prefs.chat_toggles & CHAT_RADIO)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios. - continue - - - // --- Check for compression --- - if(compression > 0) - - heard_gibberish += R - continue - - // --- Can understand the speech --- - - if (R.languages_understood & M.languages_spoken) - - heard_normal += R - - // --- Can't understand the speech --- - - else - // - Just display a garbled message - - - heard_garbled += R - - - /* ###### Begin formatting and sending the message ###### */ - if (length(heard_normal) || length(heard_garbled) || length(heard_gibberish)) - - /* --- Some miscellaneous variables to format the string output --- */ - var/part_a = "" // goes in the actual output - var/freq_text // the name of the channel - - // --- Set the name of the channel --- - switch(display_freq) - - if(SYND_FREQ) - freq_text = "#unkn" - if(COMM_FREQ) - freq_text = "Command" - if(SCI_FREQ) - freq_text = "Science" - if(MED_FREQ) - freq_text = "Medical" - if(ENG_FREQ) - freq_text = "Engineering" - if(SEC_FREQ) - freq_text = "Security" - if(SERV_FREQ) - freq_text = "Service" - if(SUPP_FREQ) - freq_text = "Supply" - if(AIPRIV_FREQ) - freq_text = "AI Private" - //There's probably a way to use the list var of channels in code\game\communications.dm to make the dept channels non-hardcoded, but I wasn't in an experimentive mood. --NEO - - - // --- If the frequency has not been assigned a name, just use the frequency as the name --- - - if(!freq_text) - freq_text = format_frequency(display_freq) - - // --- Some more pre-message formatting --- - - var/part_b_extra = "" - if(data == 3) // intercepted radio message - part_b_extra = " (Intercepted)" - - // Create a radio headset for the sole purpose of using its icon - var/obj/item/device/radio/headset/radio = new - - var/part_b = " \icon[radio]\[[freq_text]\][part_b_extra] " - var/part_c = "" - - if (display_freq==SYND_FREQ) - part_a = "" - else if (display_freq==COMM_FREQ) - part_a = "" - else if (display_freq==SCI_FREQ) - part_a = "" - else if (display_freq==MED_FREQ) - part_a = "" - else if (display_freq==ENG_FREQ) - part_a = "" - else if (display_freq==SEC_FREQ) - part_a = "" - else if (display_freq==SERV_FREQ) - part_a = "" - else if (display_freq==SUPP_FREQ) - part_a = "" - else if (display_freq==CENTCOM_FREQ) - part_a = "" - else if (display_freq==AIPRIV_FREQ) - part_a = "" - - // --- This following recording is intended for research and feedback in the use of department radio channels --- - - var/part_blackbox_b = " \[[freq_text]\] " - var/blackbox_msg = "[part_a][source][part_blackbox_b]\"[text]\"[part_c]" - //var/blackbox_admin_msg = "[part_a][M.name] (Real name: [M.real_name])[part_blackbox_b][quotedmsg][part_c]" - - //BR.messages_admin += blackbox_admin_msg - if(istype(blackbox)) - switch(display_freq) - if(1459) - blackbox.msg_common += blackbox_msg - if(1351) - blackbox.msg_science += blackbox_msg - if(1353) - blackbox.msg_command += blackbox_msg - if(1355) - blackbox.msg_medical += blackbox_msg - if(1357) - blackbox.msg_engineering += blackbox_msg - if(1359) - blackbox.msg_security += blackbox_msg - if(1441) - blackbox.msg_deathsquad += blackbox_msg - if(1213) - blackbox.msg_syndicate += blackbox_msg - if(1349) - blackbox.msg_service += blackbox_msg - if(1347) - blackbox.msg_cargo += blackbox_msg - else - blackbox.messages += blackbox_msg - - //End of research and feedback code. - - /* ###### Send the message ###### */ - - /* --- Process all the mobs that heard the voice normally (understood) --- */ - - if (length(heard_normal)) - var/rendered = "[part_a][source][part_b]\"[text]\"[part_c]" - - for (var/mob/R in heard_normal) - R.show_message(rendered, 2) - - /* --- Process all the mobs that heard a garbled voice (did not understand) --- */ - // Displays garbled message (ie "f*c* **u, **i*er!") - - if (length(heard_garbled)) - var/quotedmsg = "\"[stars(text)]\"" - var/rendered = "[part_a][source][part_b][quotedmsg][part_c]" - - for (var/mob/R in heard_garbled) - R.show_message(rendered, 2) - - - /* --- Complete gibberish. Usually happens when there's a compressed message --- */ - - if (length(heard_gibberish)) - var/quotedmsg = "\"[Gibberish(text, compression + 50)]\"" - var/rendered = "[part_a][Gibberish(source, compression + 50)][part_b][quotedmsg][part_c]" - - for (var/mob/R in heard_gibberish) - R.show_message(rendered, 2) - //Use this to test if an obj can communicate with a Telecommunications Network /atom/proc/test_telecomms() @@ -432,7 +198,7 @@ signal.frequency = 1459// Common channel //#### Sending the signal to all subspace receivers ####// - for(var/obj/machinery/telecomms/receiver/R in telecomms_list) + for(var/obj/machinery/telecomms/receiver/R in GLOB.telecomms_list) R.receive_signal(signal) sleep(rand(10,25)) diff --git a/code/game/machinery/telecomms/computers/logbrowser.dm b/code/game/machinery/telecomms/computers/logbrowser.dm index ab71f51c57..31cbe7412c 100644 --- a/code/game/machinery/telecomms/computers/logbrowser.dm +++ b/code/game/machinery/telecomms/computers/logbrowser.dm @@ -13,7 +13,7 @@ var/universal_translate = 0 // set to 1 if it can translate nonhuman speech - req_access = list(access_tcomsat) + req_access = list(GLOB.access_tcomsat) circuit = /obj/item/weapon/circuitboard/computer/comm_server /obj/machinery/computer/telecomms/server/attack_hand(mob/user) diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index 643efd81df..6568d14211 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -256,7 +256,7 @@ if(newfreq && canAccess(usr)) if(findtext(num2text(newfreq), ".")) newfreq *= 10 // shift the decimal one place - if(newfreq == SYND_FREQ) + if(newfreq == GLOB.SYND_FREQ) temp = "-% Error: Interference preventing filtering frequency: \"[newfreq] GHz\" %-" else if(!(newfreq in freq_listening) && newfreq < 10000) diff --git a/code/game/machinery/telecomms/machines/allinone.dm b/code/game/machinery/telecomms/machines/allinone.dm index 1e04ee649f..5589a1be24 100644 --- a/code/game/machinery/telecomms/machines/allinone.dm +++ b/code/game/machinery/telecomms/machines/allinone.dm @@ -33,13 +33,14 @@ sleep(signal.data["slow"]) // simulate the network lag if necessary /* ###### Broadcast a message using signal.data ###### */ - if(signal.frequency == SYND_FREQ) // if syndicate broadcast, just + if(signal.frequency == GLOB.SYND_FREQ) // if syndicate broadcast, just Broadcast_Message(signal.data["mob"], signal.data["vmask"], signal.data["radio"], signal.data["message"], signal.data["name"], signal.data["job"], signal.data["realname"],, signal.data["compression"], list(0, z), signal.frequency, signal.data["spans"], - signal.data["verb_say"], signal.data["verb_ask"], signal.data["verb_exclaim"], signal.data["verb_yell"]) + signal.data["verb_say"], signal.data["verb_ask"], signal.data["verb_exclaim"], signal.data["verb_yell"], + signal.data["language"]) /obj/machinery/telecomms/allinone/attackby(obj/item/P, mob/user, params) diff --git a/code/game/machinery/telecomms/machines/broadcaster.dm b/code/game/machinery/telecomms/machines/broadcaster.dm index 12712211bb..dd83638c57 100644 --- a/code/game/machinery/telecomms/machines/broadcaster.dm +++ b/code/game/machinery/telecomms/machines/broadcaster.dm @@ -5,8 +5,8 @@ They receive their message from a server after the message has been logged. */ -var/list/recentmessages = list() // global list of recent messages broadcasted : used to circumvent massive radio spam -var/message_delay = 0 // To make sure restarting the recentmessages list is kept in sync +GLOBAL_LIST_EMPTY(recentmessages) // global list of recent messages broadcasted : used to circumvent massive radio spam +GLOBAL_VAR_INIT(message_delay, 0) // To make sure restarting the recentmessages list is kept in sync /obj/machinery/telecomms/broadcaster name = "subspace broadcaster" @@ -38,9 +38,9 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept original.data["level"] = signal.data["level"] var/signal_message = "[signal.frequency]:[signal.data["message"]]:[signal.data["realname"]]" - if(signal_message in recentmessages) + if(signal_message in GLOB.recentmessages) return - recentmessages.Add(signal_message) + GLOB.recentmessages.Add(signal_message) if(signal.data["slow"] > 0) sleep(signal.data["slow"]) // simulate the network lag if necessary @@ -56,17 +56,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept signal.data["vmask"], signal.data["radio"], signal.data["message"], signal.data["name"], signal.data["job"], signal.data["realname"], 0, signal.data["compression"], signal.data["level"], signal.frequency, signal.data["spans"], - signal.data["verb_say"], signal.data["verb_ask"], signal.data["verb_exclaim"], signal.data["verb_yell"]) - - - /** #### - Simple Broadcast - #### **/ - - if(signal.data["type"] == 1) - - /* ###### Broadcast a message using signal.data ###### */ - Broadcast_SimpleMessage(signal.data["name"], signal.frequency, - signal.data["message"],null, null, - signal.data["compression"], listening_level) + signal.data["verb_say"], signal.data["verb_ask"], signal.data["verb_exclaim"], signal.data["verb_yell"], signal.data["language"]) /** #### - Artificial Broadcast - #### **/ @@ -81,13 +71,13 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept signal.data["radio"], signal.data["message"], signal.data["name"], signal.data["job"], signal.data["realname"], 4, signal.data["compression"], signal.data["level"], signal.frequency, signal.data["spans"], - signal.data["verb_say"], signal.data["verb_ask"], signal.data["verb_exclaim"], signal.data["verb_yell"]) + signal.data["verb_say"], signal.data["verb_ask"], signal.data["verb_exclaim"], signal.data["verb_yell"], signal.data["language"]) - if(!message_delay) - message_delay = 1 + if(!GLOB.message_delay) + GLOB.message_delay = 1 spawn(10) - message_delay = 0 - recentmessages = list() + GLOB.message_delay = 0 + GLOB.recentmessages = list() /* --- Do a snazzy animation! --- */ flick("broadcaster_send", src) @@ -110,8 +100,8 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept /obj/machinery/telecomms/broadcaster/Destroy() // In case message_delay is left on 1, otherwise it won't reset the list and people can't say the same thing twice anymore. - if(message_delay) - message_delay = 0 + if(GLOB.message_delay) + GLOB.message_delay = 0 return ..() @@ -133,4 +123,4 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept autolinkers = list("broadcasterB") /obj/machinery/telecomms/broadcaster/preset_left/birdstation - name = "Broadcaster" \ No newline at end of file + name = "Broadcaster" diff --git a/code/game/machinery/telecomms/machines/bus.dm b/code/game/machinery/telecomms/machines/bus.dm index ae43084253..81392f956e 100644 --- a/code/game/machinery/telecomms/machines/bus.dm +++ b/code/game/machinery/telecomms/machines/bus.dm @@ -25,7 +25,7 @@ if(is_freq_listening(signal)) if(change_frequency) - if(signal.frequency != SYND_FREQ) + if(signal.frequency != GLOB.SYND_FREQ) signal.frequency = change_frequency if(!istype(machine_from, /obj/machinery/telecomms/processor) && machine_from != src) // Signal must be ready (stupid assuming machine), let's send it @@ -72,25 +72,25 @@ /obj/machinery/telecomms/bus/preset_one id = "Bus 1" network = "tcommsat" - freq_listening = list(SCI_FREQ, MED_FREQ) + freq_listening = list(GLOB.SCI_FREQ, GLOB.MED_FREQ) autolinkers = list("processor1", "science", "medical") /obj/machinery/telecomms/bus/preset_two id = "Bus 2" network = "tcommsat" - freq_listening = list(SUPP_FREQ,SERV_FREQ) + freq_listening = list(GLOB.SUPP_FREQ,GLOB.SERV_FREQ) autolinkers = list("processor2", "supply", "service") /obj/machinery/telecomms/bus/preset_three id = "Bus 3" network = "tcommsat" - freq_listening = list(SEC_FREQ, COMM_FREQ) + freq_listening = list(GLOB.SEC_FREQ, GLOB.COMM_FREQ) autolinkers = list("processor3", "security", "command") /obj/machinery/telecomms/bus/preset_four id = "Bus 4" network = "tcommsat" - freq_listening = list(ENG_FREQ) + freq_listening = list(GLOB.ENG_FREQ) autolinkers = list("processor4", "engineering", "common") /obj/machinery/telecomms/bus/preset_four/New() diff --git a/code/game/machinery/telecomms/machines/receiver.dm b/code/game/machinery/telecomms/machines/receiver.dm index f66d860664..1b872b5d15 100644 --- a/code/game/machinery/telecomms/machines/receiver.dm +++ b/code/game/machinery/telecomms/machines/receiver.dm @@ -77,7 +77,7 @@ id = "Receiver A" network = "tcommsat" autolinkers = list("receiverA") // link to relay - freq_listening = list(SCI_FREQ, MED_FREQ, SUPP_FREQ, SERV_FREQ) // science, medical, supply, service + freq_listening = list(GLOB.SCI_FREQ, GLOB.MED_FREQ, GLOB.SUPP_FREQ, GLOB.SERV_FREQ) // science, medical, supply, service //--PRESET RIGHT--// @@ -86,7 +86,7 @@ id = "Receiver B" network = "tcommsat" autolinkers = list("receiverB") // link to relay - freq_listening = list(COMM_FREQ, ENG_FREQ, SEC_FREQ) //command, engineering, security + freq_listening = list(GLOB.COMM_FREQ, GLOB.ENG_FREQ, GLOB.SEC_FREQ) //command, engineering, security //Common and other radio frequencies for people to freely use /obj/machinery/telecomms/receiver/preset_right/New() diff --git a/code/game/machinery/telecomms/machines/server.dm b/code/game/machinery/telecomms/machines/server.dm index 2039ead4c6..519e5771c1 100644 --- a/code/game/machinery/telecomms/machines/server.dm +++ b/code/game/machinery/telecomms/machines/server.dm @@ -72,7 +72,8 @@ log.parameters["name"] = signal.data["name"] log.parameters["realname"] = signal.data["realname"] - log.parameters["uspeech"] = signal.data["languages"] & HUMAN //good enough + //log.parameters["uspeech"] = signal.data["languages"] & HUMAN //good enough + // TODO languages: ^ I don't know what this does // If the signal is still compressed, make the log entry gibberish if(signal.data["compression"] > 0) @@ -141,22 +142,22 @@ /obj/machinery/telecomms/server/presets/science id = "Science Server" - freq_listening = list(SCI_FREQ) + freq_listening = list(GLOB.SCI_FREQ) autolinkers = list("science") /obj/machinery/telecomms/server/presets/medical id = "Medical Server" - freq_listening = list(MED_FREQ) + freq_listening = list(GLOB.MED_FREQ) autolinkers = list("medical") /obj/machinery/telecomms/server/presets/supply id = "Supply Server" - freq_listening = list(SUPP_FREQ) + freq_listening = list(GLOB.SUPP_FREQ) autolinkers = list("supply") /obj/machinery/telecomms/server/presets/service id = "Service Server" - freq_listening = list(SERV_FREQ) + freq_listening = list(GLOB.SERV_FREQ) autolinkers = list("service") /obj/machinery/telecomms/server/presets/common @@ -173,19 +174,19 @@ /obj/machinery/telecomms/server/presets/command id = "Command Server" - freq_listening = list(COMM_FREQ) + freq_listening = list(GLOB.COMM_FREQ) autolinkers = list("command") /obj/machinery/telecomms/server/presets/engineering id = "Engineering Server" - freq_listening = list(ENG_FREQ) + freq_listening = list(GLOB.ENG_FREQ) autolinkers = list("engineering") /obj/machinery/telecomms/server/presets/security id = "Security Server" - freq_listening = list(SEC_FREQ) + freq_listening = list(GLOB.SEC_FREQ) autolinkers = list("security") /obj/machinery/telecomms/server/presets/common/birdstation/New() ..() - freq_listening = list() \ No newline at end of file + freq_listening = list() diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index 9882a624bb..0ab1bd10db 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -12,7 +12,7 @@ Look at radio.dm for the prequel to this code. */ -var/global/list/obj/machinery/telecomms/telecomms_list = list() +GLOBAL_LIST_EMPTY(telecomms_list) /obj/machinery/telecomms icon = 'icons/obj/machines/telecomms.dmi' @@ -86,7 +86,8 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() "verb_say" = signal.data["verb_say"], "verb_ask" = signal.data["verb_ask"], "verb_exclaim" = signal.data["verb_exclaim"], - "verb_yell" = signal.data["verb_yell"] + "verb_yell" = signal.data["verb_yell"], + "language" = signal.data["language"] ) // Keep the "original" signal constant @@ -133,7 +134,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() /obj/machinery/telecomms/New() - telecomms_list += src + GLOB.telecomms_list += src ..() //Set the listening_level if there's none. @@ -155,13 +156,13 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() for(var/obj/machinery/telecomms/T in urange(20, src, 1)) add_link(T) else - for(var/obj/machinery/telecomms/T in telecomms_list) + for(var/obj/machinery/telecomms/T in GLOB.telecomms_list) add_link(T) /obj/machinery/telecomms/Destroy() - telecomms_list -= src - for(var/obj/machinery/telecomms/comm in telecomms_list) + GLOB.telecomms_list -= src + for(var/obj/machinery/telecomms/comm in GLOB.telecomms_list) comm.links -= src links = list() return ..() diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 55d9fac2ed..396214d224 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -165,7 +165,7 @@ var/list/L = list() var/list/areaindex = list() if(regime_set == "Teleporter") - for(var/obj/item/device/radio/beacon/R in teleportbeacons) + for(var/obj/item/device/radio/beacon/R in GLOB.teleportbeacons) var/turf/T = get_turf(R) if(!T) continue @@ -173,7 +173,7 @@ continue L[avoid_assoc_duplicate_keys(T.loc.name, areaindex)] = R - for(var/obj/item/weapon/implant/tracking/I in tracked_implants) + for(var/obj/item/weapon/implant/tracking/I in GLOB.tracked_implants) if(!I.imp_in || !ismob(I.loc)) continue else diff --git a/code/game/machinery/transformer.dm b/code/game/machinery/transformer.dm index cd4cd2185c..af5e04b5bd 100644 --- a/code/game/machinery/transformer.dm +++ b/code/game/machinery/transformer.dm @@ -15,7 +15,8 @@ var/cooldown_timer var/robot_cell_charge = 5000 var/obj/effect/countdown/transformer/countdown - + var/mob/living/silicon/ai/masterAI + /obj/machinery/transformer/New() // On us ..() @@ -103,6 +104,10 @@ // So he can't jump out the gate right away. R.SetLockdown() + if(masterAI) + R.connected_ai = masterAI + R.lawsync() + R.lawupdate = 1 addtimer(CALLBACK(src, .proc/unlock_new_robot, R), 50) /obj/machinery/transformer/proc/unlock_new_robot(mob/living/silicon/robot/R) @@ -110,7 +115,7 @@ sleep(30) if(R) R.SetLockdown(0) - R.notify_ai(1) + R.notify_ai(NEW_BORG) /obj/machinery/transformer/conveyor/New() ..() diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index c4c55383f6..c8c1854344 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -57,7 +57,7 @@ var/obj/item/weapon/vending_refill/refill_canister = null //The type of refill canisters used by this machine. -/obj/machinery/vending/New() +/obj/machinery/vending/Initialize() ..() wires = new /datum/wires/vending(src) if(refill_canister) //constructable vending machine @@ -162,7 +162,7 @@ while(R.amount>0) var/obj/O = new dump_path(loc) - step(O, pick(alldirs)) //we only drop 20% of the total of each products and spread it + step(O, pick(GLOB.alldirs)) //we only drop 20% of the total of each products and spread it R.amount -= 5 //around to not fill the turf with too many objects. dump_amount++ if(dump_amount > 15) //so we don't drop too many items (e.g. ClothesMate) @@ -528,6 +528,7 @@ if(icon_vend) //Show the vending animation if needed flick(icon_vend,src) new R.product_path(get_turf(src)) + feedback_add_details("vending_machine_usage","[R.product_path]|[src.type]") vend_ready = 1 return @@ -690,7 +691,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/machinery/vending/snack name = "\improper Getmore Chocolate Corp" - desc = "A snack machine courtesy of the Getmore Chocolate Corporation, based out of Mars" + desc = "A snack machine courtesy of the Getmore Chocolate Corporation, based out of Mars." product_slogans = "Try our new nougat bar!;Twice the calories for half the price!" product_ads = "The healthiest!;Award-winning chocolate bars!;Mmm! So good!;Oh my god it's so juicy!;Have a snack.;Snacks are good for you!;Have some more Getmore!;Best quality snacks straight from mars.;We love chocolate!;Try our new jerky!" icon_state = "snack" @@ -705,7 +706,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C name = "\improper Random Snackies" desc = "Uh oh!" -/obj/machinery/vending/snack/random/New() +/obj/machinery/vending/snack/random/Initialize() ..() var/T = pick(subtypesof(/obj/machinery/vending/snack) - /obj/machinery/vending/snack/random) new T(get_turf(src)) @@ -757,7 +758,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C name = "\improper Random Drinkies" desc = "Uh oh!" -/obj/machinery/vending/cola/random/New() +/obj/machinery/vending/cola/random/Initialize() ..() var/T = pick(subtypesof(/obj/machinery/vending/cola) - /obj/machinery/vending/cola/random) new T(get_turf(src)) @@ -911,7 +912,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/machinery/vending/hydronutrients name = "\improper NutriMax" - desc = "A plant nutrients vendor" + desc = "A plant nutrients vendor." product_slogans = "Aren't you glad you don't have to fertilize the natural way?;Now with 50% less stink!;Plants are people too!" product_ads = "We like plants!;Don't you want some?;The greenest thumbs ever.;We like big plants.;Soft soil..." icon_state = "nutri" @@ -994,8 +995,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/clothing/mask/joy = 1, /obj/item/clothing/head/cueball = 1, /obj/item/clothing/under/scratch = 1, - /obj/item/clothing/under/sailor = 1, - /obj/item/clothing/head/clownpiece = 1,/obj/item/clothing/under/clownpiece = 1, /obj/item/clothing/suit/clownpiece = 1) + /obj/item/clothing/under/sailor = 1) contraband = list(/obj/item/clothing/suit/judgerobe = 1,/obj/item/clothing/head/powdered_wig = 1,/obj/item/weapon/gun/magic/wand = 2,/obj/item/clothing/glasses/sunglasses/garb = 2, /obj/item/clothing/glasses/sunglasses/blindfold = 1, /obj/item/clothing/mask/muzzle = 2) premium = list(/obj/item/clothing/suit/pirate/captain = 2, /obj/item/clothing/head/pirate/captain = 2, /obj/item/clothing/head/helmet/roman = 1, /obj/item/clothing/head/helmet/roman/legionaire = 1, /obj/item/clothing/under/roman = 1, /obj/item/clothing/shoes/roman = 1, /obj/item/weapon/shield/riot/roman = 1, /obj/item/weapon/skub = 1) refill_canister = /obj/item/weapon/vending_refill/autodrobe @@ -1119,23 +1119,8 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/clothing/head/beanie=1, /obj/item/clothing/head/beanie/black=1, /obj/item/clothing/head/beanie/red=1, /obj/item/clothing/head/beanie/green=1, /obj/item/clothing/head/beanie/darkblue=1, /obj/item/clothing/head/beanie/purple=1, /obj/item/clothing/head/beanie/yellow=1, /obj/item/clothing/head/beanie/orange=1, /obj/item/clothing/head/beanie/cyan=1, /obj/item/clothing/head/beanie/christmas=1, /obj/item/clothing/head/beanie/striped=1, /obj/item/clothing/head/beanie/stripedred=1, /obj/item/clothing/head/beanie/stripedblue=1, /obj/item/clothing/head/beanie/stripedgreen=1, - /obj/item/clothing/suit/jacket/letterman_red=1, - /obj/item/clothing/under/wintercasualwear=1, - /obj/item/clothing/under/casualwear=1, - /obj/item/clothing/under/casualhoodie=1, - /obj/item/clothing/under/casualhoodie/skirt=1, - /obj/item/clothing/under/bb_sweater=2, - /obj/item/clothing/under/bb_sweater/blue=2, - /obj/item/clothing/under/bb_sweater/green=2, - /obj/item/clothing/under/bb_sweater/purple =2, - /obj/item/clothing/under/bb_sweater/red=2) - contraband = list(/obj/item/clothing/under/syndicate/tacticool=1,/obj/item/clothing/mask/balaclava=1,/obj/item/clothing/head/ushanka=1,/obj/item/clothing/under/soviet=1,/obj/item/weapon/storage/belt/fannypack/black=2,/obj/item/clothing/suit/jacket/letterman_syndie=1,/obj/item/clothing/under/jabroni=1, /obj/item/clothing/suit/vapeshirt=1, /obj/item/clothing/under/geisha=1, - /obj/item/clothing/under/wedding/bride_orange=1, - /obj/item/clothing/under/wedding/bride_purple=1, - /obj/item/clothing/under/wedding/bride_blue=1, - /obj/item/clothing/under/wedding/bride_red=1, - /obj/item/clothing/under/wedding/bride_white=1, - /obj/item/clothing/under/keyholesweater=1) + /obj/item/clothing/suit/jacket/letterman_red=1) + contraband = list(/obj/item/clothing/under/syndicate/tacticool=1,/obj/item/clothing/mask/balaclava=1,/obj/item/clothing/head/ushanka=1,/obj/item/clothing/under/soviet=1,/obj/item/weapon/storage/belt/fannypack/black=2,/obj/item/clothing/suit/jacket/letterman_syndie=1,/obj/item/clothing/under/jabroni=1, /obj/item/clothing/suit/vapeshirt=1, /obj/item/clothing/under/geisha=1) premium = list(/obj/item/clothing/under/suit_jacket/checkered=1,/obj/item/clothing/head/mailman=1,/obj/item/clothing/under/rank/mailman=1,/obj/item/clothing/suit/jacket/leather=1,/obj/item/clothing/suit/jacket/leather/overcoat=1,/obj/item/clothing/under/pants/mustangjeans=1,/obj/item/clothing/neck/necklace/dope=3,/obj/item/clothing/suit/jacket/letterman_nanotrasen=1) refill_canister = /obj/item/weapon/vending_refill/clothing diff --git a/code/game/machinery/wishgranter.dm b/code/game/machinery/wishgranter.dm index e42e2d72d8..cdaea6f875 100644 --- a/code/game/machinery/wishgranter.dm +++ b/code/game/machinery/wishgranter.dm @@ -39,7 +39,7 @@ user.dna.add_mutation(COLDRES) user.dna.add_mutation(TK) - ticker.mode.traitors += user.mind + SSticker.mode.traitors += user.mind user.mind.special_role = "Avatar of the Wish Granter" var/datum/objective/hijack/hijack = new diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm index fe43d27bcc..0b37758def 100644 --- a/code/game/mecha/combat/gygax.dm +++ b/code/game/mecha/combat/gygax.dm @@ -23,7 +23,7 @@ armor = list(melee = 40, bullet = 40, laser = 50, energy = 35, bomb = 20, bio = 0, rad = 0, fire = 100, acid = 100) max_temperature = 35000 leg_overload_coeff = 100 - operation_req_access = list(access_syndicate) + operation_req_access = list(GLOB.access_syndicate) wreckage = /obj/structure/mecha_wreckage/gygax/dark max_equip = 4 diff --git a/code/game/mecha/combat/honker.dm b/code/game/mecha/combat/honker.dm index 967ddf059e..83522bf709 100644 --- a/code/game/mecha/combat/honker.dm +++ b/code/game/mecha/combat/honker.dm @@ -10,7 +10,7 @@ armor = list(melee = -20, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100) max_temperature = 25000 infra_luminosity = 5 - operation_req_access = list(access_theatre) + operation_req_access = list(GLOB.access_theatre) wreckage = /obj/structure/mecha_wreckage/honker add_req_access = 0 max_equip = 3 @@ -68,7 +68,7 @@ diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index 348baf9f96..e62be31704 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -10,7 +10,7 @@ max_temperature = 60000 resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF infra_luminosity = 3 - operation_req_access = list(access_cent_specops) + operation_req_access = list(GLOB.access_cent_specops) wreckage = /obj/structure/mecha_wreckage/marauder add_req_access = 0 internal_damage_threshold = 25 @@ -45,7 +45,7 @@ desc = "Heavy-duty, command-type exosuit. This is a custom model, utilized only by high-ranking military personnel." name = "\improper Seraph" icon_state = "seraph" - operation_req_access = list(access_cent_specops) + operation_req_access = list(GLOB.access_cent_specops) step_in = 3 obj_integrity = 550 wreckage = /obj/structure/mecha_wreckage/seraph @@ -71,7 +71,7 @@ desc = "Heavy-duty, combat exosuit, developed off of the existing Marauder model." name = "\improper Mauler" icon_state = "mauler" - operation_req_access = list(access_syndicate) + operation_req_access = list(GLOB.access_syndicate) wreckage = /obj/structure/mecha_wreckage/mauler max_equip = 5 diff --git a/code/game/mecha/combat/reticence.dm b/code/game/mecha/combat/reticence.dm index 601937adcf..59028c4222 100644 --- a/code/game/mecha/combat/reticence.dm +++ b/code/game/mecha/combat/reticence.dm @@ -10,7 +10,7 @@ armor = list(melee = 25, bullet = 20, laser = 30, energy = 15, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100) max_temperature = 15000 wreckage = /obj/structure/mecha_wreckage/reticence - operation_req_access = list(access_theatre) + operation_req_access = list(GLOB.access_theatre) add_req_access = 0 internal_damage_threshold = 25 max_equip = 2 diff --git a/code/game/mecha/equipment/tools/mining_tools.dm b/code/game/mecha/equipment/tools/mining_tools.dm index 3ac2e54f7e..61151f086f 100644 --- a/code/game/mecha/equipment/tools/mining_tools.dm +++ b/code/game/mecha/equipment/tools/mining_tools.dm @@ -112,6 +112,7 @@ var/scanning = 0 /obj/item/mecha_parts/mecha_equipment/mining_scanner/New() + ..() START_PROCESSING(SSobj, src) /obj/item/mecha_parts/mecha_equipment/mining_scanner/attach(obj/mecha/M) diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm index 09f12d207e..e7e8379095 100644 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -199,11 +199,11 @@ var/mode = 0 //0 - deconstruct, 1 - wall or floor, 2 - airlock. /obj/item/mecha_parts/mecha_equipment/rcd/New() - rcd_list += src + GLOB.rcd_list += src ..() /obj/item/mecha_parts/mecha_equipment/rcd/Destroy() - rcd_list -= src + GLOB.rcd_list -= src return ..() /obj/item/mecha_parts/mecha_equipment/rcd/action(atom/target) @@ -420,7 +420,7 @@ if(!PN) PN = new() - powernets += PN + GLOB.powernets += PN NC.powernet = PN PN.cables += NC NC.mergeConnectedNetworks(NC.d2) diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index f669960f88..134bd78e84 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -95,7 +95,7 @@ return interact(user) -/obj/machinery/computer/mech_bay_power_console/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) +/obj/machinery/computer/mech_bay_power_console/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "mech_bay_power_console", "Mech Bay Power Control Console", 400, 170, master_ui, state) @@ -130,7 +130,7 @@ return recharge_port = locate(/obj/machinery/mech_bay_recharge_port) in range(1) if(!recharge_port ) - for(var/D in cardinal) + for(var/D in GLOB.cardinal) var/turf/A = get_step(src, D) A = get_step(A, D) recharge_port = locate(/obj/machinery/mech_bay_recharge_port) in A diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 83900222e6..ec673b3e86 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -8,7 +8,7 @@ use_power = 1 idle_power_usage = 20 active_power_usage = 5000 - req_access = list(access_robotics) + req_access = list(GLOB.access_robotics) var/time_coeff = 1 var/component_coeff = 1 var/datum/material_container/materials @@ -37,7 +37,7 @@ /obj/machinery/mecha_part_fabricator/New() ..() files = new /datum/research(src) //Setup the research data holder. - materials = new(src, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM)) + materials = new(src, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE)) var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/mechfab(null) B.apply_default_parts(src) @@ -430,22 +430,13 @@ return 1 if(istype(W, /obj/item/stack/sheet)) - if(panel_open) - to_chat(user, "You can't load [src] while it's opened!") - return 1 - if(being_built) - to_chat(user, "\The [src] is currently processing! Please wait until completion.") + + if(!is_insertion_ready(user)) return 1 var/material_amount = materials.get_item_material_amount(W) - if(!material_amount) - to_chat(user, "This object does not contain sufficient amounts of materials to be accepted by [src].") - return 1 - if(!materials.has_space(material_amount)) - to_chat(user, "\The [src] is full. Please remove some materials from [src] in order to insert more.") - return 1 - if(!user.temporarilyRemoveItemFromInventory(W)) - to_chat(user, "\The [W] is stuck to you and cannot be placed into [src].") + + if(!try_insert(user, W, material_amount)) return 1 var/inserted = materials.insert_item(W) @@ -457,7 +448,31 @@ var/mat_overlay = "fab-load-[material2name(W.materials[1])]" add_overlay(mat_overlay) sleep(10) - cut_overlay(mat_overlay) //No matter what the overlay shall still be deleted + if(!QDELETED(src)) + cut_overlay(mat_overlay) //No matter what the overlay shall still be deleted + + updateUsrDialog() + + else if(istype(W, /obj/item/weapon/ore/bluespace_crystal)) + + if(!is_insertion_ready(user)) + return 1 + + var/material_amount = materials.get_item_material_amount(W) + + if(!try_insert(user, W, material_amount)) + return 1 + + var/inserted = materials.insert_item(W) + if(inserted) + to_chat(user, "You add [W] to the [src].") + if(W && W.materials.len) + qdel(W) + var/mat_overlay = "fab-load-bluespace" + add_overlay(mat_overlay) + sleep(10) + if(!QDELETED(src)) + cut_overlay(mat_overlay) updateUsrDialog() @@ -466,3 +481,27 @@ /obj/machinery/mecha_part_fabricator/proc/material2name(ID) return copytext(ID,2) + +/obj/machinery/mecha_part_fabricator/proc/is_insertion_ready(mob/user) + if(panel_open) + to_chat(user, "You can't load [src] while it's opened!") + return FALSE + if(being_built) + to_chat(user, "\The [src] is currently processing! Please wait until completion.") + return FALSE + + return TRUE + + +/obj/machinery/mecha_part_fabricator/proc/try_insert(mob/user, obj/item/I, material_amount) + if(!material_amount) + to_chat(user, "This object does not contain sufficient amounts of materials to be accepted by [src].") + return FALSE + if(!materials.has_space(material_amount)) + to_chat(user, "\The [src] is full. Please remove some materials from [src] in order to insert more.") + return FALSE + if(!user.temporarilyRemoveItemFromInventory(I)) + to_chat(user, "\The [I] is stuck to you and cannot be placed into [src].") + return FALSE + + return TRUE \ No newline at end of file diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index f87c2e0166..99aad7743f 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -65,7 +65,7 @@ var/internal_damage = 0 //contains bitflags var/list/operation_req_access = list()//required access level for mecha operation - var/list/internals_req_access = list(access_engine,access_robotics)//required access level to open cell compartment + var/list/internals_req_access = list(GLOB.access_engine,GLOB.access_robotics)//required access level to open cell compartment var/wreckage @@ -132,11 +132,11 @@ smoke_system.attach(src) add_cell() START_PROCESSING(SSobj, src) - poi_list |= src + GLOB.poi_list |= src log_message("[src.name] created.") - mechas_list += src //global mech list + GLOB.mechas_list += src //global mech list prepare_huds() - var/datum/atom_hud/data/diagnostic/diag_hud = huds[DATA_HUD_DIAGNOSTIC] + var/datum/atom_hud/data/diagnostic/diag_hud = GLOB.huds[DATA_HUD_DIAGNOSTIC] diag_hud.add_to_hud(src) diag_hud_set_mechhealth() diag_hud_set_mechcell() @@ -185,7 +185,7 @@ if(AI) AI.gib() //No wreck, no AI to recover STOP_PROCESSING(SSobj, src) - poi_list.Remove(src) + GLOB.poi_list.Remove(src) equipment.Cut() cell = null internal_tank = null @@ -200,7 +200,7 @@ qdel(smoke_system) smoke_system = null - mechas_list -= src //global mech list + GLOB.mechas_list -= src //global mech list return ..() //////////////////////// @@ -382,17 +382,16 @@ /obj/mecha/proc/drop_item()//Derpfix, but may be useful in future for engineering exosuits. return -/obj/mecha/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans) +/obj/mecha/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) if(speaker == occupant) if(radio.broadcasting) - radio.talk_into(speaker, text, , spans) + radio.talk_into(speaker, text, , spans, message_language) //flick speech bubble var/list/speech_bubble_recipients = list() for(var/mob/M in get_hearers_in_view(7,src)) if(M.client) speech_bubble_recipients.Add(M.client) - spawn(0) - flick_overlay(image('icons/mob/talk.dmi', src, "machine[say_test(raw_message)]",MOB_LAYER+1), speech_bubble_recipients, 30) + INVOKE_ASYNC(GLOBAL_PROC, /.proc/flick_overlay, image('icons/mob/talk.dmi', src, "machine[say_test(raw_message)]",MOB_LAYER+1), speech_bubble_recipients, 30) //////////////////////////// ///// Action processing //// @@ -663,9 +662,11 @@ AI.ai_restore_power()//So the AI initially has power. AI.control_disabled = 1 AI.radio_enabled = 0 + AI.disconnect_shell() + RemoveActions(AI, TRUE) + occupant = null AI.forceMove(card) card.AI = AI - occupant = null AI.controlled_mech = null AI.remote_control = null icon_state = initial(icon_state)+"-open" @@ -686,10 +687,12 @@ if(!AI) to_chat(user, "There is no AI currently installed on this device.") return - else if(AI.stat || !AI.client) + if(AI.deployed_shell) //Recall AI if shelled so it can be checked for a client + AI.disconnect_shell() + if(AI.stat || !AI.client) to_chat(user, "[AI.name] is currently unresponsive, and cannot be uploaded.") return - else if(occupant || dna_lock) //Normal AIs cannot steal mechs! + if(occupant || dna_lock) //Normal AIs cannot steal mechs! to_chat(user, "Access denied. [name] is [occupant ? "currently occupied" : "secured with a DNA lock"].") return AI.control_disabled = 0 @@ -715,7 +718,10 @@ to_chat(AI, "[AI.can_dominate_mechs ? "Takeover of [name] complete! You are now loaded onto the onboard computer. Do not attempt to leave the station sector!" \ : "You have been uploaded to a mech's onboard computer."]") to_chat(AI, "Use Middle-Mouse to activate mech functions and equipment. Click normally for AI interactions.") - GrantActions(AI, !AI.can_dominate_mechs) + if(interaction == AI_TRANS_FROM_CARD) + GrantActions(AI, FALSE) //No eject/return to core action for AI uploaded by card + else + GrantActions(AI, !AI.can_dominate_mechs) //An actual AI (simple_animal mecha pilot) entering the mech @@ -1005,7 +1011,7 @@ /obj/mecha/proc/log_message(message as text,red=null) log.len++ - log[log.len] = list("time"="[worldtime2text()]","date","year"="[year_integer+540]","message"="[red?"":null][message][red?"":null]") + log[log.len] = list("time"="[worldtime2text()]","date","year"="[GLOB.year_integer+540]","message"="[red?"":null][message][red?"":null]") return log.len /obj/mecha/proc/log_append_to_last(message as text,red=null) @@ -1013,8 +1019,8 @@ last_entry["message"] += "
[red?"":null][message][red?"":null]" return -var/year = time2text(world.realtime,"YYYY") -var/year_integer = text2num(year) // = 2013??? +GLOBAL_VAR_INIT(year, time2text(world.realtime,"YYYY")) +GLOBAL_VAR_INIT(year_integer, text2num(year)) // = 2013??? /////////////////////// ///// Power stuff ///// diff --git a/code/game/mecha/mecha_actions.dm b/code/game/mecha/mecha_actions.dm index 3a3d979537..65fa8b49b9 100644 --- a/code/game/mecha/mecha_actions.dm +++ b/code/game/mecha/mecha_actions.dm @@ -25,7 +25,8 @@ var/obj/mecha/chassis /datum/action/innate/mecha/Grant(mob/living/L, obj/mecha/M) - chassis = M + if(M) + chassis = M ..() /datum/action/innate/mecha/Destroy() diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm index 4b70c4aae3..2d6c7b34d5 100644 --- a/code/game/mecha/mecha_control_console.dm +++ b/code/game/mecha/mecha_control_console.dm @@ -3,7 +3,7 @@ desc = "Used to remotely locate or lockdown exosuits." icon_screen = "mecha" icon_keyboard = "tech_key" - req_access = list(access_robotics) + req_access = list(GLOB.access_robotics) circuit = /obj/item/weapon/circuitboard/computer/mecha_control var/list/located = list() var/screen = 0 @@ -17,7 +17,7 @@ if(screen == 0) dat += "

Tracking beacons data

" var/list/trackerlist = list() - for(var/obj/mecha/MC in mechas_list) + for(var/obj/mecha/MC in GLOB.mechas_list) trackerlist += MC.trackers for(var/obj/item/mecha_parts/mecha_tracking/TR in trackerlist) var/answer = TR.get_mecha_info() @@ -75,13 +75,13 @@ return 0 var/obj/mecha/M = src.loc var/cell_charge = M.get_charge() - var/answer = {"Name: [M.name]
- Integrity: [M.obj_integrity/M.max_integrity*100]%
- Cell charge: [isnull(cell_charge)?"Not found":"[M.cell.percent()]%"]
- Airtank: [M.return_pressure()]kPa
- Pilot: [M.occupant||"None"]
- Location: [get_area(M)||"Unknown"]
- Active equipment: [M.selected||"None"]
"} + var/answer = {"Name: [M.name] +Integrity: [M.obj_integrity/M.max_integrity*100]% +Cell charge: [isnull(cell_charge)?"Not found":"[M.cell.percent()]%"] +Airtank: [M.return_pressure()]kPa +Pilot: [M.occupant||"None"] +Location: [get_area(M)||"Unknown"] +Active equipment: [M.selected||"None"] "} if(istype(M, /obj/mecha/working/ripley)) var/obj/mecha/working/ripley/RM = M answer += "Used cargo space: [RM.cargo.len/RM.cargo_capacity*100]%
" diff --git a/code/game/mecha/mecha_defense.dm b/code/game/mecha/mecha_defense.dm index 512629cae3..ccb7901d63 100644 --- a/code/game/mecha/mecha_defense.dm +++ b/code/game/mecha/mecha_defense.dm @@ -72,7 +72,7 @@ /obj/mecha/attack_animal(mob/living/simple_animal/user) log_message("Attack by simple animal. Attacker - [user].",1) if(!user.melee_damage_upper && !user.obj_damage) - user.emote("custom", message = "[user.friendly] [src]") + user.emote("custom", message = "[user.friendly] [src].") return 0 else var/play_soundeffect = 1 @@ -312,7 +312,7 @@ L.narsie_act() /obj/mecha/ratvar_act() - if((ratvar_awakens || clockwork_gateway_activated) && occupant) + if((GLOB.ratvar_awakens || GLOB.clockwork_gateway_activated) && occupant) if(is_servant_of_ratvar(occupant)) //reward the minion that got a mech by repairing it full_repair(TRUE) else diff --git a/code/game/mecha/mecha_topic.dm b/code/game/mecha/mecha_topic.dm index 5a6d7314bb..8474db9077 100644 --- a/code/game/mecha/mecha_topic.dm +++ b/code/game/mecha/mecha_topic.dm @@ -20,7 +20,7 @@ diff --git a/code/game/mecha/medical/odysseus.dm b/code/game/mecha/medical/odysseus.dm index d98fe5b5e8..8baf723a86 100644 --- a/code/game/mecha/medical/odysseus.dm +++ b/code/game/mecha/medical/odysseus.dm @@ -17,7 +17,7 @@ if(H.glasses && istype(H.glasses, /obj/item/clothing/glasses/hud)) occupant_message("Your [H.glasses] prevent you from using the built-in medical hud.") else - var/datum/atom_hud/data/human/medical/advanced/A = huds[DATA_HUD_MEDICAL_ADVANCED] + var/datum/atom_hud/data/human/medical/advanced/A = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] A.add_hud_to(H) builtin_hud_user = 1 return 1 @@ -27,7 +27,7 @@ /obj/mecha/medical/odysseus/go_out() if(ishuman(occupant) && builtin_hud_user) var/mob/living/carbon/human/H = occupant - var/datum/atom_hud/data/human/medical/advanced/A = huds[DATA_HUD_MEDICAL_ADVANCED] + var/datum/atom_hud/data/human/medical/advanced/A = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] A.remove_hud_from(H) ..() return diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index 7df977fd93..78aa6d49e8 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -38,7 +38,7 @@ return TRUE //procs that handle the actual buckling and unbuckling -/atom/movable/proc/buckle_mob(mob/living/M, force = 0, check_loc = 1) +/atom/movable/proc/buckle_mob(mob/living/M, force = FALSE, check_loc = TRUE) if(!buckled_mobs) buckled_mobs = list() @@ -72,14 +72,14 @@ return 1 -/obj/buckle_mob(mob/living/M, force = 0, check_loc = 1) +/obj/buckle_mob(mob/living/M, force = FALSE, check_loc = TRUE) . = ..() if(.) if(resistance_flags & ON_FIRE) //Sets the mob on fire if you buckle them to a burning atom/movableect M.adjust_fire_stacks(1) M.IgniteMob() -/atom/movable/proc/unbuckle_mob(mob/living/buckled_mob, force=0) +/atom/movable/proc/unbuckle_mob(mob/living/buckled_mob, force=FALSE) if(istype(buckled_mob) && buckled_mob.buckled == src && (buckled_mob.can_unbuckle() || force)) . = buckled_mob buckled_mob.buckled = null @@ -90,7 +90,7 @@ post_buckle_mob(.) -/atom/movable/proc/unbuckle_all_mobs(force=0) +/atom/movable/proc/unbuckle_all_mobs(force=FALSE) if(!has_buckled_mobs()) return for(var/m in buckled_mobs) @@ -103,7 +103,7 @@ //Wrapper procs that handle sanity and user feedback -/atom/movable/proc/user_buckle_mob(mob/living/M, mob/user, check_loc = 1) +/atom/movable/proc/user_buckle_mob(mob/living/M, mob/user, check_loc = TRUE) if(!in_range(user, src) || user.stat || user.restrained()) return 0 diff --git a/code/game/objects/effects/anomalies.dm b/code/game/objects/effects/anomalies.dm index 64ca07675a..071c95cb46 100644 --- a/code/game/objects/effects/anomalies.dm +++ b/code/game/objects/effects/anomalies.dm @@ -17,9 +17,9 @@ var/countdown_colour var/obj/effect/countdown/anomaly/countdown -/obj/effect/anomaly/New() +/obj/effect/anomaly/Initialize(mapload, new_lifespan) ..() - poi_list |= src + GLOB.poi_list |= src START_PROCESSING(SSobj, src) impact_area = get_area(src) @@ -31,6 +31,8 @@ if(IsMultiple(aSignal.frequency, 2))//signaller frequencies are always uneven! aSignal.frequency++ + if(new_lifespan) + lifespan = new_lifespan death_time = world.time + lifespan countdown = new(src) if(countdown_colour) @@ -45,14 +47,14 @@ qdel(src) /obj/effect/anomaly/Destroy() - poi_list.Remove(src) + GLOB.poi_list.Remove(src) STOP_PROCESSING(SSobj, src) qdel(countdown) return ..() /obj/effect/anomaly/proc/anomalyEffect() if(prob(movechance)) - step(src,pick(alldirs)) + step(src,pick(GLOB.alldirs)) /obj/effect/anomaly/proc/detonate() return @@ -126,7 +128,7 @@ density = 1 var/canshock = 0 var/shockdamage = 20 - var/explosive = 1 + var/explosive = TRUE /obj/effect/anomaly/flux/New() ..() @@ -196,7 +198,7 @@ // Calculate new position (searches through beacons in world) var/obj/item/device/radio/beacon/chosen var/list/possible = list() - for(var/obj/item/device/radio/beacon/W in teleportbeacons) + for(var/obj/item/device/radio/beacon/W in GLOB.teleportbeacons) possible += W if(possible.len > 0) diff --git a/code/game/objects/effects/bump_teleporter.dm b/code/game/objects/effects/bump_teleporter.dm index 05214f9675..c249356239 100644 --- a/code/game/objects/effects/bump_teleporter.dm +++ b/code/game/objects/effects/bump_teleporter.dm @@ -1,5 +1,3 @@ -var/list/obj/effect/bump_teleporter/BUMP_TELEPORTERS = list() - /obj/effect/bump_teleporter name = "bump-teleporter" icon = 'icons/mob/screen_gen.dmi' @@ -11,12 +9,14 @@ var/list/obj/effect/bump_teleporter/BUMP_TELEPORTERS = list() density = 1 opacity = 0 + var/static/list/AllTeleporters + /obj/effect/bump_teleporter/New() ..() - BUMP_TELEPORTERS += src + LAZYADD(AllTeleporters, src) /obj/effect/bump_teleporter/Destroy() - BUMP_TELEPORTERS -= src + LAZYREMOVE(AllTeleporters, src) return ..() /obj/effect/bump_teleporter/Bumped(atom/user) @@ -28,7 +28,7 @@ var/list/obj/effect/bump_teleporter/BUMP_TELEPORTERS = list() //user.loc = src.loc //Stop at teleporter location, there is nowhere to teleport to. return - for(var/obj/effect/bump_teleporter/BT in BUMP_TELEPORTERS) + for(var/obj/effect/bump_teleporter/BT in AllTeleporters) if(BT.id == src.id_target) usr.loc = BT.loc //Teleport to location with correct id. return \ No newline at end of file diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index b8ea00bbb0..31cfdeea53 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -20,6 +20,16 @@ blood_DNA |= C.blood_DNA.Copy() ..() +/obj/effect/decal/cleanable/blood/old + name = "dried blood" + desc = "Looks like it's been here a while. Eew." + bloodiness = 0 + +/obj/effect/decal/cleanable/blood/old/Initialize() + ..() + icon_state += "-old" //This IS necessary because the parent /blood type uses icon randomization. + blood_DNA["Non-human DNA"] = "A+" + /obj/effect/decal/cleanable/blood/splatter random_icon_states = list("gibbl1", "gibbl2", "gibbl3", "gibbl4", "gibbl5") @@ -50,7 +60,7 @@ random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6") mergeable_decal = 0 -/obj/effect/decal/cleanable/blood/gibs/New() +/obj/effect/decal/cleanable/blood/gibs/Initialize() ..() reagents.add_reagent("liquidgibs", 5) @@ -83,13 +93,23 @@ /obj/effect/decal/cleanable/blood/gibs/torso random_icon_states = list("gibtorso") - /obj/effect/decal/cleanable/blood/gibs/limb random_icon_states = list("gibleg", "gibarm") /obj/effect/decal/cleanable/blood/gibs/core random_icon_states = list("gibmid1", "gibmid2", "gibmid3") +/obj/effect/decal/cleanable/blood/gibs/old + name = "old rotting gibs" + desc = "Space Jesus, why didn't anyone clean this up? It smells terrible." + bloodiness = 0 + +/obj/effect/decal/cleanable/blood/gibs/old/Initialize() + ..() + setDir(pick(1,2,4,8)) + icon_state += "-old" + blood_DNA["Non-human DNA"] = "A+" + /obj/effect/decal/cleanable/blood/drip name = "drips of blood" @@ -139,23 +159,23 @@ /obj/effect/decal/cleanable/blood/footprints/update_icon() cut_overlays() - for(var/Ddir in cardinal) + for(var/Ddir in GLOB.cardinal) if(entered_dirs & Ddir) var/image/I - if(bloody_footprints_cache["entered-[blood_state]-[Ddir]"]) - I = bloody_footprints_cache["entered-[blood_state]-[Ddir]"] + if(GLOB.bloody_footprints_cache["entered-[blood_state]-[Ddir]"]) + I = GLOB.bloody_footprints_cache["entered-[blood_state]-[Ddir]"] else I = image(icon,"[blood_state]1",dir = Ddir) - bloody_footprints_cache["entered-[blood_state]-[Ddir]"] = I + GLOB.bloody_footprints_cache["entered-[blood_state]-[Ddir]"] = I if(I) add_overlay(I) if(exited_dirs & Ddir) var/image/I - if(bloody_footprints_cache["exited-[blood_state]-[Ddir]"]) - I = bloody_footprints_cache["exited-[blood_state]-[Ddir]"] + if(GLOB.bloody_footprints_cache["exited-[blood_state]-[Ddir]"]) + I = GLOB.bloody_footprints_cache["exited-[blood_state]-[Ddir]"] else I = image(icon,"[blood_state]2",dir = Ddir) - bloody_footprints_cache["exited-[blood_state]-[Ddir]"] = I + GLOB.bloody_footprints_cache["exited-[blood_state]-[Ddir]"] = I if(I) add_overlay(I) diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm index 1fef05d7fc..468eb367f8 100644 --- a/code/game/objects/effects/decals/Cleanable/misc.dm +++ b/code/game/objects/effects/decals/Cleanable/misc.dm @@ -11,7 +11,7 @@ icon_state = "ash" mergeable_decal = 0 -/obj/effect/decal/cleanable/ash/New() +/obj/effect/decal/cleanable/ash/Initialize() ..() reagents.add_reagent("ash", 30) pixel_x = rand(-5, 5) @@ -21,7 +21,7 @@ name = "large pile of ashes" icon_state = "big_ash" -/obj/effect/decal/cleanable/ash/large/New() +/obj/effect/decal/cleanable/ash/large/Initialize() ..() reagents.add_reagent("ash", 30) //double the amount of ash. @@ -104,6 +104,14 @@ viruses = null return ..() +/obj/effect/decal/cleanable/vomit/old + name = "crusty dried vomit" + desc = "You try not to look at the chunks, and fail." + +/obj/effect/decal/cleanable/vomit/old/Initialize() + ..() + icon_state += "-old" + /obj/effect/decal/cleanable/tomato_smudge name = "tomato smudge" desc = "It's red." @@ -149,7 +157,7 @@ if(severity == 1) //so shreds created during an explosion aren't deleted by the explosion. qdel(src) -/obj/effect/decal/cleanable/shreds/New() +/obj/effect/decal/cleanable/shreds/Initialize() pixel_x = rand(-10, 10) pixel_y = rand(-10, 10) ..() @@ -163,7 +171,7 @@ /obj/effect/decal/cleanable/glitter name = "generic glitter pile" - desc = "the herpes of arts and crafts" + desc = "The herpes of arts and crafts." icon = 'icons/effects/tile_effects.dmi' gender = NEUTER diff --git a/code/game/objects/effects/decals/Cleanable/robots.dm b/code/game/objects/effects/decals/Cleanable/robots.dm index 1eae55ea76..30bfd77b29 100644 --- a/code/game/objects/effects/decals/Cleanable/robots.dm +++ b/code/game/objects/effects/decals/Cleanable/robots.dm @@ -48,7 +48,7 @@ blood_state = BLOOD_STATE_OIL bloodiness = MAX_SHOE_BLOODINESS -/obj/effect/decal/cleanable/oil/New() +/obj/effect/decal/cleanable/oil/Initialize() ..() reagents.add_reagent("oil", 30) diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm index 6364658984..f38d4e9782 100644 --- a/code/game/objects/effects/decals/cleanable.dm +++ b/code/game/objects/effects/decals/cleanable.dm @@ -6,7 +6,7 @@ var/bloodiness = 0 //0-100, amount of blood in this decal, used for making footprints and affecting the alpha of bloody footprints var/mergeable_decal = 1 //when two of these are on a same tile or do we need to merge them into just one? -/obj/effect/decal/cleanable/New() +/obj/effect/decal/cleanable/Initialize(mapload) if (random_icon_states && length(src.random_icon_states) > 0) src.icon_state = pick(src.random_icon_states) create_reagents(300) @@ -88,4 +88,4 @@ if((blood_state != BLOOD_STATE_OIL) && (blood_state != BLOOD_STATE_NOT_BLOODY)) return bloodiness else - return 0 \ No newline at end of file + return 0 diff --git a/code/game/objects/effects/decals/crayon.dm b/code/game/objects/effects/decals/crayon.dm index 8628bedefe..af205fd132 100644 --- a/code/game/objects/effects/decals/crayon.dm +++ b/code/game/objects/effects/decals/crayon.dm @@ -6,14 +6,13 @@ gender = NEUTER var/do_icon_rotate = TRUE -/obj/effect/decal/cleanable/crayon/New(location, main = "#FFFFFF", var/type = "rune1", var/e_name = "rune", var/rotation = 0, var/alt_icon = null) +/obj/effect/decal/cleanable/crayon/Initialize(mapload, main = "#FFFFFF", var/type = "rune1", var/e_name = "rune", var/rotation = 0, var/alt_icon = null) ..() - loc = location - + name = e_name desc = "A [name] vandalizing the station." if(type == "poseur tag") - type = pick(gang_name_pool) + type = pick(GLOB.gang_name_pool) if(alt_icon) icon = alt_icon @@ -32,17 +31,17 @@ do_icon_rotate = FALSE //These are designed to always face south, so no rotation please. var/datum/gang/gang -/obj/effect/decal/cleanable/crayon/gang/New(location, var/datum/gang/G, var/e_name = "gang tag", var/rotation = 0) +/obj/effect/decal/cleanable/crayon/gang/Initialize(mapload, var/datum/gang/G, var/e_name = "gang tag", var/rotation = 0) if(!type || !G) qdel(src) - var/area/territory = get_area(location) + var/area/territory = get_area(src) gang = G var/newcolor = G.color_hex icon_state = G.name G.territory_new |= list(territory.type = territory.name) - ..(location, newcolor, icon_state, e_name, rotation) + ..(mapload, newcolor, icon_state, e_name, rotation) /obj/effect/decal/cleanable/crayon/gang/Destroy() var/area/territory = get_area(src) diff --git a/code/game/objects/effects/decals/decal.dm b/code/game/objects/effects/decals/decal.dm index 69c49235b8..42555cd2d5 100644 --- a/code/game/objects/effects/decals/decal.dm +++ b/code/game/objects/effects/decals/decal.dm @@ -10,6 +10,10 @@ if(!(resistance_flags & FIRE_PROOF)) //non fire proof decal or being burned by lava qdel(src) +/obj/effect/decal/HandleTurfChange(turf/T) + ..() + if(T == loc && (isspaceturf(T) || isclosedturf(T) || islava(T) || istype(T, /turf/open/water) || istype(T, /turf/open/chasm))) + qdel(src) /obj/effect/turf_decal var/group = TURF_DECAL_PAINT @@ -54,4 +58,10 @@ icon_state = "bot" /obj/effect/turf_decal/loading_area - icon_state = "loading_area" \ No newline at end of file + icon_state = "loading_area" + +/obj/effect/turf_decal/sand + icon_state = "sandyfloor" + +/obj/effect/turf_decal/sand/plating + icon_state = "sandyplating" \ 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 e3b1618222..c2146daa82 100644 --- a/code/game/objects/effects/decals/misc.dm +++ b/code/game/objects/effects/decals/misc.dm @@ -5,11 +5,12 @@ layer = POINT_LAYER duration = 25 -/obj/effect/overlay/temp/point/New(atom/target, set_invis = 0) +/obj/effect/overlay/temp/point/Initialize(mapload, set_invis = 0) ..() - loc = get_turf(target) - pixel_x = target.pixel_x - pixel_y = target.pixel_y + var/atom/old_loc = loc + loc = get_turf(src) + pixel_x = old_loc.pixel_x + pixel_y = old_loc.pixel_y invisibility = set_invis //Used by spraybottles. @@ -30,4 +31,4 @@ desc = "A lightweight support lattice." icon = 'icons/obj/smooth_structures/lattice.dmi' icon_state = "lattice" - density = 1 \ No newline at end of file + density = 1 diff --git a/code/game/objects/effects/decals/remains.dm b/code/game/objects/effects/decals/remains.dm index 6b8fafd517..3d079d705b 100644 --- a/code/game/objects/effects/decals/remains.dm +++ b/code/game/objects/effects/decals/remains.dm @@ -17,4 +17,8 @@ /obj/effect/decal/remains/robot desc = "They look like the remains of something mechanical. They have a strange aura about them." icon = 'icons/mob/robots.dmi' - icon_state = "remainsrobot" \ No newline at end of file + icon_state = "remainsrobot" + +/obj/effect/decal/cleanable/robot_debris/old + name = "dusty robot debris" + desc = "Looks like nobody has touched this in a while." \ No newline at end of file diff --git a/code/game/objects/effects/effect_system/effect_system.dm b/code/game/objects/effects/effect_system/effect_system.dm index 39ebc92df0..34b20fde6f 100644 --- a/code/game/objects/effects/effect_system/effect_system.dm +++ b/code/game/objects/effects/effect_system/effect_system.dm @@ -13,12 +13,12 @@ would spawn and follow the beaker, even if it is carried or thrown. /obj/effect/particle_effect/New() ..() - if(ticker) - cameranet.updateVisibility(src) + if(SSticker) + GLOB.cameranet.updateVisibility(src) /obj/effect/particle_effect/Destroy() - if(ticker) - cameranet.updateVisibility(src) + if(SSticker) + GLOB.cameranet.updateVisibility(src) . = ..() /datum/effect_system @@ -60,9 +60,9 @@ would spawn and follow the beaker, even if it is carried or thrown. total_effects++ var/direction if(cardinals) - direction = pick(cardinal) + direction = pick(GLOB.cardinal) else - direction = pick(alldirs) + direction = pick(GLOB.alldirs) var/steps_amt = pick(1,2,3) for(var/j in 1 to steps_amt) sleep(5) diff --git a/code/game/objects/effects/effect_system/effects_explosion.dm b/code/game/objects/effects/effect_system/effects_explosion.dm index c8d54842b6..bd9a54880d 100644 --- a/code/game/objects/effects/effect_system/effects_explosion.dm +++ b/code/game/objects/effects/effect_system/effects_explosion.dm @@ -15,7 +15,7 @@ for(var/i in 1 to number) spawn(0) var/obj/effect/particle_effect/expl_particles/expl = new /obj/effect/particle_effect/expl_particles(location) - var/direct = pick(alldirs) + var/direct = pick(GLOB.alldirs) var/steps_amt = pick(1;25,2;50,3,4;200) for(var/j in 1 to steps_amt) sleep(1) diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm index 3f89015360..a34e30e689 100644 --- a/code/game/objects/effects/effect_system/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/effects_smoke.dm @@ -73,6 +73,8 @@ /obj/effect/particle_effect/smoke/proc/spread_smoke() var/turf/t_loc = get_turf(src) + if(!t_loc) + return var/list/newsmokes = list() for(var/turf/T in t_loc.GetAtmosAdjacentTurfs()) var/obj/effect/particle_effect/smoke/foundsmoke = locate() in T //Don't spread smoke where there's already smoke! @@ -82,7 +84,7 @@ smoke_mob(L) var/obj/effect/particle_effect/smoke/S = new type(T) reagents.copy_to(S, reagents.total_volume) - S.setDir(pick(cardinal)) + S.setDir(pick(GLOB.cardinal)) S.amount = amount-1 S.add_atom_colour(color, FIXED_COLOUR_PRIORITY) S.lifetime = lifetime diff --git a/code/game/objects/effects/effect_system/effects_water.dm b/code/game/objects/effects/effect_system/effects_water.dm index e12894d970..0cd476e001 100644 --- a/code/game/objects/effects/effect_system/effects_water.dm +++ b/code/game/objects/effects/effect_system/effects_water.dm @@ -34,7 +34,7 @@ // will always spawn at the items location, even if it's moved. /* Example: -var/datum/effect_system/steam_spread/steam = new /datum/effect_system/steam_spread() -- creates new system + var/datum/effect_system/steam_spread/steam = new /datum/effect_system/steam_spread() -- creates new system steam.set_up(5, 0, mob.loc) -- sets up variables OPTIONAL: steam.attach(mob) steam.start() -- spawns the effect diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm index 80255d3e6c..9b0702edbe 100644 --- a/code/game/objects/effects/glowshroom.dm +++ b/code/game/objects/effects/glowshroom.dm @@ -1,9 +1,5 @@ //separate dm since hydro is getting bloated already -var/list/blacklisted_glowshroom_turfs = typecacheof(list( - /turf/open/floor/plating/lava, - /turf/open/floor/plating/beach/water)) - /obj/structure/glowshroom name = "glowshroom" desc = "Mycena Bregprox, a species of mushroom that glows in the dark." @@ -20,6 +16,9 @@ var/list/blacklisted_glowshroom_turfs = typecacheof(list( var/generation = 1 var/spreadIntoAdjacentChance = 60 var/obj/item/seeds/myseed = /obj/item/seeds/glowshroom + var/static/list/blacklisted_glowshroom_turfs = typecacheof(list( + /turf/open/floor/plating/lava, + /turf/open/floor/plating/beach/water)) /obj/structure/glowshroom/glowcap name = "glowcap" @@ -110,7 +109,7 @@ var/list/blacklisted_glowshroom_turfs = typecacheof(list( var/placeCount = 1 for(var/obj/structure/glowshroom/shroom in newLoc) shroomCount++ - for(var/wallDir in cardinal) + for(var/wallDir in GLOB.cardinal) var/turf/isWall = get_step(newLoc,wallDir) if(isWall.density) placeCount++ @@ -131,7 +130,7 @@ var/list/blacklisted_glowshroom_turfs = typecacheof(list( /obj/structure/glowshroom/proc/CalcDir(turf/location = loc) var/direction = 16 - for(var/wallDir in cardinal) + for(var/wallDir in GLOB.cardinal) var/turf/newTurf = get_step(location,wallDir) if(newTurf.density) direction |= wallDir diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index a8fc5a4ba1..4194d9b76e 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -8,63 +8,10 @@ /obj/effect/landmark/New() ..() tag = text("landmark*[]", name) - landmarks_list += src - - switch(name) //some of these are probably obsolete - if("monkey") - monkeystart += loc - qdel(src) - return - if("start") - newplayer_start += loc - qdel(src) - return - if("wizard") - wizardstart += loc - qdel(src) - return - if("JoinLate") - latejoin += loc - qdel(src) - return - if("prisonwarp") - prisonwarp += loc - qdel(src) - return - if("Holding Facility") - holdingfacility += loc - if("tdome1") - tdome1 += loc - if("tdome2") - tdome2 += loc - if("tdomeadmin") - tdomeadmin += loc - if("tdomeobserve") - tdomeobserve += loc - if("prisonsecuritywarp") - prisonsecuritywarp += loc - qdel(src) - return - if("blobstart") - blobstart += loc - qdel(src) - return - if("secequipment") - secequipment += loc - qdel(src) - return - if("Emergencyresponseteam") - emergencyresponseteamspawn += loc - qdel(src) - return - if("xeno_spawn") - xeno_spawn += loc - qdel(src) - return - return 1 + GLOB.landmarks_list += src /obj/effect/landmark/Destroy() - landmarks_list -= src + GLOB.landmarks_list -= src return ..() /obj/effect/landmark/start @@ -74,162 +21,113 @@ anchored = 1 /obj/effect/landmark/start/New() - start_landmarks_list += src + GLOB.start_landmarks_list += src ..() - if(name != initial(name)) + if(name != "start") tag = "start*[name]" - return 1 /obj/effect/landmark/start/Destroy() - start_landmarks_list -= src + GLOB.start_landmarks_list -= src return ..() -//Costume spawner landmarks +// START LANDMARKS FOLLOW. Don't change the names unless +// you are refactoring shitty landmark code. -/obj/effect/landmark/costume/New() //costume spawner, selects a random subclass and disappears +/obj/effect/landmark/start/assistant + name = "Assistant" - var/list/options = typesof(/obj/effect/landmark/costume) - var/PICK= options[rand(1,options.len)] - new PICK(src.loc) - qdel(src) +/obj/effect/landmark/start/janitor + name = "Janitor" -//SUBCLASSES. Spawn a bunch of items and disappear likewise -/obj/effect/landmark/costume/chicken/New() - new /obj/item/clothing/suit/chickensuit(src.loc) - new /obj/item/clothing/head/chicken(src.loc) - new /obj/item/weapon/reagent_containers/food/snacks/egg(src.loc) - qdel(src) +/obj/effect/landmark/start/cargo_technician + name = "Cargo Technician" -/obj/effect/landmark/costume/gladiator/New() - new /obj/item/clothing/under/gladiator(src.loc) - new /obj/item/clothing/head/helmet/gladiator(src.loc) - qdel(src) +/obj/effect/landmark/start/bartender + name = "Bartender" -/obj/effect/landmark/costume/madscientist/New() - new /obj/item/clothing/under/gimmick/rank/captain/suit(src.loc) - new /obj/item/clothing/head/flatcap(src.loc) - new /obj/item/clothing/suit/toggle/labcoat/mad(src.loc) - qdel(src) +/obj/effect/landmark/start/clown + name = "Clown" -/obj/effect/landmark/costume/elpresidente/New() - new /obj/item/clothing/under/gimmick/rank/captain/suit(src.loc) - new /obj/item/clothing/head/flatcap(src.loc) - new /obj/item/clothing/mask/cigarette/cigar/havana(src.loc) - new /obj/item/clothing/shoes/jackboots(src.loc) - qdel(src) +/obj/effect/landmark/start/mime + name = "Mime" -/obj/effect/landmark/costume/nyangirl/New() - new /obj/item/clothing/under/schoolgirl(src.loc) - new /obj/item/clothing/head/kitty(src.loc) - new /obj/item/clothing/glasses/sunglasses/blindfold(src.loc) - qdel(src) +/obj/effect/landmark/start/quartermaster + name = "Quartermaster" -/obj/effect/landmark/costume/maid/New() - new /obj/item/clothing/under/skirt/black(src.loc) - var/CHOICE = pick( /obj/item/clothing/head/beret , /obj/item/clothing/head/rabbitears ) - new CHOICE(src.loc) - new /obj/item/clothing/glasses/sunglasses/blindfold(src.loc) - qdel(src) +/obj/effect/landmark/start/atmospheric_technician + name = "Atmospheric Technician" -/obj/effect/landmark/costume/butler/New() - new /obj/item/clothing/tie/waistcoat(src.loc) - new /obj/item/clothing/under/suit_jacket(src.loc) - new /obj/item/clothing/head/that(src.loc) - qdel(src) +/obj/effect/landmark/start/cook + name = "Cook" -/obj/effect/landmark/costume/highlander/New() - new /obj/item/clothing/under/kilt(src.loc) - new /obj/item/clothing/head/beret(src.loc) - qdel(src) +/obj/effect/landmark/start/shaft_miner + name = "Shaft Miner" -/obj/effect/landmark/costume/prig/New() - new /obj/item/clothing/tie/waistcoat(src.loc) - new /obj/item/clothing/glasses/monocle(src.loc) - var/CHOICE= pick( /obj/item/clothing/head/bowler, /obj/item/clothing/head/that) - new CHOICE(src.loc) - new /obj/item/clothing/shoes/sneakers/black(src.loc) - new /obj/item/weapon/cane(src.loc) - new /obj/item/clothing/under/sl_suit(src.loc) - new /obj/item/clothing/mask/fakemoustache(src.loc) - qdel(src) +/obj/effect/landmark/start/security_officer + name = "Security Officer" -/obj/effect/landmark/costume/plaguedoctor/New() - new /obj/item/clothing/suit/bio_suit/plaguedoctorsuit(src.loc) - new /obj/item/clothing/head/plaguedoctorhat(src.loc) - new /obj/item/clothing/mask/gas/plaguedoctor(src.loc) - qdel(src) +/obj/effect/landmark/start/botanist + name = "Botanist" -/obj/effect/landmark/costume/nightowl/New() - new /obj/item/clothing/suit/toggle/owlwings(src.loc) - new /obj/item/clothing/under/owl(src.loc) - new /obj/item/clothing/mask/gas/owl_mask(src.loc) - qdel(src) +/obj/effect/landmark/start/head_of_security + name = "Head of Security" -/obj/effect/landmark/costume/thegriffin/New() - new /obj/item/clothing/suit/toggle/owlwings/griffinwings(src.loc) - new /obj/item/clothing/shoes/griffin(src.loc) - new /obj/item/clothing/under/griffin(src.loc) - new /obj/item/clothing/head/griffin(src.loc) - qdel(src) +/obj/effect/landmark/start/ai + name = "AI" -/obj/effect/landmark/costume/waiter/New() - new /obj/item/clothing/under/waiter(src.loc) - var/CHOICE= pick( /obj/item/clothing/head/kitty, /obj/item/clothing/head/rabbitears) - new CHOICE(src.loc) - new /obj/item/clothing/suit/apron(src.loc) - qdel(src) +/obj/effect/landmark/start/captain + name = "Captain" -/obj/effect/landmark/costume/pirate/New() - new /obj/item/clothing/under/pirate(src.loc) - new /obj/item/clothing/suit/pirate(src.loc) - var/CHOICE = pick( /obj/item/clothing/head/pirate , /obj/item/clothing/head/bandana ) - new CHOICE(src.loc) - new /obj/item/clothing/glasses/eyepatch(src.loc) - qdel(src) +/obj/effect/landmark/start/detective + name = "Detective" -/obj/effect/landmark/costume/commie/New() - new /obj/item/clothing/under/soviet(src.loc) - new /obj/item/clothing/head/ushanka(src.loc) - qdel(src) +/obj/effect/landmark/start/warden + name = "Warden" -/obj/effect/landmark/costume/imperium_monk/New() - new /obj/item/clothing/suit/imperium_monk(src.loc) - if (prob(25)) - new /obj/item/clothing/mask/gas/cyborg(src.loc) - qdel(src) +/obj/effect/landmark/start/chief_engineer + name = "Chief Engineer" -/obj/effect/landmark/costume/holiday_priest/New() - new /obj/item/clothing/suit/holidaypriest(src.loc) - qdel(src) +/obj/effect/landmark/start/cyborg + name = "Cyborg" -/obj/effect/landmark/costume/marisawizard/fake/New() - new /obj/item/clothing/shoes/sandal/marisa(src.loc) - new /obj/item/clothing/head/wizard/marisa/fake(src.loc) - new/obj/item/clothing/suit/wizrobe/marisa/fake(src.loc) - qdel(src) +/obj/effect/landmark/start/head_of_personnel + name = "Head of Personnel" -/obj/effect/landmark/costume/cutewitch/New() - new /obj/item/clothing/under/sundress(src.loc) - new /obj/item/clothing/head/witchwig(src.loc) - new /obj/item/weapon/staff/broom(src.loc) - qdel(src) +/obj/effect/landmark/start/librarian + name = "Librarian" -/obj/effect/landmark/costume/fakewizard/New() - new /obj/item/clothing/shoes/sandal(src.loc) - new /obj/item/clothing/suit/wizrobe/fake(src.loc) - new /obj/item/clothing/head/wizard/fake(src.loc) - new /obj/item/weapon/staff/(src.loc) - qdel(src) +/obj/effect/landmark/start/lawyer + name = "Lawyer" -/obj/effect/landmark/costume/sexyclown/New() - new /obj/item/clothing/mask/gas/sexyclown(src.loc) - new /obj/item/clothing/under/rank/clown/sexy(src.loc) - qdel(src) +/obj/effect/landmark/start/station_engineer + name = "Station Engineer" -/obj/effect/landmark/costume/sexymime/New() - new /obj/item/clothing/mask/gas/sexymime(src.loc) - new /obj/item/clothing/under/sexymime(src.loc) - qdel(src) +/obj/effect/landmark/start/medical_doctor + name = "Medical Doctor" + +/obj/effect/landmark/start/scientist + name = "Scientist" + +/obj/effect/landmark/start/chemist + name = "Chemist" + +/obj/effect/landmark/start/roboticist + name = "Roboticist" + +/obj/effect/landmark/start/research_director + name = "Research Director" + +/obj/effect/landmark/start/geneticist + name = "Geneticist" + +/obj/effect/landmark/start/chief_medical_officer + name = "Chief Medical Officer" + +/obj/effect/landmark/start/virologist + name = "Virologist" + +/obj/effect/landmark/start/chaplain + name = "Chaplain" //Department Security spawns @@ -238,10 +136,10 @@ /obj/effect/landmark/start/depsec/New() ..() - department_security_spawns += src + GLOB.department_security_spawns += src /obj/effect/landmark/start/depsec/Destroy() - department_security_spawns -= src + GLOB.department_security_spawns -= src return ..() /obj/effect/landmark/start/depsec/supply @@ -256,32 +154,180 @@ /obj/effect/landmark/start/depsec/science name = "science_sec" +/obj/effect/landmark/start/wizard + name = "wizard" + +/obj/effect/landmark/start/wizard/Initialize(mapload) + ..() + GLOB.wizardstart += loc + qdel(src) + +/obj/effect/landmark/start/new_player + name = "New Player" + +// Must be on New() rather than Initialize, because players will +// join before SSatom initializes everything. +/obj/effect/landmark/start/new_player/New(loc) + ..() + GLOB.newplayer_start += loc + +/obj/effect/landmark/start/new_player/Initialize(mapload) + ..() + qdel(src) + + + /obj/effect/landmark/latejoin name = "JoinLate" +/obj/effect/landmark/latejoin/Initialize(mapload) + ..() + GLOB.latejoin += loc + qdel(src) + +// carp. +/obj/effect/landmark/carpspawn + name = "carpspawn" + +// lightsout. +/obj/effect/landmark/lightsout + name = "lightsout" + +// observer-start. +/obj/effect/landmark/observer_start + name = "Observer-Start" + +// revenant spawn. +/obj/effect/landmark/revenantspawn + name = "revnantspawn" + +// triple ais. +/obj/effect/landmark/tripai + name = "tripai" + +// marauder entry (XXX WTF IS MAURADER ENTRY???) + +/obj/effect/landmark/marauder_entry + name = "Marauder Entry" + +// syndicate breach area (XXX I DON'T KNOW WHAT THIS IS EITHER) + +/obj/effect/landmark/syndicate_breach_area + name = "Syndicate Breach Area" + +// teleport scroll landmark, XXX DOES THIS DO ANYTHING? +/obj/effect/landmark/teleport_scroll + name = "Teleport-Scroll" + +/obj/effect/landmark/syndicate_spawn + name = "Syndicate-Spawn" + +// xenos. +/obj/effect/landmark/xeno_spawn + name = "xeno_spawn" + +/obj/effect/landmark/xeno_spawn/Initialize(mapload) + ..() + GLOB.xeno_spawn += loc + qdel(src) + +// blobs. +/obj/effect/landmark/blobstart + name = "blobstart" + +/obj/effect/landmark/blobstart/Initialize(mapload) + ..() + GLOB.blobstart += loc + qdel(src) + +/obj/effect/landmark/secequipment + name = "secequipment" + +/obj/effect/landmark/secequipment/Initialize(mapload) + ..() + GLOB.secequipment += loc + qdel(src) + +/obj/effect/landmark/prisonwarp + name = "prisonwarp" + +/obj/effect/landmark/prisonwarp/Initialize(mapload) + ..() + GLOB.prisonwarp += loc + qdel(src) + +/obj/effect/landmark/ert_spawn + name = "Emergencyresponseteam" + +/obj/effect/landmark/ert_spawn/Initialize(mapload) + ..() + GLOB.emergencyresponseteamspawn += loc + qdel(src) + +/obj/effect/landmark/holding_facility + name = "Holding Facility" + +/obj/effect/landmark/holding_facility/Initialize(mapload) + ..() + GLOB.holdingfacility += loc + qdel(src) + +/obj/effect/landmark/thunderdome/observe + name = "tdomeobserve" + +/obj/effect/landmark/thunderdome/observe/Initialize(mapload) + ..() + GLOB.tdomeobserve += loc + qdel(src) + +/obj/effect/landmark/thunderdome/one + name = "tdome1" + +/obj/effect/landmark/thunderdome/one/Initialize(mapload) + ..() + GLOB.tdome1 += loc + qdel(src) + +/obj/effect/landmark/thunderdome/two + name = "tdome2" + +/obj/effect/landmark/thunderdome/two/Initialize(mapload) + ..() + GLOB.tdome2 += loc + qdel(src) + +/obj/effect/landmark/thunderdome/admin + name = "tdomeadmin" + +/obj/effect/landmark/thunderdome/admin/Initialize(mapload) + ..() + GLOB.tdomeadmin += loc + qdel(src) + //generic event spawns /obj/effect/landmark/event_spawn name = "generic event spawn" icon_state = "x4" + /obj/effect/landmark/event_spawn/New() ..() - generic_event_spawns += src + GLOB.generic_event_spawns += src /obj/effect/landmark/event_spawn/Destroy() - generic_event_spawns -= src + GLOB.generic_event_spawns -= src return ..() /obj/effect/landmark/ruin var/datum/map_template/ruin/ruin_template /obj/effect/landmark/ruin/New(loc, my_ruin_template) - name = "ruin_[ruin_landmarks.len + 1]" + name = "ruin_[GLOB.ruin_landmarks.len + 1]" ..(loc) ruin_template = my_ruin_template - ruin_landmarks |= src + GLOB.ruin_landmarks |= src /obj/effect/landmark/ruin/Destroy() - ruin_landmarks -= src + GLOB.ruin_landmarks -= src ruin_template = null . = ..() diff --git a/code/game/objects/effects/manifest.dm b/code/game/objects/effects/manifest.dm index 7900e00f08..a87cb075fc 100644 --- a/code/game/objects/effects/manifest.dm +++ b/code/game/objects/effects/manifest.dm @@ -8,7 +8,7 @@ /obj/effect/manifest/proc/manifest() var/dat = "Crew Manifest:
" - for(var/mob/living/carbon/human/M in mob_list) + for(var/mob/living/carbon/human/M in GLOB.mob_list) dat += text(" [] - []
", M.name, M.get_assignment()) var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( src.loc ) P.info = dat diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index 42c9f6f17f..e83ecda809 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -34,7 +34,7 @@ /obj/effect/overlay/temp/New() ..() if(randomdir) - setDir(pick(cardinal)) + setDir(pick(GLOB.cardinal)) flick("[icon_state]", src) //Because we might be pulling it from a pool, flick whatever icon it uses so it starts at the start of the icon's animation. timerid = QDEL_IN(src, duration) @@ -58,7 +58,7 @@ var/splatter_type = "splatter" /obj/effect/overlay/temp/dir_setting/bloodsplatter/New(loc, set_dir) - if(set_dir in diagonals) + if(set_dir in GLOB.diagonals) icon_state = "[splatter_type][pick(1, 2, 6)]" else icon_state = "[splatter_type][pick(3, 4, 5)]" @@ -507,6 +507,11 @@ icon_state = dust_icon // Before ..() so the correct icon is flick()'d ..() +/obj/effect/overlay/temp/mummy_animation + icon = 'icons/mob/mob.dmi' + icon_state = "mummy_revive" + duration = 20 + /obj/effect/overlay/temp/heal //color is white by default, set to whatever is needed name = "healing glow" icon_state = "heal" diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index 47ef4ad5a5..e8c86390ea 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -14,6 +14,9 @@ /obj/effect/portal/Bumped(mob/M as mob|obj) teleport(M) +/obj/effect/portal/attack_tk(mob/user) + return + /obj/effect/portal/attack_hand(mob/user) if(Adjacent(user)) teleport(user) @@ -27,7 +30,7 @@ /obj/effect/portal/New(loc, turf/target, creator=null, lifespan=300) ..() - portals += src + GLOB.portals += src src.target = target src.creator = creator @@ -39,7 +42,7 @@ QDEL_IN(src, lifespan) /obj/effect/portal/Destroy() - portals -= src + GLOB.portals -= src if(istype(creator, /obj/item/weapon/hand_tele)) var/obj/item/weapon/hand_tele/O = creator O.active_portals-- diff --git a/code/game/objects/effects/spawners/bombspawner.dm b/code/game/objects/effects/spawners/bombspawner.dm index 6c58654ab7..6f307d9e59 100644 --- a/code/game/objects/effects/spawners/bombspawner.dm +++ b/code/game/objects/effects/spawners/bombspawner.dm @@ -2,96 +2,45 @@ name = "bomb" icon = 'icons/mob/screen_gen.dmi' icon_state = "x" - var/btype = 0 // 0=radio, 1=prox, 2=time var/btemp1 = 1500 var/btemp2 = 1000 // tank temperatures + var/assembly_type + +/obj/effect/spawner/newbomb/Initialize() + ..() + var/obj/item/device/transfer_valve/V = new(src.loc) + var/obj/item/weapon/tank/internals/plasma/full/PT = new(V) + var/obj/item/weapon/tank/internals/oxygen/OT = new(V) + + PT.air_contents.temperature = btemp1 + T0C + OT.air_contents.temperature = btemp2 + T0C + + V.tank_one = PT + V.tank_two = OT + PT.master = V + OT.master = V + + if(assembly_type) + var/obj/item/device/assembly/A = new assembly_type(V) + V.attached_device = A + A.holder = V + A.toggle_secure() + + V.update_icon() + + qdel(src) /obj/effect/spawner/newbomb/timer - btype = 2 + assembly_type = /obj/item/device/assembly/timer - syndicate - btemp1 = 150 - btemp2 = 20 +/obj/effect/spawner/newbomb/timer/syndicate + btemp1 = 150 + btemp2 = 20 /obj/effect/spawner/newbomb/proximity - btype = 1 + assembly_type = /obj/item/device/assembly/prox_sensor /obj/effect/spawner/newbomb/radio - btype = 0 + assembly_type = /obj/item/device/assembly/signaler + - -/obj/effect/spawner/newbomb/New() - ..() - - switch (src.btype) - // radio - if (0) - - var/obj/item/device/transfer_valve/V = new(src.loc) - var/obj/item/weapon/tank/internals/plasma/PT = new(V) - var/obj/item/weapon/tank/internals/oxygen/OT = new(V) - - var/obj/item/device/assembly/signaler/S = new(V) - - V.tank_one = PT - V.tank_two = OT - V.attached_device = S - - S.holder = V - S.toggle_secure() - PT.master = V - OT.master = V - - PT.air_contents.temperature = btemp1 + T0C - OT.air_contents.temperature = btemp2 + T0C - - V.update_icon() - - // proximity - if (1) - - var/obj/item/device/transfer_valve/V = new(src.loc) - var/obj/item/weapon/tank/internals/plasma/PT = new(V) - var/obj/item/weapon/tank/internals/oxygen/OT = new(V) - - var/obj/item/device/assembly/prox_sensor/P = new(V) - - V.tank_one = PT - V.tank_two = OT - V.attached_device = P - - P.holder = V - P.toggle_secure() - PT.master = V - OT.master = V - - - PT.air_contents.temperature = btemp1 + T0C - OT.air_contents.temperature = btemp2 + T0C - - V.update_icon() - - - // timer - if (2) - var/obj/item/device/transfer_valve/V = new(src.loc) - var/obj/item/weapon/tank/internals/plasma/PT = new(V) - var/obj/item/weapon/tank/internals/oxygen/OT = new(V) - - var/obj/item/device/assembly/timer/T = new(V) - - V.tank_one = PT - V.tank_two = OT - V.attached_device = T - - T.holder = V - T.toggle_secure() - PT.master = V - OT.master = V - T.time = 30 - - PT.air_contents.temperature = btemp1 + T0C - OT.air_contents.temperature = btemp2 + T0C - - V.update_icon() - qdel(src) \ No newline at end of file diff --git a/code/game/objects/effects/spawners/bundle.dm b/code/game/objects/effects/spawners/bundle.dm new file mode 100644 index 0000000000..c272c383e9 --- /dev/null +++ b/code/game/objects/effects/spawners/bundle.dm @@ -0,0 +1,170 @@ +/obj/effect/spawner/bundle + name = "bundle spawner" + icon = 'icons/mob/screen_gen.dmi' + icon_state = "x2" + color = "#00FF00" + + var/list/items + +/obj/effect/spawner/bundle/Initialize(mapload) + ..() + if(items && items.len) + var/turf/T = get_turf(src) + for(var/path in items) + new path(T) + qdel(src) + +/obj/effect/spawner/bundle/costume/chicken + name = "chicken costume spawner" + items = list( + /obj/item/clothing/suit/chickensuit, + /obj/item/clothing/head/chicken, + /obj/item/weapon/reagent_containers/food/snacks/egg) + +/obj/effect/spawner/bundle/costume/gladiator + name = "gladitator costume spawner" + items = list( + /obj/item/clothing/under/gladiator, + /obj/item/clothing/head/helmet/gladiator) + +/obj/effect/spawner/bundle/costume/madscientist + name = "mad scientist costume spawner" + items = list( + /obj/item/clothing/under/gimmick/rank/captain/suit, + /obj/item/clothing/head/flatcap, + /obj/item/clothing/suit/toggle/labcoat/mad) + +/obj/effect/spawner/bundle/costume/elpresidente + name = "el presidente costume spawner" + items = list( + /obj/item/clothing/under/gimmick/rank/captain/suit, + /obj/item/clothing/head/flatcap, + /obj/item/clothing/mask/cigarette/cigar/havana, + /obj/item/clothing/shoes/jackboots) + +/obj/effect/spawner/bundle/costume/nyangirl + name = "nyangirl costume spawner" + items = list( + /obj/item/clothing/under/schoolgirl, + /obj/item/clothing/head/kitty, + /obj/item/clothing/glasses/sunglasses/blindfold) + +/obj/effect/spawner/bundle/costume/maid + name = "maid costume spawner" + items = list( + /obj/item/clothing/under/skirt/black, + /obj/effect/spawner/lootdrop/minor/beret_or_rabbitears, + /obj/item/clothing/glasses/sunglasses/blindfold) + + +/obj/effect/spawner/bundle/costume/butler + name = "butler costume spawner" + items = list( + /obj/item/clothing/tie/waistcoat, + /obj/item/clothing/under/suit_jacket, + /obj/item/clothing/head/that) + +/obj/effect/spawner/bundle/costume/highlander + name = "highlander costume spawner" + items = list( + /obj/item/clothing/under/kilt, + /obj/item/clothing/head/beret) + +/obj/effect/spawner/bundle/costume/prig + name = "prig costume spawner" + items = list( + /obj/item/clothing/tie/waistcoat, + /obj/item/clothing/glasses/monocle, + /obj/effect/spawner/lootdrop/minor/bowler_or_that, + /obj/item/clothing/shoes/sneakers/black, + /obj/item/weapon/cane, + /obj/item/clothing/under/sl_suit, + /obj/item/clothing/mask/fakemoustache) + +/obj/effect/spawner/bundle/costume/plaguedoctor + name = "plague doctor costume spawner" + items = list( + /obj/item/clothing/suit/bio_suit/plaguedoctorsuit, + /obj/item/clothing/head/plaguedoctorhat, + /obj/item/clothing/mask/gas/plaguedoctor) + +/obj/effect/spawner/bundle/costume/nightowl + name = "night owl costume spawner" + items = list( + /obj/item/clothing/suit/toggle/owlwings, + /obj/item/clothing/under/owl, + /obj/item/clothing/mask/gas/owl_mask) + +/obj/effect/spawner/bundle/costume/griffin + name = "griffin costume spawner" + items = list( + /obj/item/clothing/suit/toggle/owlwings/griffinwings, + /obj/item/clothing/shoes/griffin, + /obj/item/clothing/under/griffin, + /obj/item/clothing/head/griffin) + +/obj/effect/spawner/bundle/costume/waiter + name = "waiter costume spawner" + items = list( + /obj/item/clothing/under/waiter, + /obj/effect/spawner/lootdrop/minor/kittyears_or_rabbitears, + /obj/item/clothing/suit/apron) + +/obj/effect/spawner/bundle/costume/pirate + name = "pirate costume spawner" + items = list( + /obj/item/clothing/under/pirate, + /obj/item/clothing/suit/pirate, + /obj/effect/spawner/lootdrop/minor/pirate_or_bandana, + /obj/item/clothing/glasses/eyepatch) + +/obj/effect/spawner/bundle/costume/commie + name = "commie costume spawner" + items = list( + /obj/item/clothing/under/soviet, + /obj/item/clothing/head/ushanka) + +/obj/effect/spawner/bundle/costume/imperium_monk + name = "imperium monk costume spawner" + items = list( + /obj/item/clothing/suit/imperium_monk, + /obj/effect/spawner/lootdrop/minor/twentyfive_percent_cyborg_mask) + +/obj/effect/spawner/bundle/costume/holiday_priest + name = "holiday priest costume spawner" + items = list( + /obj/item/clothing/suit/holidaypriest) + +/obj/effect/spawner/bundle/costume/marisawizard + name = "marisa wizard costume spawner" + items = list( + /obj/item/clothing/shoes/sandal/marisa, + /obj/item/clothing/head/wizard/marisa/fake, + /obj/item/clothing/suit/wizrobe/marisa/fake) + +/obj/effect/spawner/bundle/costume/cutewitch + name = "cute witch costume spawner" + items = list( + /obj/item/clothing/under/sundress, + /obj/item/clothing/head/witchwig, + /obj/item/weapon/staff/broom) + +/obj/effect/spawner/bundle/costume/wizard + name = "wizard costume spawner" + items = list( + /obj/item/clothing/shoes/sandal, + /obj/item/clothing/suit/wizrobe/fake, + /obj/item/clothing/head/wizard/fake, + /obj/item/weapon/staff) + +/obj/effect/spawner/bundle/costume/sexyclown + name = "sexy clown costume spawner" + items = list( + /obj/item/clothing/mask/gas/sexyclown, + /obj/item/clothing/under/rank/clown/sexy) + +/obj/effect/spawner/bundle/costume/sexymime + name = "sexy mime costume spawner" + items = list( + /obj/item/clothing/mask/gas/sexymime, + /obj/item/clothing/under/sexymime) diff --git a/code/game/objects/effects/spawners/gibspawner.dm b/code/game/objects/effects/spawners/gibspawner.dm index 8576307378..d744043a51 100644 --- a/code/game/objects/effects/spawners/gibspawner.dm +++ b/code/game/objects/effects/spawners/gibspawner.dm @@ -6,7 +6,7 @@ var/list/gibamounts = list() //amount to spawn for each gib decal type we'll spawn. var/list/gibdirections = list() //of lists of possible directions to spread each gib decal type towards. -/obj/effect/gibspawner/New(location, list/viruses, datum/dna/MobDNA) +/obj/effect/gibspawner/Initialize(mapload, list/viruses, datum/dna/MobDNA) ..() if(gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len) @@ -17,16 +17,16 @@ if(sparks) var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(2, 1, location) + s.set_up(2, 1, loc) s.start() for(var/i = 1, i<= gibtypes.len, i++) if(gibamounts[i]) for(var/j = 1, j<= gibamounts[i], j++) var/gibType = gibtypes[i] - gib = new gibType(location) - if(istype(location,/mob/living/carbon)) - var/mob/living/carbon/digester = location + gib = new gibType(loc) + if(istype(loc,/mob/living/carbon)) + var/mob/living/carbon/digester = loc digester.stomach_contents += gib if(viruses && viruses.len > 0) @@ -53,7 +53,7 @@ gibtypes = list(/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/core) gibamounts = list(2,2,1) -/obj/effect/gibspawner/generic/New() +/obj/effect/gibspawner/generic/Initialize() playsound(src, 'sound/effects/blobattack.ogg', 40, 1) gibdirections = list(list(WEST, NORTHWEST, SOUTHWEST, NORTH),list(EAST, NORTHEAST, SOUTHEAST, SOUTH), list()) ..() @@ -62,9 +62,9 @@ gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/up,/obj/effect/decal/cleanable/blood/gibs/down,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/body,/obj/effect/decal/cleanable/blood/gibs/limb,/obj/effect/decal/cleanable/blood/gibs/core) gibamounts = list(1,1,1,1,1,1,1) -/obj/effect/gibspawner/human/New() +/obj/effect/gibspawner/human/Initialize() playsound(src, 'sound/effects/blobattack.ogg', 50, 1) - gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs, list()) + gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, GLOB.alldirs, list()) ..() @@ -72,9 +72,9 @@ gibtypes = list(/obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/core,/obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/core, /obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/torso) gibamounts = list(1, 1, 1, 1, 1, 1) -/obj/effect/gibspawner/humanbodypartless/New() +/obj/effect/gibspawner/humanbodypartless/Initialize() playsound(src, 'sound/effects/blobattack.ogg', 50, 1) - gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, list()) + gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, list()) ..() @@ -82,9 +82,9 @@ gibtypes = list(/obj/effect/decal/cleanable/xenoblood/xgibs/up,/obj/effect/decal/cleanable/xenoblood/xgibs/down,/obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs/body, /obj/effect/decal/cleanable/xenoblood/xgibs/limb, /obj/effect/decal/cleanable/xenoblood/xgibs/core) gibamounts = list(1,1,1,1,1,1,1) -/obj/effect/gibspawner/xeno/New() +/obj/effect/gibspawner/xeno/Initialize() playsound(src, 'sound/effects/blobattack.ogg', 60, 1) - gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs, list()) + gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, GLOB.alldirs, list()) ..() @@ -93,25 +93,25 @@ gibamounts = list(1, 1, 1, 1, 1, 1) -/obj/effect/gibspawner/xenobodypartless/New() +/obj/effect/gibspawner/xenobodypartless/Initialize() playsound(src, 'sound/effects/blobattack.ogg', 60, 1) - gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, list()) + gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, list()) ..() /obj/effect/gibspawner/larva gibtypes = list(/obj/effect/decal/cleanable/xenoblood/xgibs/larva, /obj/effect/decal/cleanable/xenoblood/xgibs/larva, /obj/effect/decal/cleanable/xenoblood/xgibs/larva/body, /obj/effect/decal/cleanable/xenoblood/xgibs/larva/body) gibamounts = list(1, 1, 1, 1) -/obj/effect/gibspawner/larva/New() +/obj/effect/gibspawner/larva/Initialize() playsound(src, 'sound/effects/blobattack.ogg', 60, 1) - gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST), list(), alldirs) + gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST), list(), GLOB.alldirs) ..() /obj/effect/gibspawner/larvabodypartless gibtypes = list(/obj/effect/decal/cleanable/xenoblood/xgibs/larva, /obj/effect/decal/cleanable/xenoblood/xgibs/larva, /obj/effect/decal/cleanable/xenoblood/xgibs/larva) gibamounts = list(1, 1, 1) -/obj/effect/gibspawner/larvabodypartless/New() +/obj/effect/gibspawner/larvabodypartless/Initialize() playsound(src, 'sound/effects/blobattack.ogg', 60, 1) gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST), list()) ..() @@ -121,7 +121,7 @@ gibtypes = list(/obj/effect/decal/cleanable/robot_debris/up,/obj/effect/decal/cleanable/robot_debris/down,/obj/effect/decal/cleanable/robot_debris,/obj/effect/decal/cleanable/robot_debris,/obj/effect/decal/cleanable/robot_debris,/obj/effect/decal/cleanable/robot_debris/limb) gibamounts = list(1,1,1,1,1,1) -/obj/effect/gibspawner/robot/New() - gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs) +/obj/effect/gibspawner/robot/Initialize() + gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, GLOB.alldirs) gibamounts[6] = pick(0,1,2) - ..() \ No newline at end of file + ..() diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index e4f154899c..baf6383823 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -3,24 +3,27 @@ icon_state = "x2" color = "#00FF00" var/lootcount = 1 //how many items will be spawned - var/lootdoubles = 1 //if the same item can be spawned twice + var/lootdoubles = TRUE //if the same item can be spawned twice var/list/loot //a list of possible items to spawn e.g. list(/obj/item, /obj/structure, /obj/effect) -/obj/effect/spawner/lootdrop/New() +/obj/effect/spawner/lootdrop/Initialize(mapload) + ..() + if(loot && loot.len) - for(var/i = lootcount, i > 0, i--) - if(!loot.len) break + var/turf/T = get_turf(src) + while(lootcount && loot.len) var/lootspawn = pickweight(loot) if(!lootdoubles) loot.Remove(lootspawn) if(lootspawn) - new lootspawn(get_turf(src)) + new lootspawn(T) + lootcount-- qdel(src) /obj/effect/spawner/lootdrop/armory_contraband name = "armory contraband gun spawner" - lootdoubles = 0 + lootdoubles = FALSE loot = list( /obj/item/weapon/gun/ballistic/automatic/pistol = 8, @@ -87,7 +90,7 @@ /obj/item/clothing/gloves/color/fyellow = 1, /obj/item/clothing/head/hardhat = 1, /obj/item/clothing/head/hardhat/red = 1, - /obj/item/clothing/head/that{throwforce = 1;} = 1, + /obj/item/clothing/head/that = 1, /obj/item/clothing/head/ushanka = 1, /obj/item/clothing/head/welding = 1, /obj/item/clothing/mask/gas = 15, @@ -102,8 +105,8 @@ /obj/item/device/radio/off = 2, /obj/item/device/t_scanner = 5, /obj/item/weapon/airlock_painter = 1, - /obj/item/stack/cable_coil = 4, - /obj/item/stack/cable_coil{amount = 5} = 6, + /obj/item/stack/cable_coil/random = 4, + /obj/item/stack/cable_coil/random{amount = 5} = 6, /obj/item/stack/medical/bruise_pack = 1, /obj/item/stack/rods{amount = 10} = 9, /obj/item/stack/rods{amount = 23} = 1, @@ -144,7 +147,7 @@ /obj/item/weapon/wirecutters = 1, /obj/item/weapon/wrench = 4, /obj/item/weapon/relic = 3, - /obj/item/weaponcrafting/reciever = 2, + /obj/item/weaponcrafting/receiver = 2, /obj/item/clothing/head/cone = 2, /obj/item/weapon/grenade/smokebomb = 2, /obj/item/device/geiger_counter = 3, @@ -165,7 +168,7 @@ /obj/effect/spawner/lootdrop/crate_spawner name = "lootcrate spawner" //USE PROMO CODE "SELLOUT" FOR 20% OFF! - lootdoubles = 0 + lootdoubles = FALSE loot = list( /obj/structure/closet/crate/secure/loot = 20, @@ -194,3 +197,44 @@ loot = list( /obj/effect/decal/remains/xeno = 49, /obj/effect/spawner/xeno_egg_delivery = 1) + +/obj/effect/spawner/lootdrop/costume + name = "random costume spawner" + +/obj/effect/spawner/lootdrop/costume/Initialize() + loot = list() + for(var/path in subtypesof(/obj/effect/spawner/bundle/costume)) + loot[path] = TRUE + ..() + +// Minor lootdrops follow + +/obj/effect/spawner/lootdrop/minor/beret_or_rabbitears + name = "beret or rabbit ears spawner" + loot = list( + /obj/item/clothing/head/beret = 1, + /obj/item/clothing/head/rabbitears = 1) + +/obj/effect/spawner/lootdrop/minor/bowler_or_that + name = "bowler or top hat spawner" + loot = list( + /obj/item/clothing/head/bowler = 1, + /obj/item/clothing/head/that = 1) + +/obj/effect/spawner/lootdrop/minor/kittyears_or_rabbitears + name = "kitty ears or rabbit ears spawner" + loot = list( + /obj/item/clothing/head/kitty = 1, + /obj/item/clothing/head/rabbitears = 1) + +/obj/effect/spawner/lootdrop/minor/pirate_or_bandana + name = "pirate hat or bandana spawner" + loot = list( + /obj/item/clothing/head/pirate = 1, + /obj/item/clothing/head/bandana = 1) + +/obj/effect/spawner/lootdrop/minor/twentyfive_percent_cyborg_mask + name = "25% cyborg mask spawner" + loot = list( + /obj/item/clothing/mask/gas/cyborg = 25, + "" = 75) diff --git a/code/game/objects/effects/spawners/structure.dm b/code/game/objects/effects/spawners/structure.dm index c83473d7b0..7a14dbb942 100644 --- a/code/game/objects/effects/spawners/structure.dm +++ b/code/game/objects/effects/spawners/structure.dm @@ -11,9 +11,8 @@ again. /obj/effect/spawner/structure/Initialize() ..() if(spawn_list && spawn_list.len) - for(var/i = 1, i <= spawn_list.len, i++) - var/to_spawn = spawn_list[i] - new to_spawn(get_turf(src)) + for(var/I in spawn_list) + new I(get_turf(src)) qdel(src) /obj/effect/spawner/structure/window @@ -31,4 +30,4 @@ again. spawn_list = list( /obj/structure/grille, /obj/structure/window/reinforced/fulltile - ) \ No newline at end of file + ) diff --git a/code/game/objects/effects/spawners/xeno_egg_delivery.dm b/code/game/objects/effects/spawners/xeno_egg_delivery.dm index 639df98214..91db494d9b 100644 --- a/code/game/objects/effects/spawners/xeno_egg_delivery.dm +++ b/code/game/objects/effects/spawners/xeno_egg_delivery.dm @@ -16,5 +16,5 @@ message_admins("An alien egg has been delivered to [A] at [ADMIN_COORDJMP(T)].") log_game("An alien egg has been delivered to [A] at [COORD(T)]") var/message = "Attention [station_name()], we have entrusted you with a research specimen in [A]. Remember to follow all safety precautions when dealing with the specimen." - addtimer(CALLBACK(GLOBAL_PROC, /.proc/print_command_report, message), announcement_time) + SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, /proc/addtimer, CALLBACK(GLOBAL_PROC, /.proc/print_command_report, message), announcement_time)) qdel(src) diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index c62260080d..5663bc41d8 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -30,7 +30,7 @@ /obj/structure/spider/stickyweb icon_state = "stickyweb1" -/obj/structure/spider/stickyweb/New() +/obj/structure/spider/stickyweb/Initialize() if(prob(50)) icon_state = "stickyweb2" . = ..() @@ -57,7 +57,7 @@ var/poison_per_bite = 5 var/list/faction = list("spiders") -/obj/structure/spider/eggcluster/New() +/obj/structure/spider/eggcluster/Initialize() pixel_x = rand(3,-3) pixel_y = rand(3,-3) START_PROCESSING(SSobj, src) @@ -92,7 +92,7 @@ var/poison_per_bite = 5 var/list/faction = list("spiders") -/obj/structure/spider/spiderling/New() +/obj/structure/spider/spiderling/Initialize() pixel_x = rand(6,-6) pixel_y = rand(6,-6) START_PROCESSING(SSobj, src) @@ -190,7 +190,7 @@ icon_state = "cocoon1" obj_integrity = 60 -/obj/structure/spider/cocoon/New() +/obj/structure/spider/cocoon/Initialize() icon_state = pick("cocoon1","cocoon2","cocoon3") . = ..() diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm index 1a6dbe7e6d..07ffe61689 100644 --- a/code/game/objects/explosion.dm +++ b/code/game/objects/explosion.dm @@ -1,5 +1,3 @@ -var/explosionid = 1 - /proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, ignorecap = 0, flame_range = 0 ,silent = 0, smoke = 1) set waitfor = 0 src = null //so we don't abort once src is deleted @@ -14,11 +12,11 @@ var/explosionid = 1 if(!ignorecap && epicenter.z != ZLEVEL_MINING) //Clamp all values to MAX_EXPLOSION_RANGE - devastation_range = min(MAX_EX_DEVESTATION_RANGE, devastation_range) - heavy_impact_range = min(MAX_EX_HEAVY_RANGE, heavy_impact_range) - light_impact_range = min(MAX_EX_LIGHT_RANGE, light_impact_range) - flash_range = min(MAX_EX_FLASH_RANGE, flash_range) - flame_range = min(MAX_EX_FLAME_RANGE, flame_range) + devastation_range = min(GLOB.MAX_EX_DEVESTATION_RANGE, devastation_range) + heavy_impact_range = min(GLOB.MAX_EX_HEAVY_RANGE, heavy_impact_range) + light_impact_range = min(GLOB.MAX_EX_LIGHT_RANGE, light_impact_range) + flash_range = min(GLOB.MAX_EX_FLASH_RANGE, flash_range) + flame_range = min(GLOB.MAX_EX_FLAME_RANGE, flame_range) //DO NOT REMOVE THIS SLEEP, IT BREAKS THINGS //not sleeping causes us to ex_act() the thing that triggered the explosion @@ -29,6 +27,7 @@ var/explosionid = 1 //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 + var/static/explosionid = 1 var/id = explosionid++ var/start = world.timeofday @@ -36,7 +35,7 @@ var/explosionid = 1 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] - JMP)") + message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area: [get_area(epicenter)] [ADMIN_COORDJMP(epicenter)]") 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. @@ -51,7 +50,8 @@ var/explosionid = 1 if(!silent) var/frequency = get_rand_frequency() - for(var/mob/M in player_list) + var/ex_sound = get_sfx("explosion") + for(var/mob/M in GLOB.player_list) // Double check for client if(M && M.client) var/turf/M_turf = get_turf(M) @@ -59,7 +59,7 @@ var/explosionid = 1 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 + M.playsound_local(epicenter, ex_sound, 100, 1, frequency, falloff = 5) // 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 @@ -69,7 +69,7 @@ var/explosionid = 1 //postpone processing for a bit var/postponeCycles = max(round(devastation_range/8),1) SSlighting.postpone(postponeCycles) - SSmachine.postpone(postponeCycles) + SSmachines.postpone(postponeCycles) if(heavy_impact_range > 1) if(smoke) @@ -164,7 +164,7 @@ var/explosionid = 1 if(TICK_CHECK) stoplag() - var/circumference = (PI * init_dist * 2) + 8 //+8 to prevent shit gaps + var/circumference = (PI * (init_dist + 4) * 2) //+4 to radius to prevent shit gaps if(exploded_this_tick.len > circumference) //only do this every revolution for(var/Unexplode in exploded_this_tick) var/turf/UnexplodeT = Unexplode @@ -179,11 +179,11 @@ var/explosionid = 1 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) + if(GLOB.Debug2) log_world("## 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) + for(var/array in GLOB.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) @@ -277,7 +277,7 @@ var/explosionid = 1 if(!power) return var/range = 0 - range = round((2 * power)**DYN_EX_SCALE) + range = round((2 * power)**GLOB.DYN_EX_SCALE) explosion(epicenter, round(range * 0.25), round(range * 0.5), round(range), flash_range*range, adminlog, ignorecap, flame_range*range, silent, smoke) // Using default dyn_ex scale: diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 76206ff1fb..b0876e394d 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -1,4 +1,4 @@ -var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_state" = "fire") +GLOBAL_DATUM_INIT(fire_overlay, /image, image("icon" = 'icons/effects/fire.dmi', "icon_state" = "fire")) /obj/item name = "item" @@ -349,7 +349,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s return 1 return 0 -/obj/item/proc/talk_into(mob/M, input, channel, spans) +/obj/item/proc/talk_into(mob/M, input, channel, spans, datum/language/language) return ITALICS | REDUCE_RANGE /obj/item/proc/dropped(mob/user) @@ -502,7 +502,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s if(.) if(initial(icon) && initial(icon_state)) var/index = blood_splatter_index() - var/icon/blood_splatter_icon = blood_splatter_icons[index] + var/icon/blood_splatter_icon = GLOB.blood_splatter_icons[index] if(blood_splatter_icon) cut_overlay(blood_splatter_icon) diff --git a/code/game/objects/items/apc_frame.dm b/code/game/objects/items/apc_frame.dm index fb6c349f17..edc7d0f3fe 100644 --- a/code/game/objects/items/apc_frame.dm +++ b/code/game/objects/items/apc_frame.dm @@ -12,7 +12,7 @@ if(get_dist(on_wall,user)>1) return var/ndir = get_dir(on_wall, user) - if(!(ndir in cardinal)) + if(!(ndir in GLOB.cardinal)) return var/turf/T = get_turf(user) var/area/A = get_area(T) diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index f1e5b7f83b..f1535db19d 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -168,18 +168,18 @@ /obj/item/areaeditor/blueprints/proc/view_wire_devices(mob/user) var/message = "
You examine the wire legend.
" - for(var/wireset in wire_color_directory) - message += "
[wire_name_directory[wireset]]" + for(var/wireset in GLOB.wire_color_directory) + message += "
[GLOB.wire_name_directory[wireset]]" message += "

" return message /obj/item/areaeditor/blueprints/proc/view_wire_set(mob/user, wireset) //for some reason you can't use wireset directly as a derefencer so this is the next best :/ - for(var/device in wire_color_directory) + for(var/device in GLOB.wire_color_directory) if("[device]" == wireset) //I know... don't change it... - var/message = "

[wire_name_directory[device]]:" - for(var/Col in wire_color_directory[device]) - var/wire_name = wire_color_directory[device][Col] + var/message = "

[GLOB.wire_name_directory[device]]:" + for(var/Col in GLOB.wire_color_directory[device]) + var/wire_name = GLOB.wire_color_directory[device][Col] if(!findtext(wire_name, WIRE_DUD_PREFIX)) //don't show duds message += "

[Col]: [wire_name]

" message += "

" @@ -309,7 +309,7 @@ return ROOM_ERR_TOOLARGE var/turf/T = pending[1] //why byond havent list::pop()? pending -= T - for (var/dir in cardinal) + for (var/dir in GLOB.cardinal) var/skip = 0 for (var/obj/structure/window/W in T) if(dir == W.dir || (W.dir in list(NORTHEAST,SOUTHEAST,NORTHWEST,SOUTHWEST))) @@ -343,7 +343,7 @@ for(var/V in border) //lazy but works var/turf/F = V - for(var/direction in cardinal) + for(var/direction in GLOB.cardinal) if(direction == border[F]) continue //don't want to grab turfs from outside the border var/turf/U = get_step(F, direction) diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index c1ccf0d440..2cb6c5b93f 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -21,11 +21,6 @@ R.add_fingerprint(user) qdel(src) -/obj/item/weapon/storage/box/bodybags/New() - ..() - for(var/i in 1 to 7) - new /obj/item/bodybag(src) - // Bluespace bodybag diff --git a/code/game/objects/items/cardboard_cutouts.dm b/code/game/objects/items/cardboard_cutouts.dm index b7e5e9edf8..352a4fb9a7 100644 --- a/code/game/objects/items/cardboard_cutouts.dm +++ b/code/game/objects/items/cardboard_cutouts.dm @@ -97,15 +97,15 @@ add_atom_colour("#FFD7A7", FIXED_COLOUR_PRIORITY) switch(new_appearance) if("Assistant") - name = "[pick(first_names_male)] [pick(last_names)]" + name = "[pick(GLOB.first_names_male)] [pick(GLOB.last_names)]" desc = "A cardboat cutout of an assistant." icon_state = "cutout_greytide" if("Clown") - name = pick(clown_names) + name = pick(GLOB.clown_names) desc = "A cardboard cutout of a clown. You get the feeling that it should be in a corner." icon_state = "cutout_clown" if("Mime") - name = pick(mime_names) + name = pick(GLOB.mime_names) desc = "...(A cardboard cutout of a mime.)" icon_state = "cutout_mime" if("Traitor") @@ -121,7 +121,7 @@ desc = "A cardboard cutout of a cultist." icon_state = "cutout_cultist" if("Clockwork Cultist") - name = "[pick(first_names_male)] [pick(last_names)]" + name = "[pick(GLOB.first_names_male)] [pick(GLOB.last_names)]" desc = "A cardboard cutout of a servant of Ratvar." icon_state = "cutout_servant" if("Revolutionary") @@ -129,7 +129,7 @@ desc = "A cardboard cutout of a revolutionary." icon_state = "cutout_viva" if("Wizard") - name = "[pick(wizard_first)], [pick(wizard_second)]" + name = "[pick(GLOB.wizard_first)], [pick(GLOB.wizard_second)]" desc = "A cardboard cutout of a wizard." icon_state = "cutout_wizard" if("Shadowling") @@ -151,7 +151,7 @@ desc = "A cardboard cutout of an ash walker." icon_state = "cutout_free_antag" if("Deathsquad Officer") - name = pick(commando_names) + name = pick(GLOB.commando_names) desc = "A cardboard cutout of a death commando." icon_state = "cutout_deathsquad" if("Ian") diff --git a/code/game/objects/items/charter.dm b/code/game/objects/items/charter.dm index 24d3f65d6d..e5f4ac1cb7 100644 --- a/code/game/objects/items/charter.dm +++ b/code/game/objects/items/charter.dm @@ -18,10 +18,10 @@ /obj/item/station_charter/New() . = ..() if(!standard_station_regex) - var/prefixes = jointext(station_prefixes, "|") - var/names = jointext(station_names, "|") - var/suffixes = jointext(station_suffixes, "|") - var/numerals = jointext(station_numerals, "|") + var/prefixes = jointext(GLOB.station_prefixes, "|") + var/names = jointext(GLOB.station_names, "|") + var/suffixes = jointext(GLOB.station_suffixes, "|") + var/numerals = jointext(GLOB.station_numerals, "|") var/regexstr = "(([prefixes]) )?(([names]) ?)([suffixes]) ([numerals])" standard_station_regex = new(regexstr) @@ -35,7 +35,7 @@ if(used) to_chat(user, "This charter has already been used to name the station.") return - if(!ignores_timeout && (world.time-round_start_time > STATION_RENAME_TIME_LIMIT)) //5 minutes + if(!ignores_timeout && (world.time-SSticker.round_start_time > STATION_RENAME_TIME_LIMIT)) //5 minutes to_chat(user, "The crew has already settled into the shift. It probably wouldn't be good to rename the station right now.") return if(response_timer_id) @@ -60,7 +60,7 @@ to_chat(user, "Your name has been sent to your employers for approval.") // Autoapproves after a certain time response_timer_id = addtimer(CALLBACK(src, .proc/rename_station, new_name, user.name, user.real_name, key_name(user)), approval_time, TIMER_STOPPABLE) - to_chat(admins, "CUSTOM STATION RENAME:[key_name_admin(user)] (?) proposes to rename the station to [new_name] (will autoapprove in [approval_time / 10] seconds). (BSA) (REJECT) (RPLY)") + to_chat(GLOB.admins, "CUSTOM STATION RENAME:[key_name_admin(user)] (?) proposes to rename the station to [new_name] (will autoapprove in [approval_time / 10] seconds). [ADMIN_SMITE(user)] (REJECT) (RPLY)") /obj/item/station_charter/proc/reject_proposed(user) if(!user) diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 96464e0435..098d337123 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -137,7 +137,7 @@ qdel(src) . = TRUE -/obj/item/toy/crayon/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) +/obj/item/toy/crayon/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) // tgui is a plague upon this codebase SStgui.try_update_ui(user, src, ui_key, ui, force_open) @@ -409,7 +409,7 @@ return TRUE /obj/item/toy/crayon/proc/territory_claimed(area/territory, mob/user) - for(var/datum/gang/G in ticker.mode.gangs) + for(var/datum/gang/G in SSticker.mode.gangs) if(territory.type in (G.territory|G.territory_new)) . = G.name break diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 0c0e7bff50..5e49db24a4 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -1,7 +1,7 @@ //The advanced pea-green monochrome lcd of tomorrow. -var/global/list/obj/item/device/pda/PDAs = list() +GLOBAL_LIST_EMPTY(PDAs) /obj/item/device/pda @@ -62,7 +62,7 @@ var/global/list/obj/item/device/pda/PDAs = list() if(fon) set_light(f_lum) - PDAs += src + GLOB.PDAs += src if(default_cartridge) cartridge = new default_cartridge(src) inserted_item = new /obj/item/weapon/pen(src) @@ -138,7 +138,7 @@ var/global/list/obj/item/device/pda/PDAs = list() dat += text("
[id ? "Update PDA Info" : ""]

") dat += "[worldtime2text()]
" //:[world.time / 100 % 6][world.time / 100 % 10]" - dat += "[time2text(world.realtime, "MMM DD")] [year_integer+540]" + dat += "[time2text(world.realtime, "MMM DD")] [GLOB.year_integer+540]" dat += "

" @@ -474,7 +474,7 @@ var/global/list/obj/item/device/pda/PDAs = list() if("Toggle Door") if(cartridge && cartridge.access_remote_door) - for(var/obj/machinery/door/poddoor/M in machines) + for(var/obj/machinery/door/poddoor/M in GLOB.machines) if(M.id == cartridge.remote_door_id) if(M.density) M.open() @@ -636,7 +636,7 @@ var/global/list/obj/item/device/pda/PDAs = list() add_overlay(image(icon, icon_alert)) /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) + for(var/mob/M in GLOB.player_list) if(isobserver(M) && M.client && (M.client.prefs.chat_toggles & CHAT_GHOSTPDA)) var/link = FOLLOW_LINK(M, user) to_chat(M, "[link] [msg.sender] PDA Message --> [multiple ? "Everyone" : msg.recipient]: [msg.message][msg.get_photo_ref()]
") @@ -646,8 +646,8 @@ var/global/list/obj/item/device/pda/PDAs = list() return null var/obj/machinery/message_server/useMS = null - if(message_servers) - for (var/obj/machinery/message_server/MS in message_servers) + if(GLOB.message_servers) + for (var/obj/machinery/message_server/MS in GLOB.message_servers) //PDAs are now dependant on the Message Server. if(MS.active) useMS = MS @@ -721,7 +721,7 @@ var/global/list/obj/item/device/pda/PDAs = list() var/mob/M = loc M.put_in_hands(inserted_item) else - inserted_item.forceMove(loc) + inserted_item.forceMove(get_turf(src)) to_chat(usr, "You remove \the [inserted_item] from \the [src].") inserted_item = null update_icon() @@ -895,7 +895,7 @@ var/global/list/obj/item/device/pda/PDAs = list() return /obj/item/device/pda/Destroy() - PDAs -= src + GLOB.PDAs -= src if(id) qdel(id) id = null @@ -978,20 +978,6 @@ var/global/list/obj/item/device/pda/PDAs = list() else to_chat(user, "You do not have a PDA. You should make an issue report about this.") -/obj/item/weapon/storage/box/PDAs/New() - ..() - new /obj/item/device/pda(src) - new /obj/item/device/pda(src) - new /obj/item/device/pda(src) - new /obj/item/device/pda(src) - new /obj/item/weapon/cartridge/head(src) - - var/newcart = pick( /obj/item/weapon/cartridge/engineering, - /obj/item/weapon/cartridge/security, - /obj/item/weapon/cartridge/medical, - /obj/item/weapon/cartridge/signal/toxins, - /obj/item/weapon/cartridge/quartermaster) - new newcart(src) // Pass along the pulse to atoms in contents, largely added so pAIs are vulnerable to EMP /obj/item/device/pda/emp_act(severity) @@ -1004,7 +990,7 @@ var/global/list/obj/item/device/pda/PDAs = list() /proc/get_viewable_pdas() . = list() // Returns a list of PDAs which can be viewed from another PDA/message monitor. - for(var/obj/item/device/pda/P in PDAs) + for(var/obj/item/device/pda/P in GLOB.PDAs) if(!P.owner || P.toff || P.hidden) continue . += P return . diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index 6039734d4b..1fd52cf5d9 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -305,8 +305,8 @@ Code: menu = "

Crew Manifest

" menu += "Entries cannot be modified from this terminal.

" - if(data_core.general) - for (var/datum/data/record/t in sortRecord(data_core.general)) + if(GLOB.data_core.general) + for (var/datum/data/record/t in sortRecord(GLOB.data_core.general)) menu += "[t.fields["name"]] - [t.fields["rank"]]
" menu += "
" @@ -332,7 +332,7 @@ Code: - for(var/obj/machinery/computer/monitor/pMon in machines) + for(var/obj/machinery/computer/monitor/pMon in GLOB.machines) if(!(pMon.stat & (NOPOWER|BROKEN)) ) powercount++ powermonitors += pMon @@ -379,14 +379,14 @@ Code: if (44) //medical records //This thing only displays a single screen so it's hard to really get the sub-menu stuff working. menu = "

Medical Record List

" - if(data_core.general) - for(var/datum/data/record/R in sortRecord(data_core.general)) + if(GLOB.data_core.general) + for(var/datum/data/record/R in sortRecord(GLOB.data_core.general)) menu += "[R.fields["id"]]: [R.fields["name"]]
" menu += "
" if(441) menu = "

Medical Record

" - if(active1 in data_core.general) + if(active1 in GLOB.data_core.general) menu += "Name: [active1.fields["name"]] ID: [active1.fields["id"]]
" menu += "Sex: [active1.fields["sex"]]
" menu += "Age: [active1.fields["age"]]
" @@ -400,7 +400,7 @@ Code: menu += "
" menu += "

Medical Data

" - if(active2 in data_core.medical) + if(active2 in GLOB.data_core.medical) menu += "Blood Type: [active2.fields["blood_type"]]

" menu += "Minor Disabilities: [active2.fields["mi_dis"]]
" @@ -422,15 +422,15 @@ Code: menu += "
" if (45) //security records menu = "

Security Record List

" - if(data_core.general) - for (var/datum/data/record/R in sortRecord(data_core.general)) + if(GLOB.data_core.general) + for (var/datum/data/record/R in sortRecord(GLOB.data_core.general)) menu += "
[R.fields["id"]]: [R.fields["name"]]
" menu += "
" if(451) menu = "

Security Record

" - if(active1 in data_core.general) + if(active1 in GLOB.data_core.general) menu += "Name: [active1.fields["name"]] ID: [active1.fields["id"]]
" menu += "Sex: [active1.fields["sex"]]
" menu += "Age: [active1.fields["age"]]
" @@ -444,7 +444,7 @@ Code: menu += "
" menu += "

Security Data

" - if(active3 in data_core.security) + if(active3 in GLOB.data_core.security) menu += "Criminal Status: [active3.fields["criminal"]]
" menu += text("
\nMinor Crimes:") @@ -563,7 +563,7 @@ Code: menu += "

Located Cleanbots:

" ldat = null - for (var/mob/living/simple_animal/bot/cleanbot/B in living_mob_list) + for (var/mob/living/simple_animal/bot/cleanbot/B in GLOB.living_mob_list) var/turf/bl = get_turf(B) if(bl) @@ -585,7 +585,7 @@ Code: menu = "

Newscaster Access

" menu += "
Current Newsfeed:
[current_channel ? current_channel : "None"]
" var/datum/newscaster/feed_channel/current - for(var/datum/newscaster/feed_channel/chan in news_network.network_channels) + for(var/datum/newscaster/feed_channel/chan in GLOB.news_network.network_channels) if (chan.channel_name == current_channel) current = chan if(!current) @@ -619,18 +619,18 @@ Code: switch(href_list["choice"]) if("Medical Records") - active1 = find_record("id", href_list["target"], data_core.general) + active1 = find_record("id", href_list["target"], GLOB.data_core.general) if(active1) - active2 = find_record("id", href_list["target"], data_core.medical) + active2 = find_record("id", href_list["target"], GLOB.data_core.medical) pda.mode = 441 mode = 441 if(!active2) active1 = null if("Security Records") - active1 = find_record("id", href_list["target"], data_core.general) + active1 = find_record("id", href_list["target"], GLOB.data_core.general) if(active1) - active3 = find_record("id", href_list["target"], data_core.security) + active3 = find_record("id", href_list["target"], GLOB.data_core.security) pda.mode = 451 mode = 451 if(!active3) @@ -685,14 +685,14 @@ Code: var/pda_owner_name = pda.id ? "[pda.id.registered_name] ([pda.id.assignment])" : "Unknown" var/message = pda.msg_input() var/datum/newscaster/feed_channel/current - for(var/datum/newscaster/feed_channel/chan in news_network.network_channels) + for(var/datum/newscaster/feed_channel/chan in GLOB.news_network.network_channels) if (chan.channel_name == current_channel) current = chan if(current.locked && current.author != pda_owner_name) pda.cart += "
ERROR : NOT AUTHORIZED [pda.id ? "" : "- ID SLOT EMPTY"]
" pda.Topic(null,list("choice"="Refresh")) return - news_network.SubmitArticle(message,pda.owner,current_channel) + GLOB.news_network.SubmitArticle(message,pda.owner,current_channel) pda.Topic(null,list("choice"=num2text(mode))) return @@ -775,7 +775,7 @@ Code: var/turf/current_turf = get_turf(src) var/zlevel = current_turf.z var/botcount = 0 - for(Bot in living_mob_list) //Git da botz + for(Bot in GLOB.living_mob_list) //Git da botz if(!Bot.on || Bot.z != zlevel || Bot.remote_disabled || !(bot_access_flags & Bot.bot_type)) //Only non-emagged bots on the same Z-level are detected! continue //Also, the PDA must have access to the bot type. menu += "[Bot.name] ([Bot.get_mode()])
" diff --git a/code/game/objects/items/devices/PDA/radio.dm b/code/game/objects/items/devices/PDA/radio.dm index ae56779298..a837bfc198 100644 --- a/code/game/objects/items/devices/PDA/radio.dm +++ b/code/game/objects/items/devices/PDA/radio.dm @@ -54,7 +54,7 @@ var/time = time2text(world.realtime,"hh:mm:ss") var/turf/T = get_turf(src) - lastsignalers.Add("[time] : [usr.key] used [src] @ location ([T.x],[T.y],[T.z]) : [format_frequency(frequency)]/[code]") + GLOB.lastsignalers.Add("[time] : [usr.key] used [src] @ location ([T.x],[T.y],[T.z]) : [format_frequency(frequency)]/[code]") var/datum/signal/signal = new signal.source = src diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index 0e4c97e816..d7cf9b0b9b 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -38,7 +38,7 @@ cut_overlays() /obj/item/device/aicard/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) + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "intellicard", name, 500, 500, master_ui, state) diff --git a/code/game/objects/items/devices/camera_bug.dm b/code/game/objects/items/devices/camera_bug.dm index 9272082def..520646f478 100644 --- a/code/game/objects/items/devices/camera_bug.dm +++ b/code/game/objects/items/devices/camera_bug.dm @@ -74,7 +74,7 @@ /obj/item/device/camera_bug/proc/get_cameras() if( world.time > (last_net_update + 100)) bugged_cameras = list() - for(var/obj/machinery/camera/camera in cameranet.cameras) + for(var/obj/machinery/camera/camera in GLOB.cameranet.cameras) if(camera.stat || !camera.can_use()) continue if(length(list("SS13","MINE")&camera.network)) diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index 3c1e827f01..0e4f7200bb 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -31,6 +31,8 @@ /obj/item/device/chameleon/afterattack(atom/target, mob/user , proximity) if(!proximity) return + if(!check_sprite(target)) + return if(!active_dummy) if(istype(target,/obj/item) && !istype(target, /obj/item/weapon/disk/nuclear)) playsound(get_turf(src), 'sound/weapons/flash.ogg', 100, 1, -6) @@ -41,6 +43,11 @@ temp.plane = initial(target.plane) saved_appearance = temp.appearance +/obj/item/device/chameleon/proc/check_sprite(atom/target) + if(target.icon_state in icon_states(target.icon)) + return TRUE + return FALSE + /obj/item/device/chameleon/proc/toggle() if(!can_use || !saved_appearance) return if(active_dummy) @@ -137,4 +144,4 @@ /obj/effect/dummy/chameleon/Destroy() master.disrupt(0) - return ..() \ No newline at end of file + return ..() diff --git a/code/game/objects/items/devices/doorCharge.dm b/code/game/objects/items/devices/doorCharge.dm index e5d66e466c..c9539da58f 100644 --- a/code/game/objects/items/devices/doorCharge.dm +++ b/code/game/objects/items/devices/doorCharge.dm @@ -34,7 +34,7 @@ /obj/item/device/doorCharge/examine(mob/user) ..() - if(user.mind in ticker.mode.traitors) //No nuke ops because the device is excluded from nuclear + if(user.mind in SSticker.mode.traitors) //No nuke ops because the device is excluded from nuclear to_chat(user, "A small explosive device that can be used to sabotage airlocks to cause an explosion upon opening. To apply, remove the airlock's maintenance panel and place it within.") else to_chat(user, "A small, suspicious object that feels lukewarm when held.") diff --git a/code/modules/telesci/gps.dm b/code/game/objects/items/devices/gps.dm similarity index 88% rename from code/modules/telesci/gps.dm rename to code/game/objects/items/devices/gps.dm index 53874de1ce..00e221918c 100644 --- a/code/modules/telesci/gps.dm +++ b/code/game/objects/items/devices/gps.dm @@ -1,4 +1,4 @@ -var/list/GPS_list = list() +GLOBAL_LIST_EMPTY(GPS_list) /obj/item/device/gps name = "global positioning system" desc = "Helping lost spacemen find their way through the planets since 2016. Alt+click to toggle power." @@ -8,25 +8,25 @@ var/list/GPS_list = list() slot_flags = SLOT_BELT origin_tech = "materials=2;magnets=1;bluespace=2" var/gpstag = "COM0" - var/emped = 0 + var/emped = FALSE var/turf/locked_location var/tracking = TRUE -/obj/item/device/gps/New() +/obj/item/device/gps/Initialize() ..() - GPS_list.Add(src) + GLOB.GPS_list += src name = "global positioning system ([gpstag])" add_overlay("working") /obj/item/device/gps/Destroy() - GPS_list.Remove(src) + GLOB.GPS_list -= src return ..() /obj/item/device/gps/emp_act(severity) emped = TRUE cut_overlay("working") add_overlay("emp") - addtimer(CALLBACK(src, .proc/reboot), 300) + addtimer(CALLBACK(src, .proc/reboot), 300, TIMER_OVERRIDE) //if a new EMP happens, remove the old timer so it doesn't reactivate early /obj/item/device/gps/proc/reboot() emped = FALSE @@ -38,6 +38,7 @@ var/list/GPS_list = list() return //user not valid to use gps if(emped) to_chat(user, "It's busted!") + return if(tracking) cut_overlay("working") to_chat(user, "[src] is no longer tracking, or visible to other GPS devices.") @@ -53,7 +54,7 @@ var/list/GPS_list = list() return var/obj/item/device/gps/t = "" - var/gps_window_height = 110 + GPS_list.len * 20 // Variable window height, depending on how many GPS units there are to show + var/gps_window_height = 110 + GLOB.GPS_list.len * 20 // Variable window height, depending on how many GPS units there are to show if(emped) t += "ERROR" else @@ -63,7 +64,7 @@ var/list/GPS_list = list() t += "
Bluespace coordinates saved: [locked_location.loc]" gps_window_height += 20 - for(var/obj/item/device/gps/G in GPS_list) + for(var/obj/item/device/gps/G in GLOB.GPS_list) var/turf/pos = get_turf(G) var/area/gps_area = get_area(G) var/tracked_gpstag = G.gpstag @@ -131,10 +132,10 @@ var/list/GPS_list = list() for marking the area around the transition edges." var/list/turf/tagged -/obj/item/device/gps/visible_debug/New() +/obj/item/device/gps/visible_debug/Initialize() . = ..() tagged = list() - SSfastprocess.processing += src + START_PROCESSING(SSfastprocess, src) /obj/item/device/gps/visible_debug/process() var/turf/T = get_turf(src) @@ -155,5 +156,5 @@ var/list/GPS_list = list() if(tagged) clear() tagged = null - SSfastprocess.processing -= src + STOP_PROCESSING(SSfastprocess, src) . = ..() diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index 20960a64e1..e298e0500e 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -53,13 +53,13 @@ /obj/item/device/multitool/ai_detect/proc/multitool_detect() var/turf/our_turf = get_turf(src) - for(var/mob/living/silicon/ai/AI in ai_list) + for(var/mob/living/silicon/ai/AI in GLOB.ai_list) if(AI.cameraFollow == src) detect_state = PROXIMITY_ON_SCREEN break - if(!detect_state && cameranet.chunkGenerated(our_turf.x, our_turf.y, our_turf.z)) - var/datum/camerachunk/chunk = cameranet.getCameraChunk(our_turf.x, our_turf.y, our_turf.z) + if(!detect_state && GLOB.cameranet.chunkGenerated(our_turf.x, our_turf.y, our_turf.z)) + var/datum/camerachunk/chunk = GLOB.cameranet.getCameraChunk(our_turf.x, our_turf.y, our_turf.z) if(chunk) if(chunk.seenby.len) for(var/mob/camera/aiEye/A in chunk.seenby) @@ -78,7 +78,7 @@ /obj/item/device/multitool/ai_detect/admin/multitool_detect() var/turf/our_turf = get_turf(src) for(var/mob/J in urange(rangewarning,our_turf)) - if(admin_datums[J.ckey]) + if(GLOB.admin_datums[J.ckey]) detect_state = PROXIMITY_NEAR var/turf/detect_turf = get_turf(J) if(get_dist(our_turf, detect_turf) < rangealert) diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index 5465790f2b..be69869d73 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -9,14 +9,14 @@ var/mob/living/silicon/pai/pai resistance_flags = FIRE_PROOF | ACID_PROOF | INDESTRUCTIBLE -/obj/item/device/paicard/New() +/obj/item/device/paicard/Initialize() ..() - pai_card_list += src + SSpai.pai_card_list += src add_overlay("pai-off") /obj/item/device/paicard/Destroy() //Will stop people throwing friend pAIs into the singularity so they can respawn - pai_card_list -= src + SSpai.pai_card_list -= src if(!isnull(pai)) pai.death(0) return ..() diff --git a/code/game/objects/items/devices/radio/beacon.dm b/code/game/objects/items/devices/radio/beacon.dm index 3161fb5ac3..d2e788e7a3 100644 --- a/code/game/objects/items/devices/radio/beacon.dm +++ b/code/game/objects/items/devices/radio/beacon.dm @@ -9,13 +9,13 @@ /obj/item/device/radio/beacon/New() ..() - teleportbeacons += src + GLOB.teleportbeacons += src /obj/item/device/radio/beacon/Destroy() - teleportbeacons.Remove(src) + GLOB.teleportbeacons.Remove(src) return ..() -/obj/item/device/radio/beacon/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans) +/obj/item/device/radio/beacon/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans, message_mode) return /obj/item/device/radio/beacon/send_hear() diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index f17d08082c..f1689ec334 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -19,7 +19,7 @@ /obj/item/device/electropack/Initialize() ..() - SSradio.add_object(src, frequency, RADIO_CHAT) + SSradio.add_object(src, frequency, GLOB.RADIO_CHAT) /obj/item/device/electropack/Destroy() if(SSradio) @@ -66,7 +66,7 @@ if(href_list["freq"]) SSradio.remove_object(src, frequency) frequency = sanitize_frequency(frequency + text2num(href_list["freq"])) - SSradio.add_object(src, frequency, RADIO_CHAT) + SSradio.add_object(src, frequency, GLOB.RADIO_CHAT) else if(href_list["code"]) code += text2num(href_list["code"]) @@ -107,7 +107,7 @@ spawn(100) shock_cooldown = 0 var/mob/M = loc - step(M, pick(cardinal)) + step(M, pick(GLOB.cardinal)) to_chat(M, "You feel a sharp shock!") var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm index aa06cc380b..b34e64bb89 100644 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ b/code/game/objects/items/devices/radio/encryptionkey.dm @@ -1,4 +1,3 @@ - /obj/item/device/encryptionkey name = "standard encryption key" desc = "An encryption key for a radio headset. Has no special codes in it. WHY DOES IT EXIST? ASK NANOTRASEN." @@ -8,7 +7,7 @@ origin_tech = "engineering=2;bluespace=1" var/translate_binary = 0 var/syndie = 0 - var/centcom = 0 + var/independent = FALSE var/list/channels = list() /obj/item/device/encryptionkey/syndicate @@ -126,7 +125,7 @@ name = "centcom radio encryption key" desc = "An encryption key for a radio headset. To access the centcom channel, use :y." icon_state = "cent_cypherkey" - centcom = 1 + independent = TRUE channels = list("Centcom" = 1) /obj/item/device/encryptionkey/ai //ported from NT, this goes 'inside' the AI. diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index d9e3e34ab4..0cbd594b85 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -22,7 +22,7 @@ keyslot2 = null return ..() -/obj/item/device/radio/headset/talk_into(mob/living/M, message, channel, list/spans) +/obj/item/device/radio/headset/talk_into(mob/living/M, message, channel, list/spans,datum/language/language) if (!listening) return ITALICS | REDUCE_RANGE return ..() @@ -231,7 +231,7 @@ for(var/ch_name in channels) - SSradio.remove_object(src, radiochannels[ch_name]) + SSradio.remove_object(src, GLOB.radiochannels[ch_name]) secure_radio_connections[ch_name] = null @@ -291,11 +291,18 @@ if(keyslot2.syndie) src.syndie = 1 - if (keyslot2.centcom) - centcom = 1 + if (keyslot2.independent) + independent = TRUE for(var/ch_name in channels) - secure_radio_connections[ch_name] = add_radio(src, radiochannels[ch_name]) + secure_radio_connections[ch_name] = add_radio(src, GLOB.radiochannels[ch_name]) return + +/obj/item/device/radio/headset/AltClick(mob/living/user) + if(!istype(user) || !Adjacent(user) || user.incapacitated()) + return + if (command) + use_command = !use_command + to_chat(user, "You toggle high-volume mode [use_command ? "on" : "off"].") diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 5482af5fc0..22a850f905 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -27,7 +27,7 @@ /obj/item/device/radio/intercom/interact(mob/user) ..() - ui_interact(user, state = default_state) + ui_interact(user, state = GLOB.default_state) /obj/item/device/radio/intercom/receive_range(freq, level) if(!on) @@ -40,14 +40,14 @@ return -1 if(!src.listening) return -1 - if(freq == SYND_FREQ) + if(freq == GLOB.SYND_FREQ) if(!(src.syndie)) return -1//Prevents broadcast of messages over devices lacking the encryption return canhear_range -/obj/item/device/radio/intercom/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans) +/obj/item/device/radio/intercom/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans, message_mode) if(!anyai && !(speaker in ai)) return ..() diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 9ea214d459..1f2f86e42a 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -23,14 +23,12 @@ var/subspace_switchable = 0 var/subspace_transmission = 0 var/syndie = 0//Holder to see if it's a syndicate encrpyed radio - var/centcom = 0//Bleh, more dirty booleans + var/independent = FALSE // If true, bypasses any tcomms machinery. var/freqlock = 0 //Frequency lock to stop the user from untuning specialist radios. var/emped = 0 //Highjacked to track the number of consecutive EMPs on the radio, allowing consecutive EMP's to stack properly. // "Example" = FREQ_LISTENING|FREQ_BROADCASTING flags = CONDUCT | HEAR slot_flags = SLOT_BELT - languages_spoken = HUMAN | ROBOT - languages_understood = HUMAN | ROBOT throw_speed = 3 throw_range = 7 w_class = WEIGHT_CLASS_SMALL @@ -58,7 +56,7 @@ channels = list() translate_binary = 0 syndie = 0 - centcom = 0 + independent = FALSE if(keyslot) for(var/ch_name in keyslot.channels) @@ -73,11 +71,11 @@ if(keyslot.syndie) syndie = 1 - if(keyslot.centcom) - centcom = 1 + if(keyslot.independent) + independent = TRUE for(var/ch_name in channels) - secure_radio_connections[ch_name] = add_radio(src, radiochannels[ch_name]) + secure_radio_connections[ch_name] = add_radio(src, GLOB.radiochannels[ch_name]) /obj/item/device/radio/proc/make_syndie() // Turns normal radios into Syndicate radios! qdel(keyslot) @@ -99,7 +97,7 @@ set_frequency(frequency) for(var/ch_name in channels) - secure_radio_connections[ch_name] = add_radio(src, radiochannels[ch_name]) + secure_radio_connections[ch_name] = add_radio(src, GLOB.radiochannels[ch_name]) /obj/item/device/radio/interact(mob/user) if (..()) @@ -110,7 +108,7 @@ ui_interact(user) /obj/item/device/radio/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ - datum/tgui/master_ui = null, datum/ui_state/state = inventory_state) + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "radio", name, 370, 220 + channels.len * 22, master_ui, state) @@ -190,11 +188,15 @@ recalculateChannels() . = TRUE -/obj/item/device/radio/talk_into(atom/movable/M, message, channel, list/spans) - INVOKE_ASYNC(src, .proc/talk_into_impl, M, message, channel, spans) +/obj/item/device/radio/talk_into(atom/movable/M, message, channel, list/spans, datum/language/language) + if(!spans) + spans = M.get_spans() + if(!language) + language = M.get_default_language() + INVOKE_ASYNC(src, .proc/talk_into_impl, M, message, channel, spans, language) return ITALICS | REDUCE_RANGE -/obj/item/device/radio/proc/talk_into_impl(atom/movable/M, message, channel, list/spans) +/obj/item/device/radio/proc/talk_into_impl(atom/movable/M, message, channel, list/spans, datum/language/language) if(!on) return // the device has to be on // Fix for permacell radios, but kinda eh about actually fixing them. if(!M || !message) return @@ -239,7 +241,7 @@ var/turf/position = get_turf(src) var/jammed = FALSE - for(var/obj/item/device/jammer/jammer in active_jammers) + for(var/obj/item/device/jammer/jammer in GLOB.active_jammers) if(get_dist(position,get_turf(jammer)) < jammer.range) jammed = TRUE break @@ -265,7 +267,7 @@ // --- Human: use their job as seen on the crew manifest - makes it unneeded to carry an ID for an AI to see their job if(ishuman(M)) - var/datum/data/record/findjob = find_record("name", voice, data_core.general) + var/datum/data/record/findjob = find_record("name", voice, GLOB.data_core.general) if(voice != real_name) voicemask = 1 @@ -299,9 +301,9 @@ else jobname = "Unknown" - /* ###### Centcom channel bypasses all comms relays. ###### */ + /* ###### `independent` radios bypass all comms relays. ###### */ - if (freqnum == CENTCOM_FREQ && centcom) + if(independent) var/datum/signal/signal = new signal.transmission_method = 2 signal.data = list( @@ -322,18 +324,18 @@ "server" = null, "reject" = 0, "level" = 0, - "languages" = languages_spoken, + "language" = language, "spans" = spans, "verb_say" = M.verb_say, "verb_ask" = M.verb_ask, "verb_exclaim" = M.verb_exclaim, - "verb_yell" = M.verb_yell + "verb_yell" = M.verb_yell, ) signal.frequency = freqnum // Quick frequency set Broadcast_Message(M, voicemask, src, message, voice, jobname, real_name, 5, signal.data["compression"], list(position.z, 0), freq, spans, - verb_say, verb_ask, verb_exclaim, verb_yell) + verb_say, verb_ask, verb_exclaim, verb_yell, language) return /* ###### Radio headsets can only broadcast through subspace ###### */ @@ -367,7 +369,7 @@ "server" = null, // the last server to log this signal "reject" = 0, // if nonzero, the signal will not be accepted by any broadcasting machinery "level" = position.z, // The source's z level - "languages" = M.languages_spoken, //The languages M is talking in. + "language" = language, "spans" = spans, //the span classes of this message. "verb_say" = M.verb_say, //the verb used when talking normally "verb_ask" = M.verb_ask, //the verb used when asking @@ -378,11 +380,11 @@ //#### Sending the signal to all subspace receivers ####// - for(var/obj/machinery/telecomms/receiver/R in telecomms_list) + for(var/obj/machinery/telecomms/receiver/R in GLOB.telecomms_list) R.receive_signal(signal) // Allinone can act as receivers. - for(var/obj/machinery/telecomms/allinone/R in telecomms_list) + for(var/obj/machinery/telecomms/allinone/R in GLOB.telecomms_list) R.receive_signal(signal) // Receiving code can be located in Telecommunications.dm @@ -417,7 +419,7 @@ "server" = null, "reject" = 0, "level" = position.z, - "languages" = languages_spoken, + "language" = language, "spans" = spans, "verb_say" = M.verb_say, "verb_ask" = M.verb_ask, @@ -425,7 +427,7 @@ "verb_yell" = M.verb_yell ) signal.frequency = freqnum // Quick frequency set - for(var/obj/machinery/telecomms/receiver/R in telecomms_list) + for(var/obj/machinery/telecomms/receiver/R in GLOB.telecomms_list) R.receive_signal(signal) @@ -440,14 +442,14 @@ Broadcast_Message(M, voicemask, src, message, voice, jobname, real_name, filter_type, signal.data["compression"], list(position.z), freq, spans, - verb_say, verb_ask, verb_exclaim, verb_yell) + verb_say, verb_ask, verb_exclaim, verb_yell, language) -/obj/item/device/radio/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans) +/obj/item/device/radio/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) if(radio_freq) return if(broadcasting) if(get_dist(src, speaker) <= canhear_range) - talk_into(speaker, raw_message, , spans) + talk_into(speaker, raw_message, , spans, language=message_language) /* /obj/item/device/radio/proc/accept_rad(obj/item/device/radio/R as obj, message) @@ -474,11 +476,11 @@ var/turf/position = get_turf(src) if(!position || !(position.z in level)) return -1 - if(freq == SYND_FREQ) + if(freq == GLOB.SYND_FREQ) if(!(src.syndie)) //Checks to see if it's allowed on that frequency, based on the encryption keys return -1 - if(freq == CENTCOM_FREQ) - if (!(src.centcom)) + if(freq == GLOB.CENTCOM_FREQ) + if(!independent) return -1 if (!on) return -1 @@ -490,7 +492,7 @@ if (!accept) for(var/ch_name in channels) if(channels[ch_name] & FREQ_LISTENING) - if(radiochannels[ch_name] == text2num(freq) || syndie) //the radiochannels list is located in communications.dm + if(GLOB.radiochannels[ch_name] == text2num(freq) || syndie) //the GLOB.radiochannels list is located in communications.dm accept = 1 break if (!accept) @@ -559,14 +561,14 @@ /obj/item/device/radio/borg/syndicate/New() ..() - set_frequency(SYND_FREQ) + set_frequency(GLOB.SYND_FREQ) /obj/item/device/radio/borg/attackby(obj/item/weapon/W, mob/user, params) if(istype(W, /obj/item/weapon/screwdriver)) if(keyslot) for(var/ch_name in channels) - SSradio.remove_object(src, radiochannels[ch_name]) + SSradio.remove_object(src, GLOB.radiochannels[ch_name]) secure_radio_connections[ch_name] = null diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 3c6968d7f4..c3a1388b18 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -195,7 +195,7 @@ MASS SPECTROMETER var/blood_percent = round((C.blood_volume / BLOOD_VOLUME_NORMAL)*100) var/blood_type = C.dna.blood_type if(blood_id != "blood")//special blood substance - var/datum/reagent/R = chemical_reagents_list[blood_id] + var/datum/reagent/R = GLOB.chemical_reagents_list[blood_id] if(R) blood_type = R.name else @@ -285,7 +285,7 @@ MASS SPECTROMETER if(total_moles) var/list/env_gases = environment.gases - environment.assert_gases(arglist(hardcoded_gases)) + environment.assert_gases(arglist(GLOB.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 @@ -314,7 +314,7 @@ MASS SPECTROMETER for(var/id in env_gases) - if(id in hardcoded_gases) + if(id in GLOB.hardcoded_gases) continue var/gas_concentration = env_gases[id][MOLES]/total_moles to_chat(user, "[env_gases[id][GAS_META][META_GAS_NAME]]: [round(gas_concentration*100, 0.01)] %") @@ -368,7 +368,7 @@ MASS SPECTROMETER dat += "
None" else for(var/R in blood_traces) - dat += "
[chemical_reagents_list[R]]" + dat += "
[GLOB.chemical_reagents_list[R]]" if(details) dat += " ([blood_traces[R]] units)" dat += "" diff --git a/code/game/objects/items/devices/sensor_device.dm b/code/game/objects/items/devices/sensor_device.dm index d15e254904..a2deafe916 100644 --- a/code/game/objects/items/devices/sensor_device.dm +++ b/code/game/objects/items/devices/sensor_device.dm @@ -8,4 +8,4 @@ origin_tech = "programming=3;materials=3;magnets=3" /obj/item/device/sensor_device/attack_self(mob/user) - crewmonitor.show(user) //Proc already exists, just had to call it + GLOB.crewmonitor.show(user) //Proc already exists, just had to call it diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index 95c04e9579..bb59779f81 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -6,8 +6,6 @@ w_class = WEIGHT_CLASS_SMALL flags = HEAR slot_flags = SLOT_BELT - languages_spoken = ALL //this is a translator, after all. - languages_understood = ALL //this is a translator, after all. materials = list(MAT_METAL=60, MAT_GLASS=30) force = 2 throwforce = 0 @@ -15,14 +13,16 @@ var/playing = 0 var/playsleepseconds = 0 var/obj/item/device/tape/mytape + var/starting_tape_type = /obj/item/device/tape/random var/open_panel = 0 var/canprint = 1 -/obj/item/device/taperecorder/New() - mytape = new /obj/item/device/tape/random(src) - update_icon() +/obj/item/device/taperecorder/Initialize(mapload) ..() + if(starting_tape_type) + mytape = new starting_tape_type(src) + update_icon() /obj/item/device/taperecorder/examine(mob/user) @@ -92,7 +92,7 @@ icon_state = "taperecorder_idle" -/obj/item/device/taperecorder/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, spans) +/obj/item/device/taperecorder/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, spans, message_mode) if(mytape && recording) mytape.timestamp += mytape.used_capacity mytape.storedinfo += "\[[time2text(mytape.used_capacity * 10,"mm:ss")]\] [message]" @@ -229,8 +229,8 @@ //empty tape recorders -/obj/item/device/taperecorder/empty/New() - return +/obj/item/device/taperecorder/empty + starting_tape_type = null /obj/item/device/tape @@ -287,4 +287,4 @@ //Random colour tapes /obj/item/device/tape/random/New() icon_state = "tape_[pick("white", "blue", "red", "yellow", "purple")]" - ..() \ No newline at end of file + ..() diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index e51cc33fe0..7a9470d991 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -230,15 +230,15 @@ effective or pretty fucking useless. desc = "Device used to disrupt nearby radio communication." icon_state = "jammer" var/active = FALSE - var/range = 7 + var/range = 12 /obj/item/device/jammer/attack_self(mob/user) to_chat(user,"You [active ? "deactivate" : "activate"] the [src]") active = !active if(active) - active_jammers |= src + GLOB.active_jammers |= src else - active_jammers -= src + GLOB.active_jammers -= src update_icon() \ No newline at end of file diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 80d0d31056..257418eaa7 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -53,7 +53,7 @@ A.holder = src A.toggle_secure() //this calls update_icon(), which calls update_icon() on the holder (i.e. the bomb). - bombers += "[key_name(user)] attached a [item] to a transfer valve." + GLOB.bombers += "[key_name(user)] attached a [item] to a transfer valve." message_admins("[key_name_admin(user)] attached a [item] to a transfer valve.") log_game("[key_name_admin(user)] attached a [item] to a transfer valve.") attacher = user @@ -189,7 +189,7 @@ var/bomb_message = "[log_str1]
[A.name] [log_str2][log_attacher] [log_str3][last_touch_info]" - bombers += bomb_message + GLOB.bombers += bomb_message message_admins(bomb_message, 0, 1) log_game("[log_str1] [A.name]([A.x],[A.y],[A.z]) [log_str2] [log_str3]") diff --git a/code/game/objects/items/eightball.dm b/code/game/objects/items/eightball.dm index eb3a4172f7..28e42813b6 100644 --- a/code/game/objects/items/eightball.dm +++ b/code/game/objects/items/eightball.dm @@ -54,7 +54,7 @@ shaking = TRUE start_shaking(user) - if(do_after(user, shake_time, needhand=TRUE, target=src, progress=TRUE)) + if(do_after(user, shake_time, needhand=TRUE, target=user, progress=TRUE)) var/answer = get_answer() say(answer) @@ -98,10 +98,10 @@ /obj/item/toy/eightball/haunted/Initialize(mapload) ..() votes = list() - poi_list |= src + GLOB.poi_list |= src /obj/item/toy/eightball/haunted/Destroy() - poi_list -= src + GLOB.poi_list -= src . = ..() /obj/item/toy/eightball/haunted/attack_ghost(mob/user) @@ -110,7 +110,7 @@ return interact(user) -/obj/item/toy/eightball/haunted/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, spans) +/obj/item/toy/eightball/haunted/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, spans, message_mode) last_message = raw_message /obj/item/toy/eightball/haunted/start_shaking(mob/user) @@ -155,7 +155,7 @@ return most_popular_answer -/obj/item/toy/eightball/haunted/ui_interact(mob/user, ui_key="main", datum/tgui/ui=null, force_open=0, datum/tgui/master_ui=null, datum/ui_state/state=observer_state) +/obj/item/toy/eightball/haunted/ui_interact(mob/user, ui_key="main", datum/tgui/ui=null, force_open=0, datum/tgui/master_ui=null, datum/ui_state/state = GLOB.observer_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index a0d0728487..1028ca1429 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -42,17 +42,17 @@ /obj/item/robot_suit/proc/updateicon() cut_overlays() if(l_arm) - add_overlay("l_arm+o") + add_overlay("[l_arm.icon_state]+o") if(r_arm) - add_overlay("r_arm+o") + add_overlay("[r_arm.icon_state]+o") if(chest) - add_overlay("chest+o") + add_overlay("[chest.icon_state]+o") if(l_leg) - add_overlay("l_leg+o") + add_overlay("[l_leg.icon_state]+o") if(r_leg) - add_overlay("r_leg+o") + add_overlay("[r_leg.icon_state]+o") if(head) - add_overlay("head+o") + add_overlay("[head.icon_state]+o") /obj/item/robot_suit/proc/check_completion() if(src.l_arm && src.r_arm) @@ -206,7 +206,7 @@ lawsync = 0 O.connected_ai = null else - O.notify_ai(1) + O.notify_ai(NEW_BORG) if(forced_ai) O.connected_ai = forced_ai if(!lawsync) @@ -214,7 +214,7 @@ if(M.laws.id == DEFAULT_AI_LAWID) O.make_laws() - ticker.mode.remove_antag_for_borging(BM.mind) + SSticker.mode.remove_antag_for_borging(BM.mind) if(!istype(M.laws, /datum/ai_laws/ratvar)) remove_servant_of_ratvar(BM, TRUE) BM.mind.transfer_to(O) @@ -248,6 +248,41 @@ else to_chat(user, "The MMI must go in after everything else!") + else if(istype(W, /obj/item/borg/upgrade/ai)) + var/obj/item/borg/upgrade/ai/M = W + if(check_completion()) + if(!isturf(loc)) + to_chat(user, "You cannot install[M], the frame has to be standing on the ground to be perfectly precise!") + return + if(!user.drop_item()) + to_chat(user, "[M] is stuck to your hand!") + return + qdel(M) + var/mob/living/silicon/robot/O = new /mob/living/silicon/robot/shell(get_turf(src)) + + if(!aisync) + lawsync = FALSE + O.connected_ai = null + else + if(forced_ai) + O.connected_ai = forced_ai + O.notify_ai(AI_SHELL) + if(!lawsync) + O.lawupdate = FALSE + O.make_laws() + + + O.cell = chest.cell + chest.cell.loc = O + chest.cell = null + O.locked = panel_locked + O.job = "Cyborg" + forceMove(O) + O.robot_suit = src + if(!locomotion) + O.lockcharge = TRUE + O.update_canmove() + else if(istype(W,/obj/item/weapon/pen)) to_chat(user, "You need to use a multitool to name [src]!") else diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index a83cf764ae..2aee5acdd9 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -43,7 +43,7 @@ R.custom_name = heldname R.updatename() if(oldname == R.real_name) - R.notify_ai(3, oldname, R.real_name) + R.notify_ai(RENAME, oldname, R.real_name) return 1 @@ -381,3 +381,22 @@ R.module.add_module(S, FALSE, TRUE) return 1 + +/obj/item/borg/upgrade/ai + name = "B.O.R.I.S. module" + desc = "Bluespace Optimized Remote Intelligence Synchronization. An uplink device which takes the place of an MMI in cyborg endoskeletons, creating a robotic shell controlled by an AI." + icon_state = "boris" + origin_tech = "engineering=4;magnets=4;programming=4" + +/obj/item/borg/upgrade/ai/action(mob/living/silicon/robot/R) + if(..()) + return + if(R.shell) + to_chat(usr, "This unit is already an AI shell!") + return + if(R.key) //You cannot replace a player unless the key is completely removed. + to_chat(usr, "Intelligence patterns detected in this [R.braintype]. Aborting.") + return + + R.make_shell(src) + return TRUE \ No newline at end of file diff --git a/code/modules/telesci/bscrystal.dm b/code/game/objects/items/stacks/bscrystal.dm similarity index 83% rename from code/modules/telesci/bscrystal.dm rename to code/game/objects/items/stacks/bscrystal.dm index a346540df4..1563781267 100644 --- a/code/modules/telesci/bscrystal.dm +++ b/code/game/objects/items/stacks/bscrystal.dm @@ -1,5 +1,4 @@ -// Bluespace crystals, used in telescience and when crushed it will blink you to a random turf. - +//Bluespace crystals, used in telescience and when crushed it will blink you to a random turf. /obj/item/weapon/ore/bluespace_crystal name = "bluespace crystal" desc = "A glowing bluespace crystal, not much is known about how they work. It looks very delicate." @@ -42,19 +41,17 @@ blink_mob(hit_atom) qdel(src) -// Artifical bluespace crystal, doesn't give you much research. - +//Artifical bluespace crystal, doesn't give you much research. /obj/item/weapon/ore/bluespace_crystal/artificial name = "artificial bluespace crystal" desc = "An artificially made bluespace crystal, it looks delicate." origin_tech = "bluespace=3;plasmatech=4" materials = list(MAT_BLUESPACE=MINERAL_MATERIAL_AMOUNT / 2) blink_range = 4 // Not as good as the organic stuff! - points = 0 // nice try + points = 0 //nice try refined_type = null -// Polycrystals, aka stacks - +//Polycrystals, aka stacks /obj/item/stack/sheet/bluespace_crystal name = "bluespace polycrystal" icon = 'icons/obj/telescience.dmi' @@ -65,21 +62,19 @@ attack_verb = list("bluespace polybashed", "bluespace polybattered", "bluespace polybludgeoned", "bluespace polythrashed", "bluespace polysmashed") var/crystal_type = /obj/item/weapon/ore/bluespace_crystal/refined -/obj/item/stack/sheet/bluespace_crystal/attack_self(mob/user) // to prevent the construction menu from ever happening +/obj/item/stack/sheet/bluespace_crystal/attack_self(mob/user)// to prevent the construction menu from ever happening to_chat(user, "You cannot crush the polycrystal in-hand, try breaking one off.") - return /obj/item/stack/sheet/bluespace_crystal/attack_hand(mob/user) - if (user.get_inactive_held_item() == src) - if(zero_amount()) // in this case, a sanity check + if(user.get_inactive_held_item() == src) + if(zero_amount()) return var/BC = new crystal_type(src) user.put_in_hands(BC) - amount-- - if (amount == 0) - qdel(src) + use(1) + if(!amount) to_chat(user, "You break the final crystal off.") - else to_chat(user, "You break off a crystal.") + else + to_chat(user, "You break off a crystal.") else ..() - return \ No newline at end of file diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 7906de1547..018d5573a3 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -73,7 +73,7 @@ else if(user.gender == FEMALE) t_himself = "herself" user.visible_message("[user] starts to apply [src] on [t_himself]...", "You begin applying [src] on yourself...") - if(!do_mob(user, M, self_delay)) + if(!do_mob(user, M, self_delay, extra_checks=CALLBACK(M, /mob/living/proc/can_inject,user,1))) return user.visible_message("[user] applies [src] on [t_himself].", "You apply [src] on yourself.") @@ -118,6 +118,7 @@ icon_state = "gauze" stop_bleeding = 1800 self_delay = 20 + max_amount = 12 /obj/item/stack/medical/gauze/improvised name = "improvised gauze" diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index 45f9672540..4ebafdff30 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -1,12 +1,12 @@ -var/global/list/datum/stack_recipe/rod_recipes = list ( \ +GLOBAL_LIST_INIT(rod_recipes, list ( \ new/datum/stack_recipe("grille", /obj/structure/grille, 2, time = 10, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("table frame", /obj/structure/table_frame, 2, time = 10, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("scooter frame", /obj/item/scooter_frame, 10, time = 25, one_per_turf = 0), \ - ) + )) /obj/item/stack/rods name = "metal rod" - desc = "Some rods. Can be used for building, or something." + desc = "Some rods. Can be used for building or something." singular_name = "metal rod" icon_state = "rods" item_state = "rods" @@ -24,7 +24,7 @@ var/global/list/datum/stack_recipe/rod_recipes = list ( \ /obj/item/stack/rods/Initialize(mapload, new_amount, merge = TRUE) ..() - recipes = rod_recipes + recipes = GLOB.rod_recipes update_icon() /obj/item/stack/rods/update_icon() diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index ebe30f01ad..e4ec02e746 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -8,10 +8,10 @@ /* * Glass sheets */ -var/global/list/datum/stack_recipe/glass_recipes = list ( \ +GLOBAL_LIST_INIT(glass_recipes, list ( \ new/datum/stack_recipe("directional window", /obj/structure/window/unanchored, time = 0, on_floor = TRUE, window_checks = TRUE), \ new/datum/stack_recipe("fulltile window", /obj/structure/window/fulltile/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE) \ -) +)) /obj/item/stack/sheet/glass name = "glass" @@ -33,7 +33,7 @@ var/global/list/datum/stack_recipe/glass_recipes = list ( \ amount = 50 /obj/item/stack/sheet/glass/Initialize(mapload, new_amount, merge = TRUE) - recipes = glass_recipes + recipes = GLOB.glass_recipes ..() /obj/item/stack/sheet/glass/attackby(obj/item/W, mob/user, params) @@ -70,12 +70,12 @@ var/global/list/datum/stack_recipe/glass_recipes = list ( \ /* * Reinforced glass sheets */ -var/global/list/datum/stack_recipe/reinforced_glass_recipes = list ( \ +GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \ new/datum/stack_recipe("windoor frame", /obj/structure/windoor_assembly, 5, time = 0, on_floor = TRUE, window_checks = TRUE), \ null, \ new/datum/stack_recipe("directional reinforced window", /obj/structure/window/reinforced/unanchored, time = 0, on_floor = TRUE, window_checks = TRUE), \ new/datum/stack_recipe("fulltile reinforced window", /obj/structure/window/reinforced/fulltile/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE) \ -) +)) /obj/item/stack/sheet/rglass @@ -107,7 +107,7 @@ var/global/list/datum/stack_recipe/reinforced_glass_recipes = list ( \ glasource.add_charge(amount * glacost) /obj/item/stack/sheet/rglass/Initialize(mapload, new_amount, merge = TRUE) - recipes = reinforced_glass_recipes + recipes = GLOB.reinforced_glass_recipes ..() @@ -135,7 +135,8 @@ var/global/list/datum/stack_recipe/reinforced_glass_recipes = list ( \ return (BRUTELOSS) -/obj/item/weapon/shard/New() +/obj/item/weapon/shard/Initialize() + . = ..() icon_state = pick("large", "medium", "small") switch(icon_state) if("small") diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 17a4c74e91..dfd0723ab1 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -9,12 +9,12 @@ singular_name = "human skin piece" icon_state = "sheet-hide" -var/global/list/datum/stack_recipe/human_recipes = list( \ +GLOBAL_LIST_INIT(human_recipes, list( \ new/datum/stack_recipe("bloated human costume", /obj/item/clothing/suit/hooded/bloated_human, 5, on_floor = 1), \ - ) + )) /obj/item/stack/sheet/animalhide/human/Initialize(mapload, new_amount, merge = TRUE) - recipes = human_recipes + recipes = GLOB.human_recipes return ..() /obj/item/stack/sheet/animalhide/generic @@ -29,12 +29,12 @@ var/global/list/datum/stack_recipe/human_recipes = list( \ singular_name = "corgi hide piece" icon_state = "sheet-corgi" -var/global/list/datum/stack_recipe/corgi_recipes = list ( \ +GLOBAL_LIST_INIT(corgi_recipes, list ( \ new/datum/stack_recipe("corgi costume", /obj/item/clothing/suit/hooded/ian_costume, 3, on_floor = 1), \ - ) + )) /obj/item/stack/sheet/animalhide/corgi/Initialize(mapload, new_amount, merge = TRUE) - recipes = corgi_recipes + recipes = GLOB.corgi_recipes return ..() /obj/item/stack/sheet/animalhide/cat @@ -49,13 +49,13 @@ var/global/list/datum/stack_recipe/corgi_recipes = list ( \ singular_name = "monkey hide piece" icon_state = "sheet-monkey" -var/global/list/datum/stack_recipe/monkey_recipes = list ( \ +GLOBAL_LIST_INIT(monkey_recipes, list ( \ new/datum/stack_recipe("monkey mask", /obj/item/clothing/mask/gas/monkeymask, 1, on_floor = 1), \ new/datum/stack_recipe("monkey suit", /obj/item/clothing/suit/monkeysuit, 2, on_floor = 1), \ - ) + )) /obj/item/stack/sheet/animalhide/monkey/Initialize(mapload, new_amount, merge = TRUE) - recipes = monkey_recipes + recipes = GLOB.monkey_recipes return ..() /obj/item/stack/sheet/animalhide/lizard @@ -70,13 +70,13 @@ var/global/list/datum/stack_recipe/monkey_recipes = list ( \ singular_name = "alien hide piece" icon_state = "sheet-xeno" -var/global/list/datum/stack_recipe/xeno_recipes = list ( \ +GLOBAL_LIST_INIT(xeno_recipes, list ( \ new/datum/stack_recipe("alien helmet", /obj/item/clothing/head/xenos, 1, on_floor = 1), \ new/datum/stack_recipe("alien suit", /obj/item/clothing/suit/xenos, 2, on_floor = 1), \ - ) + )) /obj/item/stack/sheet/animalhide/xeno/Initialize(mapload, new_amount, merge = TRUE) - recipes = xeno_recipes + recipes = GLOB.xeno_recipes return ..() //don't see anywhere else to put these, maybe together they could be used to make the xenos suit? @@ -134,12 +134,12 @@ var/global/list/datum/stack_recipe/xeno_recipes = list ( \ origin_tech = "biotech=4" -var/global/list/datum/stack_recipe/sinew_recipes = list ( \ +GLOBAL_LIST_INIT(sinew_recipes, list ( \ new/datum/stack_recipe("sinew restraints", /obj/item/weapon/restraints/handcuffs/sinew, 1, on_floor = 1), \ - ) + )) /obj/item/stack/sheet/sinew/Initialize(mapload, new_amount, merge = TRUE) - recipes = sinew_recipes + recipes = GLOB.sinew_recipes return ..() /* * Plates diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 61eb42d6ca..611ef76eb4 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -26,14 +26,14 @@ Mineral Sheets * Sandstone */ -var/global/list/datum/stack_recipe/sandstone_recipes = list ( \ +GLOBAL_LIST_INIT(sandstone_recipes, list ( \ new/datum/stack_recipe("pile of dirt", /obj/machinery/hydroponics/soil, 3, time = 10, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("sandstone door", /obj/structure/mineral_door/sandstone, 10, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("Assistant Statue", /obj/structure/statue/sandstone/assistant, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("Breakdown into sand", /obj/item/weapon/ore/glass, 1, one_per_turf = 0, on_floor = 1), \ /* new/datum/stack_recipe("sandstone wall", ???), \ new/datum/stack_recipe("sandstone floor", ???),\ */ - ) + )) /obj/item/stack/sheet/mineral/sandstone name = "sandstone brick" @@ -47,7 +47,7 @@ var/global/list/datum/stack_recipe/sandstone_recipes = list ( \ sheettype = "sandstone" /obj/item/stack/sheet/mineral/sandstone/Initialize(mapload, new_amount, merge = TRUE) - recipes = sandstone_recipes + recipes = GLOB.sandstone_recipes pixel_x = rand(0,4)-4 pixel_y = rand(0,4)-4 ..() @@ -67,12 +67,12 @@ var/global/list/datum/stack_recipe/sandstone_recipes = list ( \ layer = LOW_ITEM_LAYER origin_tech = "materials=2" -var/global/list/datum/stack_recipe/sandbag_recipes = list ( \ +GLOBAL_LIST_INIT(sandbag_recipes, list ( \ new/datum/stack_recipe("sandbags", /obj/structure/barricade/sandbags, 1, time = 25, one_per_turf = 1, on_floor = 1), \ - ) + )) /obj/item/stack/sheet/mineral/sandbags/Initialize(mapload, new_amount, merge = TRUE) - recipes = sandbag_recipes + recipes = GLOB.sandbag_recipes pixel_x = rand(0,4)-4 pixel_y = rand(0,4)-4 ..() @@ -88,16 +88,16 @@ var/global/list/datum/stack_recipe/sandbag_recipes = list ( \ sheettype = "diamond" materials = list(MAT_DIAMOND=MINERAL_MATERIAL_AMOUNT) -var/global/list/datum/stack_recipe/diamond_recipes = list ( \ +GLOBAL_LIST_INIT(diamond_recipes, list ( \ new/datum/stack_recipe("diamond door", /obj/structure/mineral_door/transparent/diamond, 10, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("diamond tile", /obj/item/stack/tile/mineral/diamond, 1, 4, 20), \ new/datum/stack_recipe("Captain Statue", /obj/structure/statue/diamond/captain, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("AI Hologram Statue", /obj/structure/statue/diamond/ai1, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("AI Core Statue", /obj/structure/statue/diamond/ai2, 5, one_per_turf = 1, on_floor = 1), \ - ) + )) /obj/item/stack/sheet/mineral/diamond/Initialize(mapload, new_amount, merge = TRUE) - recipes = diamond_recipes + recipes = GLOB.diamond_recipes pixel_x = rand(0,4)-4 pixel_y = rand(0,4)-4 ..() @@ -113,15 +113,15 @@ var/global/list/datum/stack_recipe/diamond_recipes = list ( \ sheettype = "uranium" materials = list(MAT_URANIUM=MINERAL_MATERIAL_AMOUNT) -var/global/list/datum/stack_recipe/uranium_recipes = list ( \ +GLOBAL_LIST_INIT(uranium_recipes, list ( \ new/datum/stack_recipe("uranium door", /obj/structure/mineral_door/uranium, 10, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("uranium tile", /obj/item/stack/tile/mineral/uranium, 1, 4, 20), \ new/datum/stack_recipe("Nuke Statue", /obj/structure/statue/uranium/nuke, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("Engineer Statue", /obj/structure/statue/uranium/eng, 5, one_per_turf = 1, on_floor = 1), \ - ) + )) /obj/item/stack/sheet/mineral/uranium/Initialize(mapload, new_amount, merge = TRUE) - recipes = uranium_recipes + recipes = GLOB.uranium_recipes pixel_x = rand(0,4)-4 pixel_y = rand(0,4)-4 ..() @@ -140,14 +140,14 @@ var/global/list/datum/stack_recipe/uranium_recipes = list ( \ max_integrity = 100 materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT) -var/global/list/datum/stack_recipe/plasma_recipes = list ( \ +GLOBAL_LIST_INIT(plasma_recipes, list ( \ new/datum/stack_recipe("plasma door", /obj/structure/mineral_door/transparent/plasma, 10, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("plasma tile", /obj/item/stack/tile/mineral/plasma, 1, 4, 20), \ new/datum/stack_recipe("Scientist Statue", /obj/structure/statue/plasma/scientist, 5, one_per_turf = 1, on_floor = 1), \ - ) + )) /obj/item/stack/sheet/mineral/plasma/Initialize(mapload, new_amount, merge = TRUE) - recipes = plasma_recipes + recipes = GLOB.plasma_recipes pixel_x = rand(0,4)-4 pixel_y = rand(0,4)-4 ..() @@ -175,7 +175,7 @@ var/global/list/datum/stack_recipe/plasma_recipes = list ( \ sheettype = "gold" materials = list(MAT_GOLD=MINERAL_MATERIAL_AMOUNT) -var/global/list/datum/stack_recipe/gold_recipes = list ( \ +GLOBAL_LIST_INIT(gold_recipes, list ( \ new/datum/stack_recipe("golden door", /obj/structure/mineral_door/gold, 10, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("gold tile", /obj/item/stack/tile/mineral/gold, 1, 4, 20), \ new/datum/stack_recipe("HoS Statue", /obj/structure/statue/gold/hos, 5, one_per_turf = 1, on_floor = 1), \ @@ -184,10 +184,10 @@ var/global/list/datum/stack_recipe/gold_recipes = list ( \ new/datum/stack_recipe("RD Statue", /obj/structure/statue/gold/rd, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("Simple Crown", /obj/item/clothing/head/crown, 5), \ new/datum/stack_recipe("CMO Statue", /obj/structure/statue/gold/cmo, 5, one_per_turf = 1, on_floor = 1), \ - ) + )) /obj/item/stack/sheet/mineral/gold/Initialize(mapload, new_amount, merge = TRUE) - recipes = gold_recipes + recipes = GLOB.gold_recipes pixel_x = rand(0,4)-4 pixel_y = rand(0,4)-4 ..() @@ -203,7 +203,7 @@ var/global/list/datum/stack_recipe/gold_recipes = list ( \ sheettype = "silver" materials = list(MAT_SILVER=MINERAL_MATERIAL_AMOUNT) -var/global/list/datum/stack_recipe/silver_recipes = list ( \ +GLOBAL_LIST_INIT(silver_recipes, list ( \ new/datum/stack_recipe("silver door", /obj/structure/mineral_door/silver, 10, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("silver tile", /obj/item/stack/tile/mineral/silver, 1, 4, 20), \ new/datum/stack_recipe("Med Officer Statue", /obj/structure/statue/silver/md, 5, one_per_turf = 1, on_floor = 1), \ @@ -211,10 +211,10 @@ var/global/list/datum/stack_recipe/silver_recipes = list ( \ new/datum/stack_recipe("Sec Officer Statue", /obj/structure/statue/silver/sec, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("Sec Borg Statue", /obj/structure/statue/silver/secborg, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("Med Borg Statue", /obj/structure/statue/silver/medborg, 5, one_per_turf = 1, on_floor = 1), \ - ) + )) /obj/item/stack/sheet/mineral/silver/Initialize(mapload, new_amount, merge = TRUE) - recipes = silver_recipes + recipes = GLOB.silver_recipes pixel_x = rand(0,4)-4 pixel_y = rand(0,4)-4 ..() @@ -230,13 +230,13 @@ var/global/list/datum/stack_recipe/silver_recipes = list ( \ sheettype = "clown" materials = list(MAT_BANANIUM=MINERAL_MATERIAL_AMOUNT) -var/global/list/datum/stack_recipe/clown_recipes = list ( \ +GLOBAL_LIST_INIT(clown_recipes, list ( \ new/datum/stack_recipe("bananium tile", /obj/item/stack/tile/mineral/bananium, 1, 4, 20), \ new/datum/stack_recipe("Clown Statue", /obj/structure/statue/bananium/clown, 5, one_per_turf = 1, on_floor = 1), \ - ) + )) /obj/item/stack/sheet/mineral/bananium/Initialize(mapload, new_amount, merge = TRUE) - recipes = clown_recipes + recipes = GLOB.clown_recipes pixel_x = rand(0,4)-4 pixel_y = rand(0,4)-4 ..() @@ -257,12 +257,12 @@ var/global/list/datum/stack_recipe/clown_recipes = list ( \ sheettype = "titanium" materials = list(MAT_TITANIUM=MINERAL_MATERIAL_AMOUNT) -var/global/list/datum/stack_recipe/titanium_recipes = list ( \ +GLOBAL_LIST_INIT(titanium_recipes, list ( \ new/datum/stack_recipe("titanium tile", /obj/item/stack/tile/mineral/titanium, 1, 4, 20), \ - ) + )) /obj/item/stack/sheet/mineral/titanium/Initialize(mapload, new_amount, merge = TRUE) - recipes = titanium_recipes + recipes = GLOB.titanium_recipes pixel_x = rand(0,4)-4 pixel_y = rand(0,4)-4 ..() @@ -284,12 +284,12 @@ var/global/list/datum/stack_recipe/titanium_recipes = list ( \ sheettype = "plastitanium" materials = list(MAT_TITANIUM=2000, MAT_PLASMA=2000) -var/global/list/datum/stack_recipe/plastitanium_recipes = list ( \ +GLOBAL_LIST_INIT(plastitanium_recipes, list ( \ new/datum/stack_recipe("plas-titanium tile", /obj/item/stack/tile/mineral/plastitanium, 1, 4, 20), \ - ) + )) /obj/item/stack/sheet/mineral/plastitanium/Initialize(mapload, new_amount, merge = TRUE) - recipes = plastitanium_recipes + recipes = GLOB.plastitanium_recipes pixel_x = rand(0,4)-4 pixel_y = rand(0,4)-4 ..() @@ -307,14 +307,14 @@ var/global/list/datum/stack_recipe/plastitanium_recipes = list ( \ origin_tech = "materials=1" sheettype = "snow" -var/global/list/datum/stack_recipe/snow_recipes = list ( \ +GLOBAL_LIST_INIT(snow_recipes, list ( \ new/datum/stack_recipe("Snow Wall",/turf/closed/wall/mineral/snow, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("Snowman", /obj/structure/statue/snow/snowman, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("Snowball", /obj/item/toy/snowball, 1), \ - ) + )) /obj/item/stack/sheet/mineral/snow/Initialize(mapload, new_amount, merge = TRUE) - recipes = snow_recipes + recipes = GLOB.snow_recipes pixel_x = rand(0,4)-4 pixel_y = rand(0,4)-4 ..() @@ -360,7 +360,7 @@ var/global/list/datum/stack_recipe/snow_recipes = list ( \ origin_tech = "materials=6;abductor=1" sheettype = "abductor" -var/global/list/datum/stack_recipe/abductor_recipes = list ( \ +GLOBAL_LIST_INIT(abductor_recipes, list ( \ /* new/datum/stack_recipe("alien chair", /obj/structure/chair, one_per_turf = 1, on_floor = 1), \ */ new/datum/stack_recipe("alien bed", /obj/structure/bed/abductor, 2, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("alien locker", /obj/structure/closet/abductor, 1, time = 15, one_per_turf = 1, on_floor = 1), \ @@ -371,8 +371,8 @@ var/global/list/datum/stack_recipe/abductor_recipes = list ( \ /* null, \ new/datum/stack_recipe("Abductor Agent Statue", /obj/structure/statue/bananium/clown, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("Abductor Sciencist Statue", /obj/structure/statue/bananium/clown, 5, one_per_turf = 1, on_floor = 1)*/ - ) + )) /obj/item/stack/sheet/mineral/abductor/Initialize(mapload, new_amount, merge = TRUE) - recipes = abductor_recipes + recipes = GLOB.abductor_recipes ..() diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 6eedb62766..dbd2de2e75 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -13,7 +13,7 @@ /* * Metal */ -var/global/list/datum/stack_recipe/metal_recipes = list ( \ +GLOBAL_LIST_INIT(metal_recipes, list ( \ new/datum/stack_recipe("stool", /obj/structure/chair/stool, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("bar stool", /obj/structure/chair/stool/bar, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("chair", /obj/structure/chair, one_per_turf = 1, on_floor = 1), \ @@ -51,7 +51,8 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \ new/datum/stack_recipe("button frame", /obj/item/wallframe/button, 1), \ null, \ new/datum/stack_recipe("iron door", /obj/structure/mineral_door/iron, 20, one_per_turf = 1, on_floor = 1), \ -) + new/datum/stack_recipe("floodlight frame", /obj/structure/floodlight_frame, 5, one_per_turf = 1, on_floor = 1), \ +)) /obj/item/stack/sheet/metal name = "metal" @@ -86,16 +87,16 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \ cost = 500 /obj/item/stack/sheet/metal/Initialize(mapload, new_amount, merge = TRUE) - recipes = metal_recipes + recipes = GLOB.metal_recipes return ..() /* * Plasteel */ -var/global/list/datum/stack_recipe/plasteel_recipes = list ( \ +GLOBAL_LIST_INIT(plasteel_recipes, list ( \ new/datum/stack_recipe("AI core", /obj/structure/AIcore, 4, time = 50, one_per_turf = 1), \ new/datum/stack_recipe("bomb assembly", /obj/machinery/syndicatebomb/empty, 10, time = 50), \ -) +)) /obj/item/stack/sheet/plasteel name = "plasteel" @@ -112,7 +113,7 @@ var/global/list/datum/stack_recipe/plasteel_recipes = list ( \ merge_type = /obj/item/stack/sheet/plasteel /obj/item/stack/sheet/plasteel/Initialize(mapload, new_amount, merge = TRUE) - recipes = plasteel_recipes + recipes = GLOB.plasteel_recipes return ..() /obj/item/stack/sheet/plasteel/twenty @@ -124,7 +125,7 @@ var/global/list/datum/stack_recipe/plasteel_recipes = list ( \ /* * Wood */ -var/global/list/datum/stack_recipe/wood_recipes = list ( \ +GLOBAL_LIST_INIT(wood_recipes, list ( \ new/datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1), \ new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20), \ new/datum/stack_recipe("wood table frame", /obj/structure/table_frame/wood, 2, time = 10), \ @@ -146,7 +147,7 @@ var/global/list/datum/stack_recipe/wood_recipes = list ( \ new/datum/stack_recipe("honey frame", /obj/item/honey_frame, 5, time = 10),\ new/datum/stack_recipe("ore box", /obj/structure/ore_box, 4, time = 50, one_per_turf = 1, on_floor = 1),\ new/datum/stack_recipe("baseball bat", /obj/item/weapon/melee/baseball_bat, 5, time = 15),\ - ) + )) /obj/item/stack/sheet/mineral/wood name = "wooden plank" @@ -161,7 +162,7 @@ var/global/list/datum/stack_recipe/wood_recipes = list ( \ merge_type = /obj/item/stack/sheet/mineral/wood /obj/item/stack/sheet/mineral/wood/Initialize(mapload, new_amount, merge = TRUE) - recipes = wood_recipes + recipes = GLOB.wood_recipes return ..() /obj/item/stack/sheet/mineral/wood/fifty @@ -170,7 +171,7 @@ var/global/list/datum/stack_recipe/wood_recipes = list ( \ /* * Cloth */ -var/global/list/datum/stack_recipe/cloth_recipes = list ( \ +GLOBAL_LIST_INIT(cloth_recipes, list ( \ new/datum/stack_recipe("grey jumpsuit", /obj/item/clothing/under/color/grey, 3), \ new/datum/stack_recipe("black shoes", /obj/item/clothing/shoes/sneakers/black, 2), \ null, \ @@ -192,7 +193,7 @@ var/global/list/datum/stack_recipe/cloth_recipes = list ( \ new/datum/stack_recipe("black gloves", /obj/item/clothing/gloves/color/black, 3), \ null, \ new/datum/stack_recipe("blindfold", /obj/item/clothing/glasses/sunglasses/blindfold, 2), \ - ) + )) /obj/item/stack/sheet/cloth name = "cloth" @@ -206,7 +207,7 @@ var/global/list/datum/stack_recipe/cloth_recipes = list ( \ merge_type = /obj/item/stack/sheet/cloth /obj/item/stack/sheet/cloth/Initialize(mapload, new_amount, merge = TRUE) - recipes = cloth_recipes + recipes = GLOB.cloth_recipes return ..() /obj/item/stack/sheet/cloth/ten @@ -215,7 +216,7 @@ var/global/list/datum/stack_recipe/cloth_recipes = list ( \ /* * Cardboard */ -var/global/list/datum/stack_recipe/cardboard_recipes = list ( \ +GLOBAL_LIST_INIT(cardboard_recipes, list ( \ new/datum/stack_recipe("box", /obj/item/weapon/storage/box), \ new/datum/stack_recipe("light tubes", /obj/item/weapon/storage/box/lights/tubes), \ new/datum/stack_recipe("light bulbs", /obj/item/weapon/storage/box/lights/bulbs), \ @@ -226,7 +227,7 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list ( \ new/datum/stack_recipe("folder", /obj/item/weapon/folder), \ new/datum/stack_recipe("large box", /obj/structure/closet/cardboard, 4), \ new/datum/stack_recipe("cardboard cutout", /obj/item/cardboard_cutout, 5), \ -) +)) /obj/item/stack/sheet/cardboard //BubbleWrap //it's cardboard you fuck name = "cardboard" @@ -238,8 +239,8 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list ( \ merge_type = /obj/item/stack/sheet/cardboard /obj/item/stack/sheet/cardboard/Initialize(mapload, new_amount, merge = TRUE) - recipes = cardboard_recipes - return ..() + recipes = GLOB.cardboard_recipes + return ..() /obj/item/stack/sheet/cardboard/fifty amount = 50 @@ -248,14 +249,14 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list ( \ * Runed Metal */ -var/global/list/datum/stack_recipe/runed_metal_recipes = list ( \ +GLOBAL_LIST_INIT(runed_metal_recipes, list ( \ new/datum/stack_recipe("runed door", /obj/machinery/door/airlock/cult, 1, time = 50, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("runed girder", /obj/structure/girder/cult, 1, time = 50, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("pylon", /obj/structure/destructible/cult/pylon, 4, time = 40, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("forge", /obj/structure/destructible/cult/forge, 3, time = 40, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("archives", /obj/structure/destructible/cult/tome, 3, time = 40, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("altar", /obj/structure/destructible/cult/talisman, 3, time = 40, one_per_turf = 1, on_floor = 1), \ - ) + )) /obj/item/stack/sheet/runed_metal name = "runed metal" @@ -286,13 +287,13 @@ var/global/list/datum/stack_recipe/runed_metal_recipes = list ( \ amount = 50 /obj/item/stack/sheet/runed_metal/Initialize(mapload, new_amount, merge = TRUE) - recipes = runed_metal_recipes + recipes = GLOB.runed_metal_recipes return ..() /* * Brass */ -var/global/list/datum/stack_recipe/brass_recipes = list ( \ +GLOBAL_LIST_INIT(brass_recipes, list ( \ new/datum/stack_recipe("wall gear", /obj/structure/destructible/clockwork/wall_gear, 3, time = 30, one_per_turf = TRUE, on_floor = TRUE), \ null, new/datum/stack_recipe("pinion airlock", /obj/machinery/door/airlock/clockwork, 5, time = 50, one_per_turf = TRUE, on_floor = TRUE), \ @@ -302,7 +303,7 @@ var/global/list/datum/stack_recipe/brass_recipes = list ( \ new/datum/stack_recipe("directional brass window", /obj/structure/window/reinforced/clockwork/unanchored, time = 0, on_floor = TRUE, window_checks = TRUE), \ new/datum/stack_recipe("fulltile brass window", /obj/structure/window/reinforced/clockwork/fulltile/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE), \ new/datum/stack_recipe("brass table frame", /obj/structure/table_frame/brass, 1, time = 5, one_per_turf = TRUE, on_floor = TRUE) \ -) +)) /obj/item/stack/tile/brass name = "brass" @@ -323,7 +324,7 @@ var/global/list/datum/stack_recipe/brass_recipes = list ( \ qdel(src) /obj/item/stack/tile/brass/Initialize(mapload, new_amount, merge = TRUE) - recipes = brass_recipes + recipes = GLOB.brass_recipes ..() pixel_x = 0 pixel_y = 0 @@ -359,8 +360,8 @@ var/global/list/datum/stack_recipe/brass_recipes = list ( \ throw_range = 3 origin_tech = "materials=2;biotech=2" -var/global/list/datum/stack_recipe/plastic_recipes = list( - new /datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 5, one_per_turf = 1, on_floor = 1, time = 40)) +GLOBAL_LIST_INIT(plastic_recipes, list( + new /datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 5, one_per_turf = 1, on_floor = 1, time = 40))) /obj/item/stack/sheet/plastic name = "plastic" @@ -379,5 +380,5 @@ var/global/list/datum/stack_recipe/plastic_recipes = list( amount = 5 /obj/item/stack/sheet/plastic/Initialize(mapload, new_amount, merge = TRUE) - recipes = plastic_recipes + recipes = GLOB.plastic_recipes . = ..() diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index c903b9d739..f332422578 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -532,10 +532,10 @@ var/datum/devilinfo/devil = randomDevilInfo() var/list/messages = list() messages += "Some fun facts about: [devil.truename]" - messages += "[lawlorify[LORE][devil.bane]]" - messages += "[lawlorify[LORE][devil.obligation]]" - messages += "[lawlorify[LORE][devil.ban]]" - messages += "[lawlorify[LORE][devil.banish]]" + messages += "[GLOB.lawlorify[LORE][devil.bane]]" + messages += "[GLOB.lawlorify[LORE][devil.obligation]]" + messages += "[GLOB.lawlorify[LORE][devil.ban]]" + messages += "[GLOB.lawlorify[LORE][devil.banish]]" return messages /obj/item/toy/talking/owl @@ -554,81 +554,6 @@ chattering = TRUE phomeme = "griffin" -/obj/item/toy/talking/skeleton - name = "skeleton action figure" - desc = "An action figure modeled after 'Oh-cee', the original content \ - skeleton.\nNot suitable for infants or assistants under 36 months \ - of age." - icon_state = "skeletonprize" - attack_verb = list("boned", "dunked on", "worked down to the bone") - chattering = TRUE - - var/list/regular_messages = list( - "Why was the skeleton such a bad liar? \ - Because you can see right through him!", - "When does a skeleton laugh? When something tickles his funny bone!", - "Why couldn't the skeleton win the beauty contest? \ - Because he had no body!", - "What do you call a skeleton in the winter? A numbskull!", - "What did the skeleton say before eating? Bone appetit!", - "What type of art do skeletons like? Skulltures!", - "What instrument do skeletons play? The trom-bone!", - "Why are skeletons always so calm? \ - Because nothing gets under their skin!", - "How did the skeleton know it was going to rain? \ - He could feel it in his bones.", - "Why did the skeleton go to the hospital? \ - To get his ghoul stones removed.", - "Why can't skeletons play music in churches? \ - Because they have no organs.", - "There's a skeleton inside everyone! Except slime people I guess...", - "The birds are too busy to notice me acting in the shadows!", - "Giraffes have the same number of bones in their necks as humans. \ - You should never trust a giraffe.", - "When I meet a dog in the street, I always offer it a bone!", - "In corsetry, a bone is one of the rigid parts of a corset that \ - forms its frame and gives it rigidity.", - "A person who plays the trombone is called a trombonist or \ - trombone player.", - "Remember, compromise is for those without backbones!", - "If you go up to the captain and say the word 'bone' repeatedly, \ - eventually he'll brig you.", - "Yo ho ho, shiver me bones!", - "So what you're saying is, you only love me for my legs?", - "You will never again find socks that match!", - "BONES! BONES! BONES!", - "Bones absorb x-rays, which is why radiation gives you superpowers.", - "Oh-cee! The ORIGINAL CONTENT SKELETON. Suitable for ages 36 months \ - and up.", - "I just don't have the heart to judge you.", - "I don't have the stomach for this.", - "I'm a fighter, not a liver.", - "How can I see without eyeballs?", - "Ask your parents about 'boning', before you get pregnant.", - "Remember, a dog is for life, not just for christmas.") - -/obj/item/toy/talking/skeleton/suicide_act(mob/user) - user.visible_message("[user] is trying to commit suicide with [src].") - - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.set_species(/datum/species/skeleton) - - toy_talk(user, "RATTLE ME BONES") - - user.Stun(5) - sleep(20) - return OXYLOSS - -/obj/item/toy/talking/skeleton/generate_messages() - return list(pick(regular_messages)) - -/obj/item/toy/talking/skeleton/toy_talk(user, message) - phomeme = pick("sans", "papyrus") - - span = "danger [phomeme]" - ..() - /* || A Deck of Cards for playing various games of chance || */ @@ -1381,34 +1306,10 @@ to_chat(user, "You name the dummy as \"[doll_name]\"") name = "[initial(name)] - [doll_name]" -/obj/item/toy/dummy/talk_into(atom/movable/M, message, channel, list/spans) +/obj/item/toy/dummy/talk_into(atom/movable/M, message, channel, list/spans, datum/language/language) log_say("[key_name(M)] : through dummy : [message]") - say(message) + say(message, language) return NOPASS /obj/item/toy/dummy/GetVoice() return doll_name - - /* - * Ash drake plushie - */ - -/obj/item/plush_drake - name = "Ash drake plushie" - desc = "An adorable stuffed toy that resembles a fierce dragon." - icon = 'icons/obj/plush_drake.dmi' - icon_state = "plush_drake" - item_state = "ash_plush" - w_class = WEIGHT_CLASS_SMALL - attack_verb = list("burned", "bitten", "swooped") - resistance_flags = FLAMMABLE - -//Attack mob -/obj/item/plush_drake/attack(mob/M, mob/user) - return ..() - -//Attack self -/obj/item/plush_drake/attack_self(mob/user) - user << "You pet [src]. D'awww." - return ..() - diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index 4e00f6447a..9457682582 100644 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -67,7 +67,7 @@ AI MODULES var/time = time2text(world.realtime,"hh:mm:ss") var/ainame = law_datum.owner ? law_datum.owner.name : "empty AI core" var/aikey = law_datum.owner ? law_datum.owner.ckey : "null" - lawchanges.Add("[time] : [user.name]([user.key]) used [src.name] on [ainame]([aikey]).[law2log ? " The law specified [law2log]" : ""]") + GLOB.lawchanges.Add("[time] : [user.name]([user.key]) used [src.name] on [ainame]([aikey]).[law2log ? " The law specified [law2log]" : ""]") log_law("[user.key]/[user.name] used [src.name] on [aikey]/([ainame]).[law2log ? " The law specified [law2log]" : ""]") message_admins("[key_name_admin(user)] used [src.name] on [key_name_admin(law_datum.owner)].[law2log ? " The law specified [law2log]" : ""]") diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index 6cd581460a..dbb3149a38 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -213,13 +213,13 @@ RCD src.spark_system = new /datum/effect_system/spark_spread spark_system.set_up(5, 0, src) spark_system.attach(src) - rcd_list += src + GLOB.rcd_list += src /obj/item/weapon/rcd/Destroy() qdel(spark_system) spark_system = null - rcd_list -= src + GLOB.rcd_list -= src . = ..() /obj/item/weapon/rcd/attackby(obj/item/weapon/W, mob/user, params) diff --git a/code/game/objects/items/weapons/RPD.dm b/code/game/objects/items/weapons/RPD.dm index 3daa86ed8e..c0065b7751 100644 --- a/code/game/objects/items/weapons/RPD.dm +++ b/code/game/objects/items/weapons/RPD.dm @@ -31,7 +31,7 @@ RPD /datum/pipe_info/New(pid,direction,dt) src.id=pid - src.icon_state=pipeID2State["[pid]"] + src.icon_state=GLOB.pipeID2State["[pid]"] src.dir = direction src.dirtype=dt @@ -48,7 +48,7 @@ RPD /datum/pipe_info/meter/Render(dispenser,label) return "
  • [label]
  • " //hardcoding is no -var/global/list/disposalpipeID2State=list( +GLOBAL_LIST_INIT(disposalpipeID2State, list( "pipe-s", "pipe-c", "pipe-j1", @@ -59,8 +59,7 @@ var/global/list/disposalpipeID2State=list( "outlet", "intake", "pipe-j1s", - "pipe-j2s" -) + "pipe-j2s")) /datum/pipe_info/disposal categoryId = CATEGORY_DISPOSALS @@ -69,7 +68,7 @@ var/global/list/disposalpipeID2State=list( /datum/pipe_info/disposal/New(var/pid,var/dt) src.id=pid - src.icon_state=disposalpipeID2State[pid+1] + src.icon_state=GLOB.disposalpipeID2State[pid+1] src.dir = SOUTH src.dirtype=dt if(pidDISP_END_CHUTE) @@ -79,7 +78,7 @@ var/global/list/disposalpipeID2State=list( return "
  • [label]
  • " //avoid hardcoding. //find these defines in code\game\machinery\pipe\consruction.dm -var/global/list/RPD_recipes=list( +GLOBAL_LIST_INIT(RPD_recipes, list( "Regular Pipes" = list( "Pipe" = new /datum/pipe_info(PIPE_SIMPLE, 1, PIPE_BENDABLE), //"Bent Pipe" = new /datum/pipe_info(PIPE_SIMPLE, 5, PIPE_BENT), @@ -119,7 +118,7 @@ var/global/list/RPD_recipes=list( "Chute" = new /datum/pipe_info/disposal(DISP_END_CHUTE, PIPE_UNARY), "Sort Junction" = new /datum/pipe_info/disposal(DISP_SORTJUNCTION, PIPE_TRINARY), ) -) +)) /obj/item/weapon/pipe_dispenser name = "Rapid Piping Device (RPD)" desc = "A device used to rapidly pipe things." @@ -205,8 +204,8 @@ var/global/list/RPD_recipes=list( var/icon/preview=null var/datbuild = "" - for(var/category in RPD_recipes) - var/list/cat=RPD_recipes[category] + for(var/category in GLOB.RPD_recipes) + var/list/cat = GLOB.RPD_recipes[category] for(var/label in cat) var/datum/pipe_info/I = cat[label] var/found=0 diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index b2c92183bd..5832dbfbf1 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -131,11 +131,11 @@ update_label("John Doe", "Clowny") /obj/item/weapon/card/id/syndicate name = "agent card" - access = list(access_maint_tunnels, access_syndicate) + access = list(GLOB.access_maint_tunnels, GLOB.access_syndicate) origin_tech = "syndicate=1" var/anyone = FALSE //Can anyone forge the ID or just syndicate? -/obj/item/weapon/card/id/syndicate/New() +/obj/item/weapon/card/id/syndicate/Initialize() ..() var/datum/action/item_action/chameleon/change/chameleon_action = new(src) chameleon_action.chameleon_type = /obj/item/weapon/card/id @@ -181,7 +181,7 @@ update_label("John Doe", "Clowny") desc = "An ID straight from the Syndicate." registered_name = "Syndicate" assignment = "Syndicate Overlord" - access = list(access_syndicate) + access = list(GLOB.access_syndicate) /obj/item/weapon/card/id/captains_spare name = "captain's spare ID" @@ -191,7 +191,7 @@ update_label("John Doe", "Clowny") registered_name = "Captain" assignment = "Captain" -/obj/item/weapon/card/id/captains_spare/New() +/obj/item/weapon/card/id/captains_spare/Initialize() var/datum/job/captain/J = new/datum/job/captain access = J.get_access() ..() @@ -203,7 +203,7 @@ update_label("John Doe", "Clowny") registered_name = "Central Command" assignment = "General" -/obj/item/weapon/card/id/centcom/New() +/obj/item/weapon/card/id/centcom/Initialize() access = get_all_centcom_access() ..() @@ -214,29 +214,33 @@ update_label("John Doe", "Clowny") registered_name = "Emergency Response Team Commander" assignment = "Emergency Response Team Commander" -/obj/item/weapon/card/id/ert/New() - access = get_all_accesses()+get_ert_access("commander")-access_change_ids +/obj/item/weapon/card/id/ert/Initialize() + access = get_all_accesses()+get_ert_access("commander")-GLOB.access_change_ids + ..() /obj/item/weapon/card/id/ert/Security registered_name = "Security Response Officer" assignment = "Security Response Officer" -/obj/item/weapon/card/id/ert/Security/New() - access = get_all_accesses()+get_ert_access("sec")-access_change_ids +/obj/item/weapon/card/id/ert/Security/Initialize() + access = get_all_accesses()+get_ert_access("sec")-GLOB.access_change_ids + ..() /obj/item/weapon/card/id/ert/Engineer registered_name = "Engineer Response Officer" assignment = "Engineer Response Officer" -/obj/item/weapon/card/id/ert/Engineer/New() - access = get_all_accesses()+get_ert_access("eng")-access_change_ids +/obj/item/weapon/card/id/ert/Engineer/Initialize() + access = get_all_accesses()+get_ert_access("eng")-GLOB.access_change_ids + ..() /obj/item/weapon/card/id/ert/Medical registered_name = "Medical Response Officer" assignment = "Medical Response Officer" -/obj/item/weapon/card/id/ert/Medical/New() - access = get_all_accesses()+get_ert_access("med")-access_change_ids +/obj/item/weapon/card/id/ert/Medical/Initialize() + access = get_all_accesses()+get_ert_access("med")-GLOB.access_change_ids + ..() /obj/item/weapon/card/id/prisoner name = "prisoner ID card" @@ -281,18 +285,18 @@ update_label("John Doe", "Clowny") /obj/item/weapon/card/id/mining name = "mining ID" - access = list(access_mining, access_mining_station, access_mineral_storeroom) + access = list(GLOB.access_mining, GLOB.access_mining_station, GLOB.access_mineral_storeroom) /obj/item/weapon/card/id/away name = "a perfectly generic identification card" desc = "A perfectly generic identification card. Looks like it could use some flavor." - access = list(access_away_general) + access = list(GLOB.access_away_general) /obj/item/weapon/card/id/away/hotel name = "Staff ID" desc = "A staff ID used to access the hotel's doors." - access = list(access_away_general, access_away_maint) + access = list(GLOB.access_away_general, GLOB.access_away_maint) /obj/item/weapon/card/id/away/hotel/securty name = "Officer ID" - access = list(access_away_general, access_away_maint, access_away_sec) + access = list(GLOB.access_away_general, GLOB.access_away_maint, GLOB.access_away_sec) diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index 9c873e2048..68d4b985c3 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -104,24 +104,29 @@ CIGARETTE PACKETS ARE IN FANCY.DM item_state = "cigoff" w_class = WEIGHT_CLASS_TINY body_parts_covered = null - var/lit = 0 + var/lit = FALSE + var/starts_lit = FALSE var/icon_on = "cigon" //Note - these are in masks.dmi not in cigarette.dmi var/icon_off = "cigoff" var/type_butt = /obj/item/weapon/cigbutt var/lastHolder = null var/smoketime = 300 var/chem_volume = 30 + var/list/list_reagents = list("nicotine" = 15) heat = 1000 /obj/item/clothing/mask/cigarette/suicide_act(mob/user) user.visible_message("[user] is huffing [src] as quickly as [user.p_they()] can! It looks like [user.p_theyre()] trying to give [user.p_them()]self cancer.") return (TOXLOSS|OXYLOSS) -/obj/item/clothing/mask/cigarette/New() +/obj/item/clothing/mask/cigarette/Initialize() ..() create_reagents(chem_volume) reagents.set_reacting(FALSE) // so it doesn't react until you light it - reagents.add_reagent("nicotine", 15) + if(list_reagents) + reagents.add_reagent_list(list_reagents) + if(starts_lit) + light() /obj/item/clothing/mask/cigarette/Destroy() STOP_PROCESSING(SSobj, src) @@ -245,6 +250,38 @@ CIGARETTE PACKETS ARE IN FANCY.DM /obj/item/clothing/mask/cigarette/is_hot() return lit * heat +// Cigarette brands. + +/obj/item/clothing/mask/cigarette/space_cigarette + desc = "A Space Cigarette brand cigarette." + +/obj/item/clothing/mask/cigarette/dromedary + desc = "A DromedaryCo brand cigarette." + +/obj/item/clothing/mask/cigarette/uplift + desc = "An Uplift Smooth brand cigarette." + list_reagents = list("nicotine" = 7.5, "menthol" = 7.5) + +/obj/item/clothing/mask/cigarette/robust + desc = "A Robust brand cigarette." + +/obj/item/clothing/mask/cigarette/robustgold + desc = "A Robust Gold brand cigarette." + list_reagents = list("nicotine" = 15, "gold" = 1) + +/obj/item/clothing/mask/cigarette/carp + desc = "A Carp Classic brand cigarette." + +/obj/item/clothing/mask/cigarette/syndicate + desc = "An unknown brand cigarette." + list_reagents = list("nicotine" = 15, "omnizine" = 15) + +/obj/item/clothing/mask/cigarette/shadyjims + desc = "A Shady Jim's Super Slims cigarette." + list_reagents = list("nicotine" = 15, "lipolicide" = 4, "ammonia" = 2, "plantbgone" = 1, "toxin" = 1.5) + +// Rollies. + /obj/item/clothing/mask/cigarette/rollie name = "rollie" desc = "A roll of dried plant matter wrapped in thin paper." @@ -262,11 +299,9 @@ CIGARETTE PACKETS ARE IN FANCY.DM src.pixel_x = rand(-5, 5) src.pixel_y = rand(-5, 5) -/obj/item/clothing/mask/cigarette/rollie/trippy/New() - ..() - reagents.add_reagent("mushroomhallucinogen", 50) - light() - +/obj/item/clothing/mask/cigarette/rollie/trippy + list_reagents = list("nicotine" = 15, "mushroomhallucinogen" = 35) + starts_lit = TRUE /obj/item/weapon/cigbutt/roach name = "roach" @@ -338,9 +373,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM icon_off = "pipeoff" smoketime = 0 chem_volume = 100 + list_reagents = null var/packeditem = 0 -/obj/item/clothing/mask/cigarette/pipe/New() +/obj/item/clothing/mask/cigarette/pipe/Initialize() ..() name = "empty [initial(name)]" diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm index 952e51fc96..00d6a55f2e 100644 --- a/code/game/objects/items/weapons/dna_injector.dm +++ b/code/game/objects/items/weapons/dna_injector.dm @@ -23,9 +23,9 @@ /obj/item/weapon/dnainjector/proc/prepare() for(var/mut_key in add_mutations_static) - add_mutations.Add(mutations_list[mut_key]) + add_mutations.Add(GLOB.mutations_list[mut_key]) for(var/mut_key in remove_mutations_static) - remove_mutations.Add(mutations_list[mut_key]) + remove_mutations.Add(GLOB.mutations_list[mut_key]) /obj/item/weapon/dnainjector/proc/inject(mob/living/carbon/M, mob/user) prepare() diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index 394eda9a7a..5c637ba31c 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -88,7 +88,7 @@ forceMove(null) var/message = "[ADMIN_LOOKUPFLW(user)] planted [name] on [target.name] at [ADMIN_COORDJMP(target)] with [timer] second fuse" - bombers += message + GLOB.bombers += message message_admins(message,0,1) log_game("[key_name(user)] planted [name] on [target.name] at [COORD(target)] with [timer] second fuse") diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm index 3da3bb011a..556f727909 100644 --- a/code/game/objects/items/weapons/grenades/flashbang.dm +++ b/code/game/objects/items/weapons/grenades/flashbang.dm @@ -19,6 +19,8 @@ qdel(src) /obj/item/weapon/grenade/flashbang/proc/bang(turf/T , mob/living/M) + if(M.stat == DEAD) //They're dead! + return M.show_message("BANG", 2) playsound(loc, 'sound/weapons/flashbang.ogg', 100, 1) var/distance = max(0,get_dist(get_turf(src),T)) diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm index a8d9826421..e478813558 100644 --- a/code/game/objects/items/weapons/grenades/grenade.dm +++ b/code/game/objects/items/weapons/grenades/grenade.dm @@ -56,7 +56,7 @@ var/turf/bombturf = get_turf(src) var/area/A = get_area(bombturf) var/message = "[ADMIN_LOOKUPFLW(user)]) has primed a [name] for detonation at [ADMIN_COORDJMP(bombturf)]" - bombers += message + GLOB.bombers += message message_admins(message) log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] [COORD(bombturf)].") if(iscarbon(user)) diff --git a/code/game/objects/items/weapons/holy_weapons.dm b/code/game/objects/items/weapons/holy_weapons.dm index 868ec8e059..d42e135aeb 100644 --- a/code/game/objects/items/weapons/holy_weapons.dm +++ b/code/game/objects/items/weapons/holy_weapons.dm @@ -15,37 +15,31 @@ return (BRUTELOSS|FIRELOSS) /obj/item/weapon/nullrod/attack_self(mob/user) - if(reskinned) - return - if(user.mind && (user.mind.isholy)) + if(user.mind && (user.mind.isholy) && !reskinned) reskin_holy_weapon(user) /obj/item/weapon/nullrod/proc/reskin_holy_weapon(mob/M) + if(SSreligion.holy_weapon_type) + return var/obj/item/weapon/nullrod/holy_weapon + var/list/holy_weapons_list = typesof(/obj/item/weapon/nullrod) + var/list/display_names = list() + for(var/V in holy_weapons_list) + var/atom/A = V + display_names += initial(A.name) - if(SSreligion.holy_weapon) - holy_weapon = new SSreligion.holy_weapon - to_chat(M, "The null rod suddenly morphs into your religions already chosen holy weapon.") - else - var/list/holy_weapons_list = typesof(/obj/item/weapon/nullrod) - var/list/display_names = list() - for(var/V in holy_weapons_list) - var/atom/A = V - display_names += initial(A.name) + var/choice = input(M,"What theme would you like for your holy weapon?","Holy Weapon Theme") as null|anything in display_names + if(QDELETED(src) || !choice || M.stat || !in_range(M, src) || M.restrained() || !M.canmove || reskinned) + return - var/choice = input(M,"What theme would you like for your holy weapon?","Holy Weapon Theme") as null|anything in display_names - if(!src || !choice || M.stat || !in_range(M, src) || M.restrained() || !M.canmove || reskinned) - return + var/index = display_names.Find(choice) + var/A = holy_weapons_list[index] - var/index = display_names.Find(choice) - var/A = holy_weapons_list[index] + holy_weapon = new A - holy_weapon = new A - - SSreligion.holy_weapon = holy_weapon.type - - feedback_set_details("chaplain_weapon","[choice]") + SSreligion.holy_weapon_type = holy_weapon.type + feedback_set_details("chaplain_weapon","[choice]") if(holy_weapon) holy_weapon.reskinned = TRUE diff --git a/code/game/objects/items/weapons/implants/implant_abductor.dm b/code/game/objects/items/weapons/implants/implant_abductor.dm index f5a38e2098..1d382a4ece 100644 --- a/code/game/objects/items/weapons/implants/implant_abductor.dm +++ b/code/game/objects/items/weapons/implants/implant_abductor.dm @@ -39,7 +39,7 @@ /obj/item/weapon/implant/abductor/proc/get_team_console(var/team) var/obj/machinery/abductor/console/console - for(var/obj/machinery/abductor/console/c in machines) + for(var/obj/machinery/abductor/console/c in GLOB.machines) if(c.team == team) console = c break diff --git a/code/game/objects/items/weapons/implants/implant_chem.dm b/code/game/objects/items/weapons/implants/implant_chem.dm index 014a35c6ff..e537bf44de 100644 --- a/code/game/objects/items/weapons/implants/implant_chem.dm +++ b/code/game/objects/items/weapons/implants/implant_chem.dm @@ -24,11 +24,11 @@ /obj/item/weapon/implant/chem/New() ..() create_reagents(50) - tracked_chem_implants += src + GLOB.tracked_chem_implants += src /obj/item/weapon/implant/chem/Destroy() . = ..() - tracked_chem_implants -= src + GLOB.tracked_chem_implants -= src /obj/item/weapon/implant/chem/trigger(emote, mob/source) if(emote == "deathgasp") @@ -57,7 +57,7 @@ /obj/item/weapon/implantcase/chem/attackby(obj/item/weapon/W, mob/user, params) if(istype(W,/obj/item/weapon/reagent_containers/syringe) && imp) - W.afterattack(imp, user, params) + W.afterattack(imp, user, TRUE, params) return TRUE else return ..() diff --git a/code/game/objects/items/weapons/implants/implant_explosive.dm b/code/game/objects/items/weapons/implants/implant_explosive.dm index 9e93d3fb3e..ad7079fee1 100644 --- a/code/game/objects/items/weapons/implants/implant_explosive.dm +++ b/code/game/objects/items/weapons/implants/implant_explosive.dm @@ -3,10 +3,14 @@ desc = "And boom goes the weasel." icon_state = "explosive" origin_tech = "materials=2;combat=3;biotech=4;syndicate=4" + actions_types = list(/datum/action/item_action/explosive_implant) + // Explosive implant action is always availible. var/weak = 2 var/medium = 0.8 var/heavy = 0.4 var/delay = 7 + var/popup = FALSE // is the DOUWANNABLOWUP window open? + var/active = FALSE /obj/item/weapon/implant/explosive/get_data() var/dat = {"Implant Specifications:
    @@ -25,14 +29,19 @@ activate("death") /obj/item/weapon/implant/explosive/activate(cause) - if(!cause || !imp_in) - return 0 - if(cause == "action_button" && alert(imp_in, "Are you sure you want to activate your [name]? This will cause you to explode!", "[name] Confirmation", "Yes", "No") != "Yes") + if(!cause || !imp_in || active) return 0 + if(cause == "action_button" || !popup) + popup = TRUE + var/response = alert(imp_in, "Are you sure you want to activate your [name]? This will cause you to explode!", "[name] Confirmation", "Yes", "No") + popup = FALSE + if(response == "No") + return 0 heavy = round(heavy) medium = round(medium) weak = round(weak) to_chat(imp_in, "You activate your [name].") + active = TRUE var/turf/boomturf = get_turf(imp_in) var/area/A = get_area(boomturf) message_admins("[key_name_admin(imp_in)]? (FLW) has activated their [name] at [A.name] (JMP).") diff --git a/code/game/objects/items/weapons/implants/implant_gang.dm b/code/game/objects/items/weapons/implants/implant_gang.dm index bef3f030ce..664e80f07b 100644 --- a/code/game/objects/items/weapons/implants/implant_gang.dm +++ b/code/game/objects/items/weapons/implants/implant_gang.dm @@ -31,8 +31,8 @@ return 0 var/success - if(target.mind in ticker.mode.get_gangsters()) - if(ticker.mode.remove_gangster(target.mind,0,1)) + if(target.mind in SSticker.mode.get_gangsters()) + if(SSticker.mode.remove_gangster(target.mind,0,1)) success = 1 //Was not a gang boss, convert as usual else success = 1 diff --git a/code/game/objects/items/weapons/implants/implant_loyality.dm b/code/game/objects/items/weapons/implants/implant_loyality.dm index 0a6d276415..67182d48a8 100644 --- a/code/game/objects/items/weapons/implants/implant_loyality.dm +++ b/code/game/objects/items/weapons/implants/implant_loyality.dm @@ -19,23 +19,23 @@ /obj/item/weapon/implant/mindshield/implant(mob/living/target, mob/user, silent = 0) if(..()) - if((target.mind in (ticker.mode.head_revolutionaries | ticker.mode.get_gang_bosses()))) + if((target.mind in (SSticker.mode.head_revolutionaries | SSticker.mode.get_gang_bosses()))) if(!silent) target.visible_message("[target] seems to resist the implant!", "You feel something interfering with your mental conditioning, but you resist it!") removed(target, 1) qdel(src) return 0 - if(target.mind in ticker.mode.get_gangsters()) - ticker.mode.remove_gangster(target.mind) + if(target.mind in SSticker.mode.get_gangsters()) + SSticker.mode.remove_gangster(target.mind) if(!silent) target.visible_message("[src] was destroyed in the process!", "You feel a sense of peace and security. You are now protected from brainwashing.") removed(target, 1) qdel(src) return 0 - if(target.mind in ticker.mode.revolutionaries) - ticker.mode.remove_revolutionary(target.mind) + if(target.mind in SSticker.mode.revolutionaries) + SSticker.mode.remove_revolutionary(target.mind) if(!silent) - if(target.mind in ticker.mode.cult) + if(target.mind in SSticker.mode.cult) to_chat(target, "You feel something interfering with your mental conditioning, but you resist it!") else to_chat(target, "You feel a sense of peace and security. You are now protected from brainwashing.") diff --git a/code/game/objects/items/weapons/implants/implant_track.dm b/code/game/objects/items/weapons/implants/implant_track.dm index 68b7285ca9..ea631e360d 100644 --- a/code/game/objects/items/weapons/implants/implant_track.dm +++ b/code/game/objects/items/weapons/implants/implant_track.dm @@ -6,11 +6,11 @@ /obj/item/weapon/implant/tracking/New() ..() - tracked_implants += src + GLOB.tracked_implants += src /obj/item/weapon/implant/tracking/Destroy() . = ..() - tracked_implants -= src + GLOB.tracked_implants -= src /obj/item/weapon/implanter/tracking imp_type = /obj/item/weapon/implant/tracking diff --git a/code/game/objects/items/weapons/implants/implantchair.dm b/code/game/objects/items/weapons/implants/implantchair.dm index eea213d0cf..6f1a43a93a 100644 --- a/code/game/objects/items/weapons/implants/implantchair.dm +++ b/code/game/objects/items/weapons/implants/implantchair.dm @@ -27,7 +27,7 @@ /obj/machinery/implantchair/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) + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index af53bfba54..56c53e9cd8 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -238,9 +238,6 @@ icon_state_on = "cutlass1" light_color = "#ff0000" -/obj/item/weapon/melee/energy/sword/pirate/New() - return - /obj/item/weapon/melee/energy/blade name = "energy blade" desc = "A concentrated beam of energy in the shape of a blade. Very stylish... and lethal." diff --git a/code/game/objects/items/weapons/scrolls.dm b/code/game/objects/items/weapons/scrolls.dm index 06559be4a0..75400b0256 100644 --- a/code/game/objects/items/weapons/scrolls.dm +++ b/code/game/objects/items/weapons/scrolls.dm @@ -50,10 +50,10 @@ var/A - A = input(user, "Area to jump to", "BOOYEA", A) as null|anything in teleportlocs + A = input(user, "Area to jump to", "BOOYEA", A) as null|anything in GLOB.teleportlocs if(!src || QDELETED(src) || !user || !user.is_holding(src) || user.incapacitated() || !A || !uses) return - var/area/thearea = teleportlocs[A] + var/area/thearea = GLOB.teleportlocs[A] var/datum/effect_system/smoke_spread/smoke = new smoke.set_up(2, user.loc) diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 8d918c0e91..662f451e81 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -198,9 +198,8 @@ icon_state = "satchel" resistance_flags = 0 -/obj/item/weapon/storage/backpack/satchel/leather/withwallet/New() - ..() - new /obj/item/weapon/storage/wallet/random( src ) +/obj/item/weapon/storage/backpack/satchel/leather/withwallet/PopulateContents() + new /obj/item/weapon/storage/wallet/random(src) /obj/item/weapon/storage/backpack/satchel/eng name = "industrial satchel" @@ -284,11 +283,13 @@ anchored = 0 icon_state = initial(icon_state) -/obj/item/weapon/storage/backpack/satchel/flat/New() +/obj/item/weapon/storage/backpack/satchel/flat/Initialize(mapload) ..() + SSpersistence.new_secret_satchels += src + +/obj/item/weapon/storage/backpack/satchel/flat/PopulateContents() new /obj/item/stack/tile/plasteel(src) new /obj/item/weapon/crowbar(src) - SSpersistence.new_secret_satchels += src /obj/item/weapon/storage/backpack/satchel/flat/Destroy() SSpersistence.new_secret_satchels -= src @@ -299,7 +300,7 @@ var/list/reward_all_of_these = list() //use paths! var/revealed = 0 -/obj/item/weapon/storage/backpack/satchel/flat/secret/New() +/obj/item/weapon/storage/backpack/satchel/flat/secret/Initialize() ..() if(isfloorturf(loc) && !istype(loc,/turf/open/floor/plating/)) @@ -356,9 +357,7 @@ item_state = "duffle-drone" resistance_flags = FIRE_PROOF -/obj/item/weapon/storage/backpack/dufflebag/drone/New() - ..() - +/obj/item/weapon/storage/backpack/dufflebag/drone/PopulateContents() new /obj/item/weapon/screwdriver(src) new /obj/item/weapon/wrench(src) new /obj/item/weapon/weldingtool(src) @@ -373,8 +372,7 @@ icon_state = "duffle-clown" item_state = "duffle-clown" -/obj/item/weapon/storage/backpack/dufflebag/clown/cream_pie/New() - . = ..() +/obj/item/weapon/storage/backpack/dufflebag/clown/cream_pie/PopulateContents() for(var/i in 1 to 10) new /obj/item/weapon/reagent_containers/food/snacks/pie/cream(src) @@ -399,9 +397,7 @@ icon_state = "duffle-syndiemed" item_state = "duffle-syndiemed" -/obj/item/weapon/storage/backpack/dufflebag/syndie/surgery/New() - ..() - contents = list() +/obj/item/weapon/storage/backpack/dufflebag/syndie/surgery/PopulateContents() new /obj/item/weapon/scalpel(src) new /obj/item/weapon/hemostat(src) new /obj/item/weapon/retractor(src) @@ -412,7 +408,6 @@ new /obj/item/clothing/suit/straight_jacket(src) new /obj/item/clothing/mask/muzzle(src) new /obj/item/device/mmi/syndie(src) - return /obj/item/weapon/storage/backpack/dufflebag/syndie/ammo name = "ammunition dufflebag" @@ -423,80 +418,60 @@ /obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/shotgun desc = "A large dufflebag, packed to the brim with Bulldog shotgun ammo." -/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/shotgun/New() - ..() - contents = list() +/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/shotgun/PopulateContents() 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/slug(src) new /obj/item/ammo_box/magazine/m12g/dragon(src) - return /obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/smg desc = "A large dufflebag, packed to the brim with C20r magazines." -/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/smg/New() - ..() - contents = list() +/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/smg/PopulateContents() for(var/i in 1 to 9) new /obj/item/ammo_box/magazine/smgm45(src) - return /obj/item/weapon/storage/backpack/dufflebag/syndie/c20rbundle desc = "A large dufflebag containing a C20r, some magazines, and a cheap looking suppressor." -/obj/item/weapon/storage/backpack/dufflebag/syndie/c20rbundle/New() - ..() - contents = list() +/obj/item/weapon/storage/backpack/dufflebag/syndie/c20rbundle/PopulateContents() new /obj/item/ammo_box/magazine/smgm45(src) new /obj/item/ammo_box/magazine/smgm45(src) new /obj/item/weapon/gun/ballistic/automatic/c20r(src) new /obj/item/weapon/suppressor/specialoffer(src) - return /obj/item/weapon/storage/backpack/dufflebag/syndie/bulldogbundle desc = "A large dufflebag containing a Bulldog, several drums, and a collapsed hardsuit." -/obj/item/weapon/storage/backpack/dufflebag/syndie/bulldogbundle/New() - ..() - contents = list() +/obj/item/weapon/storage/backpack/dufflebag/syndie/bulldogbundle/PopulateContents() new /obj/item/ammo_box/magazine/m12g(src) new /obj/item/weapon/gun/ballistic/automatic/shotgun/bulldog(src) new /obj/item/ammo_box/magazine/m12g/buckshot(src) new /obj/item/clothing/glasses/thermal/syndi(src) - return /obj/item/weapon/storage/backpack/dufflebag/syndie/med/medicalbundle desc = "A large dufflebag containing a medical equipment, a Donksoft machine gun, a big jumbo box of darts, and a knock-off pair of magboots." -/obj/item/weapon/storage/backpack/dufflebag/syndie/med/medicalbundle/New() - ..() - contents = list() +/obj/item/weapon/storage/backpack/dufflebag/syndie/med/medicalbundle/PopulateContents() new /obj/item/clothing/shoes/magboots/syndie(src) new /obj/item/weapon/storage/firstaid/tactical(src) new /obj/item/weapon/gun/ballistic/automatic/l6_saw/toy(src) new /obj/item/ammo_box/foambox/riot(src) - return /obj/item/weapon/storage/backpack/dufflebag/syndie/med/medicalbundle desc = "A large dufflebag containing a medical equipment, a Donksoft machine gun, a big jumbo box of darts, and a knock-off pair of magboots." -/obj/item/weapon/storage/backpack/dufflebag/syndie/med/medicalbundle/New() - ..() - contents = list() +/obj/item/weapon/storage/backpack/dufflebag/syndie/med/medicalbundle/PopulateContents() new /obj/item/clothing/shoes/magboots/syndie(src) new /obj/item/weapon/storage/firstaid/tactical(src) new /obj/item/weapon/gun/ballistic/automatic/l6_saw/toy(src) new /obj/item/ammo_box/foambox/riot(src) - return /obj/item/weapon/storage/backpack/dufflebag/syndie/med/bioterrorbundle desc = "A large dufflebag containing a deadly chemicals, a chemical spray, chemical grenade, a Donksoft assault rifle, riot grade darts, a minature syringe gun, and a box of syringes" -/obj/item/weapon/storage/backpack/dufflebag/syndie/med/bioterrorbundle/New() - ..() - contents = list() +/obj/item/weapon/storage/backpack/dufflebag/syndie/med/bioterrorbundle/PopulateContents() new /obj/item/weapon/reagent_containers/spray/chemsprayer/bioterror(src) new /obj/item/weapon/storage/box/syndie_kit/chemical(src) new /obj/item/weapon/gun/syringe/syndicate(src) @@ -504,26 +479,19 @@ new /obj/item/weapon/storage/box/syringes(src) new /obj/item/ammo_box/foambox/riot(src) new /obj/item/weapon/grenade/chem_grenade/bioterrorfoam(src) - return -/obj/item/weapon/storage/backpack/dufflebag/syndie/c4/New() - ..() - contents = list() +/obj/item/weapon/storage/backpack/dufflebag/syndie/c4/PopulateContents() for(var/i in 1 to 10) new /obj/item/weapon/grenade/plastic/c4(src) - return -/obj/item/weapon/storage/backpack/dufflebag/syndie/x4/New() - ..() - contents = list() +/obj/item/weapon/storage/backpack/dufflebag/syndie/x4/PopulateContents() for(var/i in 1 to 3) new /obj/item/weapon/grenade/plastic/x4(src) /obj/item/weapon/storage/backpack/dufflebag/syndie/firestarter desc = "A large dufflebag containing New Russian pyro backpack sprayer, a pistol, a pipebomb, fireproof hardsuit, ammo, and other equipment." -/obj/item/weapon/storage/backpack/dufflebag/syndie/firestarter/New() - ..() +/obj/item/weapon/storage/backpack/dufflebag/syndie/firestarter/PopulateContents() new /obj/item/clothing/under/syndicate/soviet(src) new /obj/item/weapon/watertank/operator(src) new /obj/item/clothing/suit/space/hardsuit/syndi/elite(src) diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 2be74aa1cf..9806dee20d 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -151,11 +151,6 @@ allow_quick_empty = 1 // this function is superceded -/obj/item/weapon/storage/bag/sheetsnatcher/New() - ..() - //verbs -= /obj/item/weapon/storage/verb/quick_empty - //verbs += /obj/item/weapon/storage/bag/sheetsnatcher/quick_empty - /obj/item/weapon/storage/bag/sheetsnatcher/can_be_inserted(obj/item/W, stop_messages = 0) if(!istype(W,/obj/item/stack/sheet) || istype(W,/obj/item/stack/sheet/mineral/sandstone) || istype(W,/obj/item/stack/sheet/mineral/wood)) if(!stop_messages) diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index b48ea18632..589cf3270d 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -42,8 +42,7 @@ icon_state = "utilitybelt_ce" item_state = "utility_ce" -/obj/item/weapon/storage/belt/utility/chief/full/New() - ..() +/obj/item/weapon/storage/belt/utility/chief/full/PopulateContents() new /obj/item/weapon/screwdriver/power(src) new /obj/item/weapon/crowbar/power(src) new /obj/item/weapon/weldingtool/experimental(src)//This can be changed if this is too much @@ -54,8 +53,7 @@ //much roomier now that we've managed to remove two tools -/obj/item/weapon/storage/belt/utility/full/New() - ..() +/obj/item/weapon/storage/belt/utility/full/PopulateContents() new /obj/item/weapon/screwdriver(src) new /obj/item/weapon/wrench(src) new /obj/item/weapon/weldingtool(src) @@ -65,8 +63,7 @@ new /obj/item/stack/cable_coil(src,30,pick("red","yellow","orange")) -/obj/item/weapon/storage/belt/utility/atmostech/New() - ..() +/obj/item/weapon/storage/belt/utility/atmostech/PopulateContents() new /obj/item/weapon/screwdriver(src) new /obj/item/weapon/wrench(src) new /obj/item/weapon/weldingtool(src) @@ -153,8 +150,7 @@ /obj/item/weapon/restraints/legcuffs/bola ) -/obj/item/weapon/storage/belt/security/full/New() - ..() +/obj/item/weapon/storage/belt/security/full/PopulateContents() new /obj/item/weapon/reagent_containers/spray/pepper(src) new /obj/item/weapon/restraints/handcuffs(src) new /obj/item/weapon/grenade/flashbang(src) @@ -235,8 +231,7 @@ /obj/item/device/soulstone ) -/obj/item/weapon/storage/belt/soulstone/full/New() - ..() +/obj/item/weapon/storage/belt/soulstone/full/PopulateContents() for(var/i in 1 to 6) new /obj/item/device/soulstone(src) @@ -265,8 +260,7 @@ icon_state = "belt" item_state = "security" -/obj/item/weapon/storage/belt/military/abductor/full/New() - ..() +/obj/item/weapon/storage/belt/military/abductor/full/PopulateContents() new /obj/item/weapon/screwdriver/abductor(src) new /obj/item/weapon/wrench/abductor(src) new /obj/item/weapon/weldingtool/abductor(src) @@ -304,8 +298,7 @@ /obj/item/weapon/reagent_containers/food/drinks/bottle/molotov, /obj/item/weapon/c4, ) -/obj/item/weapon/storage/belt/grenade/full/New() - ..() +/obj/item/weapon/storage/belt/grenade/full/PopulateContents() new /obj/item/weapon/grenade/flashbang(src) new /obj/item/weapon/grenade/smokebomb(src) new /obj/item/weapon/grenade/smokebomb(src) @@ -345,8 +338,7 @@ /obj/item/weapon/gun/magic/wand ) -/obj/item/weapon/storage/belt/wands/full/New() - ..() +/obj/item/weapon/storage/belt/wands/full/PopulateContents() new /obj/item/weapon/gun/magic/wand/death(src) new /obj/item/weapon/gun/magic/wand/resurrection(src) new /obj/item/weapon/gun/magic/wand/polymorph(src) @@ -400,8 +392,7 @@ ) alternate_worn_layer = UNDER_SUIT_LAYER -/obj/item/weapon/storage/belt/holster/full/New() - ..() +/obj/item/weapon/storage/belt/holster/full/PopulateContents() new /obj/item/weapon/gun/ballistic/revolver/detective(src) new /obj/item/ammo_box/c38(src) new /obj/item/ammo_box/c38(src) @@ -505,7 +496,6 @@ ..() -/obj/item/weapon/storage/belt/sabre/New() - ..() +/obj/item/weapon/storage/belt/sabre/PopulateContents() new /obj/item/weapon/melee/sabre(src) update_icon() diff --git a/code/game/objects/items/weapons/storage/book.dm b/code/game/objects/items/weapons/storage/book.dm index daf8e8e78f..83805d969a 100644 --- a/code/game/objects/items/weapons/storage/book.dm +++ b/code/game/objects/items/weapons/storage/book.dm @@ -11,17 +11,18 @@ var/title = "book" /obj/item/weapon/storage/book/attack_self(mob/user) - to_chat(user, "The pages of [title] have been cut out!") + to_chat(user, "The pages of [title] have been cut out!") -var/global/list/biblenames = list("Bible", "Quran", "Scrapbook", "Burning Bible", "Clown Bible", "Banana Bible", "Creeper Bible", "White Bible", "Holy Light", "The God Delusion", "Tome", "The King in Yellow", "Ithaqua", "Scientology", "Melted Bible", "Necronomicon") -var/global/list/biblestates = list("bible", "koran", "scrapbook", "burning", "honk1", "honk2", "creeper", "white", "holylight", "atheist", "tome", "kingyellow", "ithaqua", "scientology", "melted", "necronomicon") -var/global/list/bibleitemstates = list("bible", "koran", "scrapbook", "bible", "bible", "bible", "syringe_kit", "syringe_kit", "syringe_kit", "syringe_kit", "syringe_kit", "kingyellow", "ithaqua", "scientology", "melted", "necronomicon") +GLOBAL_LIST_INIT(biblenames, list("Bible", "Quran", "Scrapbook", "Burning Bible", "Clown Bible", "Banana Bible", "Creeper Bible", "White Bible", "Holy Light", "The God Delusion", "Tome", "The King in Yellow", "Ithaqua", "Scientology", "Melted Bible", "Necronomicon")) +GLOBAL_LIST_INIT(biblestates, list("bible", "koran", "scrapbook", "burning", "honk1", "honk2", "creeper", "white", "holylight", "atheist", "tome", "kingyellow", "ithaqua", "scientology", "melted", "necronomicon")) +GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible", "bible", "bible", "syringe_kit", "syringe_kit", "syringe_kit", "syringe_kit", "syringe_kit", "kingyellow", "ithaqua", "scientology", "melted", "necronomicon")) /obj/item/weapon/storage/book/bible name = "bible" desc = "Apply to head repeatedly." icon = 'icons/obj/storage.dmi' - icon_state ="bible" + icon_state = "bible" + item_state = "bible" var/mob/affecting = null var/deity_name = "Christ" @@ -33,12 +34,11 @@ var/global/list/bibleitemstates = list("bible", "koran", "scrapbook", "bible", if(!istype(H)) return // If H is the Chaplain, we can set the icon_state of the bible (but only once!) - if(!SSreligion.Bible_icon_state && H.job == "Chaplain") + if(!SSreligion.bible_icon_state && H.job == "Chaplain") var/dat = "Pick Bible Style

    Pick a bible style

    [dpt]
    " - var/i - for(i = 1, i < biblestates.len, i++) - var/icon/bibleicon = icon('icons/obj/storage.dmi', biblestates[i]) - var/nicename = biblenames[i] + for(var/i in 1 to GLOB.biblestates.len) + var/icon/bibleicon = icon('icons/obj/storage.dmi', GLOB.biblestates[i]) + var/nicename = GLOB.biblenames[i] H << browse_rsc(bibleicon, nicename) dat += {""} dat += "
    [nicename]
    " @@ -47,20 +47,20 @@ var/global/list/bibleitemstates = list("bible", "koran", "scrapbook", "bible", /obj/item/weapon/storage/book/bible/Topic(href, href_list) if(!usr.canUseTopic(src)) return - if(href_list["seticon"] && ticker && !SSreligion.Bible_icon_state) + if(href_list["seticon"] && SSreligion && !SSreligion.bible_icon_state) var/iconi = text2num(href_list["seticon"]) - var/biblename = biblenames[iconi] + var/biblename = GLOB.biblenames[iconi] var/obj/item/weapon/storage/book/bible/B = locate(href_list["src"]) - B.icon_state = biblestates[iconi] - B.item_state = bibleitemstates[iconi] + B.icon_state = GLOB.biblestates[iconi] + B.item_state = GLOB.bibleitemstates[iconi] if(B.icon_state == "honk1" || B.icon_state == "honk2") var/mob/living/carbon/human/H = usr H.dna.add_mutation(CLOWNMUT) H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(H), slot_wear_mask) - SSreligion.Bible_icon_state = B.icon_state - SSreligion.Bible_item_state = B.item_state + SSreligion.bible_icon_state = B.icon_state + SSreligion.bible_item_state = B.item_state feedback_set_details("religion_book","[biblename]") usr << browse(null, "window=editicon") @@ -154,6 +154,5 @@ var/global/list/bibleitemstates = list("bible", "koran", "scrapbook", "bible", /obj/item/weapon/storage/book/bible/booze desc = "To be applied to the head repeatedly." -/obj/item/weapon/storage/book/bible/booze/New() - ..() +/obj/item/weapon/storage/book/bible/booze/PopulateContents() new /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey(src) diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index ecad2dd215..9410b29ea0 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -30,8 +30,8 @@ var/foldable = /obj/item/stack/sheet/cardboard var/illustration = "writing" -/obj/item/weapon/storage/box/Initialize() - . = ..() +/obj/item/weapon/storage/box/Initialize(mapload) + ..() update_icon() /obj/item/weapon/storage/box/update_icon() @@ -72,8 +72,7 @@ name = "diskette box" illustration = "disk_kit" -/obj/item/weapon/storage/box/disks/Initialize() - ..() +/obj/item/weapon/storage/box/disks/PopulateContents() for(var/i in 1 to 7) new /obj/item/weapon/disk/data(src) @@ -82,24 +81,21 @@ name = "plant data disks box" illustration = "disk_kit" -/obj/item/weapon/storage/box/disks_plantgene/Initialize() - ..() +/obj/item/weapon/storage/box/disks_plantgene/PopulateContents() for(var/i in 1 to 7) new /obj/item/weapon/disk/plantgene(src) // Ordinary survival box -/obj/item/weapon/storage/box/survival/New() - ..() +/obj/item/weapon/storage/box/survival/PopulateContents() new /obj/item/clothing/mask/breath(src) new /obj/item/weapon/tank/internals/emergency_oxygen(src) new /obj/item/weapon/reagent_containers/hypospray/medipen(src) -/obj/item/weapon/storage/box/survival/radio/New() - ..() +/obj/item/weapon/storage/box/survival/radio/PopulateContents() + ..() // we want the survival stuff too. new /obj/item/device/radio/off(src) -/obj/item/weapon/storage/box/survival_mining/New() - ..() +/obj/item/weapon/storage/box/survival_mining/PopulateContents() new /obj/item/clothing/mask/gas/explorer(src) new /obj/item/weapon/tank/internals/emergency_oxygen/engi(src) new /obj/item/weapon/crowbar/red(src) @@ -107,31 +103,28 @@ // Engineer survival box -/obj/item/weapon/storage/box/engineer/New() - ..() +/obj/item/weapon/storage/box/engineer/PopulateContents() new /obj/item/clothing/mask/breath(src) new /obj/item/weapon/tank/internals/emergency_oxygen/engi(src) new /obj/item/weapon/reagent_containers/hypospray/medipen(src) -/obj/item/weapon/storage/box/engineer/radio/New() - ..() +/obj/item/weapon/storage/box/engineer/radio/PopulateContents() + ..() // we want the regular items too. new /obj/item/device/radio/off(src) // Syndie survival box -/obj/item/weapon/storage/box/syndie/New() - ..() +/obj/item/weapon/storage/box/syndie/PopulateContents() new /obj/item/clothing/mask/gas/syndicate(src) new /obj/item/weapon/tank/internals/emergency_oxygen/engi(src) // Security survival box -/obj/item/weapon/storage/box/security/New() - ..() +/obj/item/weapon/storage/box/security/PopulateContents() new /obj/item/clothing/mask/gas/sechailer(src) new /obj/item/weapon/tank/internals/emergency_oxygen(src) new /obj/item/weapon/reagent_containers/hypospray/medipen(src) -/obj/item/weapon/storage/box/security/radio/New() - ..() +/obj/item/weapon/storage/box/security/radio/PopulateContents() + ..() // we want the regular stuff too new /obj/item/device/radio/off(src) /obj/item/weapon/storage/box/gloves @@ -139,8 +132,7 @@ desc = "Contains sterile latex gloves." illustration = "latex" -/obj/item/weapon/storage/box/gloves/New() - ..() +/obj/item/weapon/storage/box/gloves/PopulateContents() for(var/i in 1 to 7) new /obj/item/clothing/gloves/color/latex(src) @@ -149,8 +141,7 @@ desc = "This box contains sterile medical masks." illustration = "sterile" -/obj/item/weapon/storage/box/masks/New() - ..() +/obj/item/weapon/storage/box/masks/PopulateContents() for(var/i in 1 to 7) new /obj/item/clothing/mask/surgical(src) @@ -159,47 +150,34 @@ desc = "A box full of syringes." illustration = "syringe" -/obj/item/weapon/storage/box/syringes/New() - ..() +/obj/item/weapon/storage/box/syringes/PopulateContents() for(var/i in 1 to 7) - new /obj/item/weapon/reagent_containers/syringe( src ) + 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." illustration = "syringe" -/obj/item/weapon/storage/box/medipens/New() - ..() +/obj/item/weapon/storage/box/medipens/PopulateContents() for(var/i in 1 to 7) - new /obj/item/weapon/reagent_containers/hypospray/medipen( src ) + 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." illustration = "syringe" -/obj/item/weapon/storage/box/medipens/utility/New() - ..() +/obj/item/weapon/storage/box/medipens/utility/PopulateContents() + ..() // includes regular medipens. for(var/i in 1 to 5) new /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack(src) -/obj/item/weapon/storage/box/medipens/survival - name = "Survival pen bundle" - desc = "a box with several survival pens inside, welcome to immortality!!" - illustration = "syringe" - -/obj/item/weapon/storage/box/medipens/survival/New() - ..() - for(var/i in 1 to 5) - new /obj/item/weapon/reagent_containers/hypospray/medipen/survival(src) - /obj/item/weapon/storage/box/beakers name = "box of beakers" illustration = "beaker" -/obj/item/weapon/storage/box/beakers/New() - ..() +/obj/item/weapon/storage/box/beakers/PopulateContents() for(var/i in 1 to 7) new /obj/item/weapon/reagent_containers/glass/beaker( src ) @@ -207,8 +185,7 @@ name = "box of DNA injectors" desc = "This box contains injectors, it seems." -/obj/item/weapon/storage/box/injectors/New() - ..() +/obj/item/weapon/storage/box/injectors/PopulateContents() for(var/i in 1 to 3) new /obj/item/weapon/dnainjector/h2m(src) for(var/i in 1 to 3) @@ -220,8 +197,7 @@ icon_state = "secbox" illustration = "flashbang" -/obj/item/weapon/storage/box/flashbangs/New() - ..() +/obj/item/weapon/storage/box/flashbangs/PopulateContents() for(var/i in 1 to 7) new /obj/item/weapon/grenade/flashbang(src) @@ -231,8 +207,7 @@ icon_state = "secbox" illustration = "flashbang" -/obj/item/weapon/storage/box/flashes/New() - ..() +/obj/item/weapon/storage/box/flashes/PopulateContents() for(var/i in 1 to 6) new /obj/item/device/assembly/flash/handheld(src) @@ -241,9 +216,9 @@ desc = "This box contains everything necessary to build a wall-mounted flash. WARNING: Flashes can cause serious eye damage, protective eyewear is required." illustration = "flashbang" -/obj/item/weapon/storage/box/wall_flash/New() - ..() +/obj/item/weapon/storage/box/wall_flash/PopulateContents() var/id = rand(1000, 9999) + // FIXME what if this conflicts with an existing one? new /obj/item/wallframe/button(src) new /obj/item/weapon/electronics/airlock(src) @@ -260,8 +235,7 @@ desc = "WARNING: These devices are extremely dangerous and can cause blindness and skin irritation." illustration = "flashbang" -/obj/item/weapon/storage/box/teargas/New() - ..() +/obj/item/weapon/storage/box/teargas/PopulateContents() for(var/i in 1 to 7) new /obj/item/weapon/grenade/chem_grenade/teargas(src) @@ -270,8 +244,7 @@ desc = "A box with 5 emp grenades." illustration = "flashbang" -/obj/item/weapon/storage/box/emps/New() - ..() +/obj/item/weapon/storage/box/emps/PopulateContents() for(var/i in 1 to 5) new /obj/item/weapon/grenade/empgrenade(src) @@ -280,8 +253,7 @@ desc = "Box full of scum-bag tracking utensils." illustration = "implant" -/obj/item/weapon/storage/box/trackimp/New() - ..() +/obj/item/weapon/storage/box/trackimp/PopulateContents() for(var/i in 1 to 4) new /obj/item/weapon/implantcase/tracking(src) new /obj/item/weapon/implanter(src) @@ -293,8 +265,7 @@ desc = "For finding those who have died on the accursed lavaworld." illustration = "implant" -/obj/item/weapon/storage/box/minertracker/New() - ..() +/obj/item/weapon/storage/box/minertracker/PopulateContents() for(var/i in 1 to 3) new /obj/item/weapon/implantcase/tracking(src) new /obj/item/weapon/implanter(src) @@ -306,8 +277,7 @@ desc = "Box of stuff used to implant chemicals." illustration = "implant" -/obj/item/weapon/storage/box/chemimp/New() - ..() +/obj/item/weapon/storage/box/chemimp/PopulateContents() for(var/i in 1 to 5) new /obj/item/weapon/implantcase/chem(src) new /obj/item/weapon/implanter(src) @@ -318,8 +288,7 @@ desc = "Box of exile implants. It has a picture of a clown being booted through the Gateway." illustration = "implant" -/obj/item/weapon/storage/box/exileimp/New() - ..() +/obj/item/weapon/storage/box/exileimp/PopulateContents() for(var/i in 1 to 5) new /obj/item/weapon/implantcase/exile(src) new /obj/item/weapon/implanter(src) @@ -329,13 +298,17 @@ desc = "The label indicates that it contains body bags." illustration = "bodybags" +/obj/item/weapon/storage/box/bodybags/PopulateContents() + ..() + for(var/i in 1 to 7) + new /obj/item/bodybag(src) + /obj/item/weapon/storage/box/rxglasses name = "box of prescription glasses" desc = "This box contains nerd glasses." illustration = "glasses" -/obj/item/weapon/storage/box/rxglasses/New() - ..() +/obj/item/weapon/storage/box/rxglasses/PopulateContents() for(var/i in 1 to 7) new /obj/item/clothing/glasses/regular(src) @@ -343,8 +316,7 @@ name = "box of drinking glasses" desc = "It has a picture of drinking glasses on it." -/obj/item/weapon/storage/box/drinkingglasses/New() - ..() +/obj/item/weapon/storage/box/drinkingglasses/PopulateContents() for(var/i in 1 to 6) new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src) @@ -352,8 +324,7 @@ name = "box of condiment bottles" desc = "It has a large ketchup smear on it." -/obj/item/weapon/storage/box/condimentbottles/New() - ..() +/obj/item/weapon/storage/box/condimentbottles/PopulateContents() for(var/i in 1 to 6) new /obj/item/weapon/reagent_containers/food/condiment(src) @@ -361,8 +332,7 @@ name = "box of paper cups" desc = "It has pictures of paper cups on the front." -/obj/item/weapon/storage/box/cups/New() - ..() +/obj/item/weapon/storage/box/cups/PopulateContents() for(var/i in 1 to 7) new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src ) @@ -371,8 +341,7 @@ desc = "Instructions: Heat in microwave. Product will cool if not eaten within seven minutes." illustration = "donk_kit" -/obj/item/weapon/storage/box/donkpockets/New() - ..() +/obj/item/weapon/storage/box/donkpockets/PopulateContents() for(var/i in 1 to 6) new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src) @@ -384,9 +353,8 @@ can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube) illustration = null -/obj/item/weapon/storage/box/monkeycubes/New() - ..() - for(var/i = 1; i <= 5; i++) +/obj/item/weapon/storage/box/monkeycubes/PopulateContents() + for(var/i in 1 to 5) new /obj/item/weapon/reagent_containers/food/snacks/monkeycube(src) /obj/item/weapon/storage/box/ids @@ -394,8 +362,7 @@ desc = "Has so many empty IDs." illustration = "id" -/obj/item/weapon/storage/box/ids/New() - ..() +/obj/item/weapon/storage/box/ids/PopulateContents() for(var/i in 1 to 7) new /obj/item/weapon/card/id(src) @@ -405,13 +372,26 @@ desc = "A box of spare PDA microcomputers." illustration = "pda" +/obj/item/weapon/storage/box/PDAs/PopulateContents() + new /obj/item/device/pda(src) + new /obj/item/device/pda(src) + new /obj/item/device/pda(src) + new /obj/item/device/pda(src) + new /obj/item/weapon/cartridge/head(src) + + var/newcart = pick( /obj/item/weapon/cartridge/engineering, + /obj/item/weapon/cartridge/security, + /obj/item/weapon/cartridge/medical, + /obj/item/weapon/cartridge/signal/toxins, + /obj/item/weapon/cartridge/quartermaster) + new newcart(src) + /obj/item/weapon/storage/box/silver_ids name = "box of spare silver IDs" desc = "Shiny IDs for important people." illustration = "id" -/obj/item/weapon/storage/box/silver_ids/New() - ..() +/obj/item/weapon/storage/box/silver_ids/PopulateContents() for(var/i in 1 to 7) new /obj/item/weapon/card/id/silver(src) @@ -420,7 +400,7 @@ desc = "Take away their last shred of dignity, their name." illustration = "id" -/obj/item/weapon/storage/box/prisoner/New() +/obj/item/weapon/storage/box/prisoner/PopulateContents() ..() new /obj/item/weapon/card/id/prisoner/one(src) new /obj/item/weapon/card/id/prisoner/two(src) @@ -435,8 +415,7 @@ desc = "A box full of PDA cartridges used by Security." illustration = "pda" -/obj/item/weapon/storage/box/seccarts/New() - ..() +/obj/item/weapon/storage/box/seccarts/PopulateContents() new /obj/item/weapon/cartridge/detective(src) for(var/i in 1 to 6) new /obj/item/weapon/cartridge/security(src) @@ -446,8 +425,7 @@ desc = "A box full of standard firing pins, to allow newly-developed firearms to operate." illustration = "id" -/obj/item/weapon/storage/box/firingpins/New() - ..() +/obj/item/weapon/storage/box/firingpins/PopulateContents() for(var/i in 1 to 5) new /obj/item/device/firing_pin(src) @@ -456,8 +434,7 @@ desc = "A box full of laser tag firing pins, to allow newly-developed firearms to require wearing brightly coloured plastic armor before being able to be used." illustration = "id" -/obj/item/weapon/storage/box/lasertagpins/New() - ..() +/obj/item/weapon/storage/box/lasertagpins/PopulateContents() for(var/i in 1 to 3) new /obj/item/device/firing_pin/tag/red(src) new /obj/item/device/firing_pin/tag/blue(src) @@ -468,8 +445,7 @@ icon_state = "secbox" illustration = "handcuff" -/obj/item/weapon/storage/box/handcuffs/New() - ..() +/obj/item/weapon/storage/box/handcuffs/PopulateContents() for(var/i in 1 to 7) new /obj/item/weapon/restraints/handcuffs(src) @@ -479,8 +455,7 @@ icon_state = "secbox" illustration = "handcuff" -/obj/item/weapon/storage/box/zipties/New() - ..() +/obj/item/weapon/storage/box/zipties/PopulateContents() for(var/i in 1 to 7) new /obj/item/weapon/restraints/handcuffs/cable/zipties(src) @@ -490,8 +465,7 @@ icon_state = "alienbox" illustration = "handcuff" -/obj/item/weapon/storage/box/alienhandcuffs/New() - ..() +/obj/item/weapon/storage/box/alienhandcuffs/PopulateContents() for(var/i in 1 to 7) new /obj/item/weapon/restraints/handcuffs/alien(src) @@ -500,8 +474,7 @@ desc = "A sleek, sturdy box used to hold replica spacesuits." icon_state = "syndiebox" -/obj/item/weapon/storage/box/fakesyndiesuit/New() - ..() +/obj/item/weapon/storage/box/fakesyndiesuit/PopulateContents() new /obj/item/clothing/head/syndicatefake(src) new /obj/item/clothing/suit/syndicatefake(src) @@ -510,20 +483,18 @@ desc = "Keep out of reach of children." illustration = "mousetraps" -/obj/item/weapon/storage/box/mousetraps/New() - ..() +/obj/item/weapon/storage/box/mousetraps/PopulateContents() for(var/i in 1 to 6) - new /obj/item/device/assembly/mousetrap( src ) + 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." illustration = "pillbox" -/obj/item/weapon/storage/box/pillbottles/New() - ..() +/obj/item/weapon/storage/box/pillbottles/PopulateContents() for(var/i in 1 to 7) - new /obj/item/weapon/storage/pill_bottle( src ) + new /obj/item/weapon/storage/pill_bottle(src) /obj/item/weapon/storage/box/snappops name = "snap pop box" @@ -533,9 +504,8 @@ storage_slots = 8 can_hold = list(/obj/item/toy/snappop) -/obj/item/weapon/storage/box/snappops/New() - ..() - for(var/i=1; i <= storage_slots; i++) +/obj/item/weapon/storage/box/snappops/PopulateContents() + for(var/i in 1 to storage_slots) new /obj/item/toy/snappop(src) /obj/item/weapon/storage/box/matches @@ -549,9 +519,8 @@ slot_flags = SLOT_BELT can_hold = list(/obj/item/weapon/match) -/obj/item/weapon/storage/box/matches/New() - ..() - for(var/i=1; i <= storage_slots; i++) +/obj/item/weapon/storage/box/matches/PopulateContents() + for(var/i in 1 to storage_slots) new /obj/item/weapon/match(src) /obj/item/weapon/storage/box/matches/attackby(obj/item/weapon/match/W as obj, mob/user as mob, params) @@ -570,29 +539,26 @@ max_combined_w_class = 21 use_to_pickup = 1 // for picking up broken bulbs, not that most people will try -/obj/item/weapon/storage/box/lights/bulbs/New() - ..() - for(var/i = 0; i < 21; i++) +/obj/item/weapon/storage/box/lights/bulbs/PopulateContents() + for(var/i in 1 to 21) new /obj/item/weapon/light/bulb(src) /obj/item/weapon/storage/box/lights/tubes name = "box of replacement tubes" illustration = "lighttube" -/obj/item/weapon/storage/box/lights/tubes/New() - ..() - for(var/i = 0; i < 21; i++) +/obj/item/weapon/storage/box/lights/tubes/PopulateContents() + for(var/i in 1 to 21) new /obj/item/weapon/light/tube(src) /obj/item/weapon/storage/box/lights/mixed name = "box of replacement lights" illustration = "lightmixed" -/obj/item/weapon/storage/box/lights/mixed/New() - ..() - for(var/i = 0; i < 14; i++) +/obj/item/weapon/storage/box/lights/mixed/PopulateContents() + for(var/i in 1 to 14) new /obj/item/weapon/light/tube(src) - for(var/i = 0; i < 7; i++) + for(var/i in 1 to 7) new /obj/item/weapon/light/bulb(src) @@ -600,8 +566,7 @@ name = "box of deputy armbands" desc = "To be issued to those authorized to act as deputy of security." -/obj/item/weapon/storage/box/deputy/New() - ..() +/obj/item/weapon/storage/box/deputy/PopulateContents() for(var/i in 1 to 7) new /obj/item/clothing/tie/armband/deputy(src) @@ -610,8 +575,7 @@ desc = "To be used to rapidly seal hull breaches." illustration = "flashbang" -/obj/item/weapon/storage/box/metalfoam/New() - ..() +/obj/item/weapon/storage/box/metalfoam/PopulateContents() for(var/i in 1 to 7) new /obj/item/weapon/grenade/chem_grenade/metalfoam(src) @@ -632,28 +596,23 @@ playsound(loc, "rustle", 50, 1, -5) user.visible_message("[user] hugs \the [src].","You hug \the [src].") -/obj/item/weapon/storage/box/hug/medical/New() - ..() +/obj/item/weapon/storage/box/hug/medical/PopulateContents() new /obj/item/stack/medical/bruise_pack(src) new /obj/item/stack/medical/ointment(src) new /obj/item/weapon/reagent_containers/hypospray/medipen(src) -/obj/item/weapon/storage/box/hug/survival/New() - ..() +/obj/item/weapon/storage/box/hug/survival/PopulateContents() new /obj/item/clothing/mask/breath(src) new /obj/item/weapon/tank/internals/emergency_oxygen(src) new /obj/item/weapon/reagent_containers/hypospray/medipen(src) -/obj/item/ammo_casing/shotgun/rubbershot - /obj/item/weapon/storage/box/rubbershot name = "box of rubber shots" desc = "A box full of rubber shots, designed for riot shotguns." icon_state = "rubbershot_box" illustration = null -/obj/item/weapon/storage/box/rubbershot/New() - ..() +/obj/item/weapon/storage/box/rubbershot/PopulateContents() for(var/i in 1 to 7) new /obj/item/ammo_casing/shotgun/rubbershot(src) @@ -663,15 +622,9 @@ icon_state = "lethalshot_box" illustration = null -/obj/item/weapon/storage/box/lethalshot/New() - ..() - new /obj/item/ammo_casing/shotgun/buckshot(src) - new /obj/item/ammo_casing/shotgun/buckshot(src) - new /obj/item/ammo_casing/shotgun/buckshot(src) - new /obj/item/ammo_casing/shotgun/buckshot(src) - 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/lethalshot/PopulateContents() + for(var/i in 1 to 7) + new /obj/item/ammo_casing/shotgun/buckshot(src) /obj/item/weapon/storage/box/beanbag name = "box of beanbags" @@ -679,23 +632,16 @@ icon_state = "rubbershot_box" illustration = null -/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) - +/obj/item/weapon/storage/box/beanbag/PopulateContents() + for(var/i in 1 to 6) + new /obj/item/ammo_casing/shotgun/beanbag(src) /obj/item/weapon/storage/box/actionfigure name = "box of action figures" desc = "The latest set of collectable action figures." icon_state = "box" -/obj/item/weapon/storage/box/actionfigure/New() - ..() +/obj/item/weapon/storage/box/actionfigure/PopulateContents() for(var/i in 1 to 4) var/randomFigure = pick(subtypesof(/obj/item/toy/figure)) new randomFigure(src) @@ -775,11 +721,16 @@ illustration = "donk_kit" item_state = null +/obj/item/weapon/storage/box/ingredients/Initialize() + ..() + if(item_state) + name = "[name] ([item_state])" + desc = "A box containing supplementary ingredients for the aspiring chef. This box's theme is '[item_state]'." + /obj/item/weapon/storage/box/ingredients/wildcard item_state = "wildcard" -/obj/item/weapon/storage/box/ingredients/wildcard/New() - ..() +/obj/item/weapon/storage/box/ingredients/wildcard/PopulateContents() for(var/i in 1 to 7) var/randomFood = pick(/obj/item/weapon/reagent_containers/food/snacks/grown/chili, /obj/item/weapon/reagent_containers/food/snacks/grown/tomato, @@ -800,8 +751,7 @@ /obj/item/weapon/storage/box/ingredients/fiesta item_state = "fiesta" -/obj/item/weapon/storage/box/ingredients/fiesta/New() - ..() +/obj/item/weapon/storage/box/ingredients/fiesta/PopulateContents() new /obj/item/weapon/reagent_containers/food/snacks/tortilla(src) for(var/i in 1 to 2) new /obj/item/weapon/reagent_containers/food/snacks/grown/corn(src) @@ -811,8 +761,7 @@ /obj/item/weapon/storage/box/ingredients/italian item_state = "italian" -/obj/item/weapon/storage/box/ingredients/italian/New() - ..() +/obj/item/weapon/storage/box/ingredients/italian/PopulateContents() for(var/i in 1 to 3) new /obj/item/weapon/reagent_containers/food/snacks/grown/tomato(src) new /obj/item/weapon/reagent_containers/food/snacks/faggot(src) @@ -821,8 +770,7 @@ /obj/item/weapon/storage/box/ingredients/vegetarian item_state = "vegetarian" -/obj/item/weapon/storage/box/ingredients/vegetarian/New() - ..() +/obj/item/weapon/storage/box/ingredients/vegetarian/PopulateContents() for(var/i in 1 to 2) new /obj/item/weapon/reagent_containers/food/snacks/grown/carrot(src) new /obj/item/weapon/reagent_containers/food/snacks/grown/eggplant(src) @@ -834,8 +782,7 @@ /obj/item/weapon/storage/box/ingredients/american item_state = "american" -/obj/item/weapon/storage/box/ingredients/american/New() - ..() +/obj/item/weapon/storage/box/ingredients/american/PopulateContents() for(var/i in 1 to 2) new /obj/item/weapon/reagent_containers/food/snacks/grown/potato(src) new /obj/item/weapon/reagent_containers/food/snacks/grown/tomato(src) @@ -845,8 +792,7 @@ /obj/item/weapon/storage/box/ingredients/fruity item_state = "fruity" -/obj/item/weapon/storage/box/ingredients/fruity/New() - ..() +/obj/item/weapon/storage/box/ingredients/fruity/PopulateContents() for(var/i in 1 to 2) new /obj/item/weapon/reagent_containers/food/snacks/grown/apple(src) new /obj/item/weapon/reagent_containers/food/snacks/grown/citrus/orange(src) @@ -857,8 +803,7 @@ /obj/item/weapon/storage/box/ingredients/sweets item_state = "sweets" -/obj/item/weapon/storage/box/ingredients/sweets/New() - ..() +/obj/item/weapon/storage/box/ingredients/sweets/PopulateContents() for(var/i in 1 to 2) new /obj/item/weapon/reagent_containers/food/snacks/grown/cherries(src) new /obj/item/weapon/reagent_containers/food/snacks/grown/banana(src) @@ -869,8 +814,7 @@ /obj/item/weapon/storage/box/ingredients/delights item_state = "delights" -/obj/item/weapon/storage/box/ingredients/delights/New() - ..() +/obj/item/weapon/storage/box/ingredients/delights/PopulateContents() for(var/i in 1 to 2) new /obj/item/weapon/reagent_containers/food/snacks/grown/potato/sweet(src) new /obj/item/weapon/reagent_containers/food/snacks/grown/bluecherries(src) @@ -881,8 +825,7 @@ /obj/item/weapon/storage/box/ingredients/grains item_state = "grains" -/obj/item/weapon/storage/box/ingredients/grains/New() - ..() +/obj/item/weapon/storage/box/ingredients/grains/PopulateContents() for(var/i in 1 to 3) new /obj/item/weapon/reagent_containers/food/snacks/grown/oat(src) new /obj/item/weapon/reagent_containers/food/snacks/grown/wheat(src) @@ -893,8 +836,7 @@ /obj/item/weapon/storage/box/ingredients/carnivore item_state = "carnivore" -/obj/item/weapon/storage/box/ingredients/carnivore/New() - ..() +/obj/item/weapon/storage/box/ingredients/carnivore/PopulateContents() new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/bear(src) new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/spider(src) new /obj/item/weapon/reagent_containers/food/snacks/spidereggs(src) @@ -906,40 +848,34 @@ /obj/item/weapon/storage/box/ingredients/exotic item_state = "exotic" -/obj/item/weapon/storage/box/ingredients/exotic/New() - ..() +/obj/item/weapon/storage/box/ingredients/exotic/PopulateContents() for(var/i in 1 to 2) new /obj/item/weapon/reagent_containers/food/snacks/carpmeat(src) new /obj/item/weapon/reagent_containers/food/snacks/grown/soybeans(src) new /obj/item/weapon/reagent_containers/food/snacks/grown/cabbage(src) new /obj/item/weapon/reagent_containers/food/snacks/grown/chili(src) -/obj/item/weapon/storage/box/ingredients/New() - ..() - if(item_state) - name = "[name] ([item_state])" - desc = "A box containing supplementary ingredients for the aspiring chef. This box's theme is '[item_state]'." - /obj/item/weapon/storage/box/emptysandbags name = "box of empty sandbags" -/obj/item/weapon/storage/box/emptysandbags/New() - ..() - new /obj/item/weapon/emptysandbag(src) - new /obj/item/weapon/emptysandbag(src) - new /obj/item/weapon/emptysandbag(src) - new /obj/item/weapon/emptysandbag(src) - new /obj/item/weapon/emptysandbag(src) - new /obj/item/weapon/emptysandbag(src) - new /obj/item/weapon/emptysandbag(src) +/obj/item/weapon/storage/box/emptysandbags/PopulateContents() + for(var/i in 1 to 7) + new /obj/item/weapon/emptysandbag(src) /obj/item/weapon/storage/box/rndboards name = "\proper the liberator's legacy" desc = "A box containing a gift for worthy golems." -/obj/item/weapon/storage/box/rndboards/New() - ..() +/obj/item/weapon/storage/box/rndboards/PopulateContents() new /obj/item/weapon/circuitboard/machine/protolathe(src) new /obj/item/weapon/circuitboard/machine/destructive_analyzer(src) new /obj/item/weapon/circuitboard/machine/circuit_imprinter(src) new /obj/item/weapon/circuitboard/computer/rdconsole(src) + +/obj/item/weapon/storage/box/silver_sulf + name = "box of silver sulfadiazine patches" + desc = "Contains patches used to treat burns." + +/obj/item/weapon/storage/box/silver_sulf/PopulateContents() + for(var/i in 1 to 7) + new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) diff --git a/code/game/objects/items/weapons/storage/briefcase.dm b/code/game/objects/items/weapons/storage/briefcase.dm index 0deb3c43dc..bc7f1d3fb2 100644 --- a/code/game/objects/items/weapons/storage/briefcase.dm +++ b/code/game/objects/items/weapons/storage/briefcase.dm @@ -16,8 +16,7 @@ max_integrity = 150 var/folder_path = /obj/item/weapon/folder //this is the path of the folder that gets spawned in New() -/obj/item/weapon/storage/briefcase/New() - ..() +/obj/item/weapon/storage/briefcase/PopulateContents() new /obj/item/weapon/pen(src) var/obj/item/weapon/folder/folder = new folder_path(src) for(var/i in 1 to 6) @@ -26,7 +25,7 @@ /obj/item/weapon/storage/briefcase/lawyer folder_path = /obj/item/weapon/folder/blue -/obj/item/weapon/storage/briefcase/lawyer/New() +/obj/item/weapon/storage/briefcase/lawyer/PopulateContents() new /obj/item/weapon/stamp/law(src) ..() @@ -47,8 +46,8 @@ obj_integrity = 150 max_integrity = 150 -/obj/item/weapon/storage/briefcase/sniperbundle/New() - ..() +/obj/item/weapon/storage/briefcase/sniperbundle/PopulateContents() + ..() // in case you need any paperwork done after your rampage new /obj/item/weapon/gun/ballistic/automatic/sniper_rifle/syndicate(src) new /obj/item/clothing/neck/tie/red(src) new /obj/item/clothing/under/syndicate/sniper(src) diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index 95978000bf..3923bf9da9 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -22,8 +22,7 @@ var/spawn_type = null var/fancy_open = FALSE -/obj/item/weapon/storage/fancy/New() - ..() +/obj/item/weapon/storage/fancy/PopulateContents() for(var/i = 1 to storage_slots) new spawn_type(src) @@ -111,7 +110,7 @@ //CIG PACK// //////////// /obj/item/weapon/storage/fancy/cigarettes - name = "Space Cigarettes" + name = "\improper Space Cigarettes packet" desc = "The most popular brand of cigarettes, sponsors of the Space Olympics." icon = 'icons/obj/cigarettes.dmi' icon_state = "cig" @@ -122,15 +121,7 @@ storage_slots = 6 can_hold = list(/obj/item/clothing/mask/cigarette, /obj/item/weapon/lighter) icon_type = "cigarette" - spawn_type = /obj/item/clothing/mask/cigarette - -/obj/item/weapon/storage/fancy/cigarettes/New() - ..() - create_reagents(15 * storage_slots)//so people can inject cigarettes without opening a packet, now with being able to inject the whole one - reagents.set_reacting(FALSE) - for(var/obj/item/clothing/mask/cigarette/cig in src) - cig.desc = "\An [name] brand [cig.name]." - name = "\improper [name] packet" + spawn_type = /obj/item/clothing/mask/cigarette/space_cigarette /obj/item/weapon/storage/fancy/cigarettes/AltClick(mob/user) if(user.get_active_held_item()) @@ -160,13 +151,6 @@ else cut_overlays() -/obj/item/weapon/storage/fancy/cigarettes/remove_from_storage(obj/item/W, atom/new_location) - if(istype(W,/obj/item/clothing/mask/cigarette)) - if(reagents) - reagents.trans_to(W,(reagents.total_volume/contents.len)) - fancy_open = TRUE - ..() - /obj/item/weapon/storage/fancy/cigarettes/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) if(!istype(M, /mob)) return @@ -184,65 +168,52 @@ to_chat(user, "There are no [icon_type]s left in the pack.") /obj/item/weapon/storage/fancy/cigarettes/dromedaryco - name = "DromedaryCo" + name = "\improper DromedaryCo packet" desc = "A packet of six imported DromedaryCo cancer sticks. A label on the packaging reads, \"Wouldn't a slow death make a change?\"" icon_state = "dromedary" + spawn_type = /obj/item/clothing/mask/cigarette/dromedary /obj/item/weapon/storage/fancy/cigarettes/cigpack_uplift - name = "Uplift Smooth" + name = "\improper Uplift Smooth packet" desc = "Your favorite brand, now menthol flavored." icon_state = "uplift" + spawn_type = /obj/item/clothing/mask/cigarette/uplift /obj/item/weapon/storage/fancy/cigarettes/cigpack_robust - name = "Robust" + name = "\improper Robust packet" desc = "Smoked by the robust." icon_state = "robust" + spawn_type = /obj/item/clothing/mask/cigarette/robust /obj/item/weapon/storage/fancy/cigarettes/cigpack_robustgold - name = "Robust Gold" + name = "\improper Robust Gold packet" desc = "Smoked by the truly robust." icon_state = "robustg" - -/obj/item/weapon/storage/fancy/cigarettes/cigpack_robustgold/New() - ..() - for(var/i = 1 to storage_slots) - reagents.add_reagent("gold",1) + spawn_type = /obj/item/clothing/mask/cigarette/robustgold /obj/item/weapon/storage/fancy/cigarettes/cigpack_carp - name = "Carp Classic" + name = "\improper Carp Classic packet" desc = "Since 2313." icon_state = "carp" + spawn_type = /obj/item/clothing/mask/cigarette/carp /obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate - name = "unknown" + name = "cigarette packet" desc = "An obscure brand of cigarettes." icon_state = "syndie" - -/obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate/New() - ..() - for(var/i = 1 to storage_slots) - reagents.add_reagent("omnizine",15) - name = "cigarette packet" - + spawn_type = /obj/item/clothing/mask/cigarette/syndicate /obj/item/weapon/storage/fancy/cigarettes/cigpack_midori - name = "Midori Tabako" + name = "\improper Midori Tabako packet" desc = "You can't understand the runes, but the packet smells funny." icon_state = "midori" spawn_type = /obj/item/clothing/mask/cigarette/rollie /obj/item/weapon/storage/fancy/cigarettes/cigpack_shadyjims - name ="Shady Jim's Super Slims" + name = "\improper Shady Jim's Super Slims packet" desc = "Is your weight slowing you down? Having trouble running away from gravitational singularities? Can't stop stuffing your mouth? Smoke Shady Jim's Super Slims and watch all that fat burn away. Guaranteed results!" icon_state = "shadyjim" - -/obj/item/weapon/storage/fancy/cigarettes/cigpack_shadyjims/New() - ..() - for(var/i = 1 to storage_slots) - reagents.add_reagent("lipolicide",4) - reagents.add_reagent("ammonia",2) - reagents.add_reagent("plantbgone",1) - reagents.add_reagent("toxin",1.5) + spawn_type = /obj/item/clothing/mask/cigarette/shadyjims /obj/item/weapon/storage/fancy/rollingpapers name = "rolling paper pack" diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index a792f03bf7..3beecc4f71 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -20,9 +20,9 @@ icon_state = "firstaid" desc = "A first aid kit with the ability to heal common types of injuries." -/obj/item/weapon/storage/firstaid/regular/New() - ..() - if(empty) return +/obj/item/weapon/storage/firstaid/regular/PopulateContents() + if(empty) + return new /obj/item/stack/medical/gauze(src) new /obj/item/stack/medical/bruise_pack(src) new /obj/item/stack/medical/bruise_pack(src) @@ -30,7 +30,6 @@ new /obj/item/stack/medical/ointment(src) new /obj/item/weapon/reagent_containers/hypospray/medipen(src) new /obj/item/device/healthanalyzer(src) - return /obj/item/weapon/storage/firstaid/fire name = "burn treatment kit" @@ -38,17 +37,19 @@ icon_state = "ointment" item_state = "firstaid-ointment" -/obj/item/weapon/storage/firstaid/fire/New() +/obj/item/weapon/storage/firstaid/fire/Initialize(mapload) ..() - if(empty) return icon_state = pick("ointment","firefirstaid") + +/obj/item/weapon/storage/firstaid/fire/PopulateContents() + if(empty) + return 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) new /obj/item/device/healthanalyzer(src) - return /obj/item/weapon/storage/firstaid/toxin name = "toxin treatment kit" @@ -56,16 +57,18 @@ icon_state = "antitoxin" item_state = "firstaid-toxin" -/obj/item/weapon/storage/firstaid/toxin/New() - ..() - if(empty) return +/obj/item/weapon/storage/firstaid/toxin/Initialize(mapload) + . = ..() icon_state = pick("antitoxin","antitoxfirstaid","antitoxfirstaid2","antitoxfirstaid3") + +/obj/item/weapon/storage/firstaid/toxin/PopulateContents() + if(empty) + return for(var/i in 1 to 4) new /obj/item/weapon/reagent_containers/syringe/charcoal(src) for(var/i in 1 to 2) new /obj/item/weapon/storage/pill_bottle/charcoal(src) new /obj/item/device/healthanalyzer(src) - return /obj/item/weapon/storage/firstaid/o2 name = "oxygen deprivation treatment kit" @@ -73,15 +76,14 @@ icon_state = "o2" item_state = "firstaid-o2" -/obj/item/weapon/storage/firstaid/o2/New() - ..() - if(empty) return +/obj/item/weapon/storage/firstaid/o2/PopulateContents() + if(empty) + return 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) - return /obj/item/weapon/storage/firstaid/brute name = "brute trauma treatment kit" @@ -89,15 +91,14 @@ icon_state = "brute" item_state = "firstaid-brute" -/obj/item/weapon/storage/firstaid/brute/New() - ..() - if(empty) return +/obj/item/weapon/storage/firstaid/brute/PopulateContents() + if(empty) + return 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) - return /obj/item/weapon/storage/firstaid/tactical name = "combat medical kit" @@ -105,9 +106,9 @@ icon_state = "bezerk" max_w_class = WEIGHT_CLASS_NORMAL -/obj/item/weapon/storage/firstaid/tactical/New() - ..() - if(empty) return +/obj/item/weapon/storage/firstaid/tactical/PopulateContents() + if(empty) + return new /obj/item/stack/medical/gauze(src) new /obj/item/weapon/defibrillator/compact/combat/loaded(src) new /obj/item/weapon/reagent_containers/hypospray/combat(src) @@ -115,7 +116,6 @@ new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) new /obj/item/weapon/reagent_containers/syringe/lethal/choral(src) new /obj/item/clothing/glasses/hud/health/night(src) - return /* @@ -147,21 +147,11 @@ usr.s_active.close(usr) src.show_to(usr) -/obj/item/weapon/storage/box/silver_sulf - name = "box of silver sulfadiazine patches" - desc = "Contains patches used to treat burns." - -/obj/item/weapon/storage/box/silver_sulf/New() - ..() - 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() - ..() +/obj/item/weapon/storage/pill_bottle/charcoal/PopulateContents() for(var/i in 1 to 7) new /obj/item/weapon/reagent_containers/pill/charcoal(src) @@ -169,8 +159,7 @@ name = "bottle of epinephrine pills" desc = "Contains pills used to stabilize patients." -/obj/item/weapon/storage/pill_bottle/epinephrine/New() - ..() +/obj/item/weapon/storage/pill_bottle/epinephrine/PopulateContents() for(var/i in 1 to 7) new /obj/item/weapon/reagent_containers/pill/epinephrine(src) @@ -178,8 +167,7 @@ name = "bottle of mutadone pills" desc = "Contains pills used to treat genetic abnormalities." -/obj/item/weapon/storage/pill_bottle/mutadone/New() - ..() +/obj/item/weapon/storage/pill_bottle/mutadone/PopulateContents() for(var/i in 1 to 7) new /obj/item/weapon/reagent_containers/pill/mutadone(src) @@ -187,8 +175,7 @@ name = "bottle of mannitol pills" desc = "Contains pills used to treat brain damage." -/obj/item/weapon/storage/pill_bottle/mannitol/New() - ..() +/obj/item/weapon/storage/pill_bottle/mannitol/PopulateContents() for(var/i in 1 to 7) new /obj/item/weapon/reagent_containers/pill/mannitol(src) @@ -196,17 +183,15 @@ 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() - ..() +/obj/item/weapon/storage/pill_bottle/stimulant/PopulateContents() for(var/i in 1 to 5) new /obj/item/weapon/reagent_containers/pill/stimulant(src) /obj/item/weapon/storage/pill_bottle/mining - name = "box of patches" + name = "bottle of patches" desc = "Contains patches used to treat brute and burn damage." -/obj/item/weapon/storage/pill_bottle/mining/New() - ..() +/obj/item/weapon/storage/pill_bottle/mining/PopulateContents() 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/styptic(src) \ No newline at end of file + new /obj/item/weapon/reagent_containers/pill/patch/styptic(src) diff --git a/code/game/objects/items/weapons/storage/internal.dm b/code/game/objects/items/weapons/storage/internal.dm index 9fdc14f85c..8c7b7df04c 100644 --- a/code/game/objects/items/weapons/storage/internal.dm +++ b/code/game/objects/items/weapons/storage/internal.dm @@ -70,6 +70,5 @@ /obj/item/weapon/storage/internal/pocket/small/detective priority = TRUE // so the detectives would discover pockets in their hats -/obj/item/weapon/storage/internal/pocket/small/detective/New() - ..() +/obj/item/weapon/storage/internal/pocket/small/detective/PopulateContents() new /obj/item/weapon/reagent_containers/food/drinks/flask/det(src) diff --git a/code/game/objects/items/weapons/storage/lockbox.dm b/code/game/objects/items/weapons/storage/lockbox.dm index e2b45252ae..2a026a8f9e 100644 --- a/code/game/objects/items/weapons/storage/lockbox.dm +++ b/code/game/objects/items/weapons/storage/lockbox.dm @@ -1,5 +1,3 @@ - - /obj/item/weapon/storage/lockbox name = "lockbox" desc = "A locked box." @@ -9,7 +7,7 @@ max_w_class = WEIGHT_CLASS_NORMAL max_combined_w_class = 14 //The sum of the w_classes of all the items in this storage item. storage_slots = 4 - req_access = list(access_armory) + req_access = list(GLOB.access_armory) var/locked = 1 var/broken = 0 var/icon_locked = "lockbox+l" @@ -78,10 +76,9 @@ /obj/item/weapon/storage/lockbox/loyalty name = "lockbox of mindshield implants" - req_access = list(access_security) + req_access = list(GLOB.access_security) -/obj/item/weapon/storage/lockbox/loyalty/New() - ..() +/obj/item/weapon/storage/lockbox/loyalty/PopulateContents() for(var/i in 1 to 3) new /obj/item/weapon/implantcase/mindshield(src) new /obj/item/weapon/implanter/mindshield(src) @@ -90,10 +87,9 @@ /obj/item/weapon/storage/lockbox/clusterbang name = "lockbox of clusterbangs" desc = "You have a bad feeling about opening this." - req_access = list(access_security) + req_access = list(GLOB.access_security) -/obj/item/weapon/storage/lockbox/clusterbang/New() - ..() +/obj/item/weapon/storage/lockbox/clusterbang/PopulateContents() new /obj/item/weapon/grenade/clusterbuster(src) /obj/item/weapon/storage/lockbox/medal @@ -104,13 +100,12 @@ w_class = WEIGHT_CLASS_NORMAL max_w_class = WEIGHT_CLASS_SMALL storage_slots = 10 - req_access = list(access_captain) + req_access = list(GLOB.access_captain) icon_locked = "medalbox+l" icon_closed = "medalbox" icon_broken = "medalbox+b" -/obj/item/weapon/storage/lockbox/medal/New() - ..() +/obj/item/weapon/storage/lockbox/medal/PopulateContents() new /obj/item/clothing/tie/medal/silver/valor(src) new /obj/item/clothing/tie/medal/bronze_heart(src) for(var/i in 1 to 3) diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index c248808aae..b628832aa7 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -145,10 +145,9 @@ max_combined_w_class = 21 attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked") -/obj/item/weapon/storage/secure/briefcase/New() +/obj/item/weapon/storage/secure/briefcase/PopulateContents() new /obj/item/weapon/paper(src) new /obj/item/weapon/pen(src) - return ..() /obj/item/weapon/storage/secure/briefcase/attack_hand(mob/user) if ((src.loc == user) && (src.locked == 1)) @@ -161,10 +160,10 @@ /obj/item/weapon/storage/secure/briefcase/syndie force = 15 -/obj/item/weapon/storage/secure/briefcase/syndie/New() +/obj/item/weapon/storage/secure/briefcase/syndie/PopulateContents() + ..() for(var/i = 0, i < storage_slots - 2, i++) new /obj/item/stack/spacecash/c1000(src) - return ..() // ----------------------------- @@ -185,14 +184,12 @@ density = 0 cant_hold = list(/obj/item/weapon/storage/secure/briefcase) -/obj/item/weapon/storage/secure/safe/New() - ..() +/obj/item/weapon/storage/secure/safe/PopulateContents() new /obj/item/weapon/paper(src) new /obj/item/weapon/pen(src) /obj/item/weapon/storage/secure/safe/attack_hand(mob/user) return attack_self(user) -/obj/item/weapon/storage/secure/safe/HoS/New() - ..() - //new /obj/item/weapon/storage/lockbox/clusterbang(src) This item is currently broken... and probably shouldnt exist to begin with (even though it's cool) +/obj/item/weapon/storage/secure/safe/HoS + name = "head of security's safe" diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 79bfb62312..60c5d9e587 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -498,7 +498,7 @@ remove_from_storage(I, T) -/obj/item/weapon/storage/New() +/obj/item/weapon/storage/Initialize(mapload) ..() can_hold = typecacheof(can_hold) @@ -528,6 +528,8 @@ closer.plane = ABOVE_HUD_PLANE orient2hud() + PopulateContents() + /obj/item/weapon/storage/Destroy() for(var/obj/O in contents) @@ -561,3 +563,7 @@ for(var/atom/A in contents) A.ex_act(severity, target) CHECK_TICK + +//Cyberboss says: "USE THIS TO FILL IT, NOT INITIALIZE OR NEW" + +/obj/item/weapon/storage/proc/PopulateContents() diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index b1b7c823a2..b72a197791 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -41,8 +41,7 @@ icon_state = "red" item_state = "toolbox_red" -/obj/item/weapon/storage/toolbox/emergency/New() - ..() +/obj/item/weapon/storage/toolbox/emergency/PopulateContents() new /obj/item/weapon/crowbar/red(src) new /obj/item/weapon/weldingtool/mini(src) new /obj/item/weapon/extinguisher/mini(src) @@ -65,8 +64,7 @@ icon_state = "blue" item_state = "toolbox_blue" -/obj/item/weapon/storage/toolbox/mechanical/New() - ..() +/obj/item/weapon/storage/toolbox/mechanical/PopulateContents() new /obj/item/weapon/screwdriver(src) new /obj/item/weapon/wrench(src) new /obj/item/weapon/weldingtool(src) @@ -84,8 +82,7 @@ icon_state = "yellow" item_state = "toolbox_yellow" -/obj/item/weapon/storage/toolbox/electrical/New() - ..() +/obj/item/weapon/storage/toolbox/electrical/PopulateContents() var/pickedcolor = pick("red","yellow","green","blue","pink","orange","cyan","white") new /obj/item/weapon/screwdriver(src) new /obj/item/weapon/wirecutters(src) @@ -107,8 +104,7 @@ force = 15 throwforce = 18 -/obj/item/weapon/storage/toolbox/syndicate/New() - ..() +/obj/item/weapon/storage/toolbox/syndicate/PopulateContents() new /obj/item/weapon/screwdriver/nuke(src) new /obj/item/weapon/wrench(src) new /obj/item/weapon/weldingtool/largetank(src) @@ -122,8 +118,7 @@ icon_state = "blue" item_state = "toolbox_blue" -/obj/item/weapon/storage/toolbox/drone/New() - ..() +/obj/item/weapon/storage/toolbox/drone/PopulateContents() var/pickedcolor = pick("red","yellow","green","blue","pink","orange","cyan","white") new /obj/item/weapon/screwdriver(src) new /obj/item/weapon/wrench(src) @@ -147,8 +142,7 @@ attack_verb = list("robusted", "crushed", "smashed") var/proselytizer_type = /obj/item/clockwork/clockwork_proselytizer/scarab -/obj/item/weapon/storage/toolbox/brass/prefilled/New() - ..() +/obj/item/weapon/storage/toolbox/brass/prefilled/PopulateContents() new proselytizer_type(src) new /obj/item/weapon/screwdriver/brass(src) new /obj/item/weapon/wirecutters/brass(src) @@ -159,7 +153,7 @@ /obj/item/weapon/storage/toolbox/brass/prefilled/ratvar var/slab_type = /obj/item/clockwork/slab/scarab -/obj/item/weapon/storage/toolbox/brass/prefilled/ratvar/New() +/obj/item/weapon/storage/toolbox/brass/prefilled/ratvar/PopulateContents() ..() new slab_type(src) @@ -177,8 +171,7 @@ storage_slots = 10 w_class = WEIGHT_CLASS_GIGANTIC //Holds more than a regular toolbox! -/obj/item/weapon/storage/toolbox/artistic/New() - ..() +/obj/item/weapon/storage/toolbox/artistic/PopulateContents() new/obj/item/weapon/storage/crayons(src) new/obj/item/weapon/crowbar(src) new/obj/item/stack/cable_coil/red(src) diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 556fc94901..335545e8c9 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -1,7 +1,6 @@ /obj/item/weapon/storage/box/syndicate -/obj/item/weapon/storage/box/syndicate/New() - ..() +/obj/item/weapon/storage/box/syndicate/PopulateContents() switch (pickweight(list("bloodyspai" = 3, "stealth" = 2, "bond" = 2, "screwed" = 2, "sabotage" = 3, "guns" = 2, "murder" = 2, "implant" = 1, "hacker" = 3, "darklord" = 1, "sniper" = 1, "metaops" = 1, "ninja" = 1))) if("bloodyspai") // 27 tc now this is more right new /obj/item/clothing/under/chameleon(src) // 2 tc since it's not the full set @@ -141,8 +140,7 @@ /obj/item/weapon/storage/box/syndie_kit/imp_freedom name = "boxed freedom implant (with injector)" -/obj/item/weapon/storage/box/syndie_kit/imp_freedom/New() - ..() +/obj/item/weapon/storage/box/syndie_kit/imp_freedom/PopulateContents() var/obj/item/weapon/implanter/O = new(src) O.imp = new /obj/item/weapon/implant/freedom(O) O.update_icon() @@ -150,25 +148,23 @@ /obj/item/weapon/storage/box/syndie_kit/imp_microbomb name = "Microbomb Implant (with injector)" -/obj/item/weapon/storage/box/syndie_kit/imp_microbomb/New() +/obj/item/weapon/storage/box/syndie_kit/imp_microbomb/PopulateContents() var/obj/item/weapon/implanter/O = new(src) O.imp = new /obj/item/weapon/implant/explosive(O) O.update_icon() - ..() /obj/item/weapon/storage/box/syndie_kit/imp_macrobomb name = "Macrobomb Implant (with injector)" -/obj/item/weapon/storage/box/syndie_kit/imp_macrobomb/New() +/obj/item/weapon/storage/box/syndie_kit/imp_macrobomb/PopulateContents() var/obj/item/weapon/implanter/O = new(src) O.imp = new /obj/item/weapon/implant/explosive/macro(O) O.update_icon() - ..() /obj/item/weapon/storage/box/syndie_kit/imp_uplink name = "boxed uplink implant (with injector)" -/obj/item/weapon/storage/box/syndie_kit/imp_uplink/New() +/obj/item/weapon/storage/box/syndie_kit/imp_uplink/PopulateContents() ..() var/obj/item/weapon/implanter/O = new(src) O.imp = new /obj/item/weapon/implant/uplink(O) @@ -177,16 +173,14 @@ /obj/item/weapon/storage/box/syndie_kit/bioterror name = "bioterror syringe box" -/obj/item/weapon/storage/box/syndie_kit/bioterror/New() - ..() +/obj/item/weapon/storage/box/syndie_kit/bioterror/PopulateContents() for(var/i in 1 to 7) new /obj/item/weapon/reagent_containers/syringe/bioterror(src) /obj/item/weapon/storage/box/syndie_kit/imp_adrenal name = "boxed adrenal implant (with injector)" -/obj/item/weapon/storage/box/syndie_kit/imp_adrenal/New() - ..() +/obj/item/weapon/storage/box/syndie_kit/imp_adrenal/PopulateContents() var/obj/item/weapon/implanter/O = new(src) O.imp = new /obj/item/weapon/implant/adrenalin(O) O.update_icon() @@ -194,8 +188,7 @@ /obj/item/weapon/storage/box/syndie_kit/imp_storage name = "boxed storage implant (with injector)" -/obj/item/weapon/storage/box/syndie_kit/imp_storage/New() - ..() +/obj/item/weapon/storage/box/syndie_kit/imp_storage/PopulateContents() new /obj/item/weapon/implanter/storage(src) /obj/item/weapon/storage/box/syndie_kit/space @@ -203,16 +196,14 @@ can_hold = list(/obj/item/clothing/suit/space/syndicate, /obj/item/clothing/head/helmet/space/syndicate) max_w_class = WEIGHT_CLASS_NORMAL -/obj/item/weapon/storage/box/syndie_kit/space/New() - ..() +/obj/item/weapon/storage/box/syndie_kit/space/PopulateContents() new /obj/item/clothing/suit/space/syndicate/black/red(src) // Black and red is so in right now new /obj/item/clothing/head/helmet/space/syndicate/black/red(src) /obj/item/weapon/storage/box/syndie_kit/emp name = "boxed EMP kit" -/obj/item/weapon/storage/box/syndie_kit/emp/New() - ..() +/obj/item/weapon/storage/box/syndie_kit/emp/PopulateContents() new /obj/item/weapon/grenade/empgrenade(src) new /obj/item/weapon/grenade/empgrenade(src) new /obj/item/weapon/grenade/empgrenade(src) @@ -224,8 +215,7 @@ name = "boxed chemical kit" storage_slots = 14 -/obj/item/weapon/storage/box/syndie_kit/chemical/New() - ..() +/obj/item/weapon/storage/box/syndie_kit/chemical/PopulateContents() new /obj/item/weapon/reagent_containers/glass/bottle/polonium(src) new /obj/item/weapon/reagent_containers/glass/bottle/venom(src) new /obj/item/weapon/reagent_containers/glass/bottle/neurotoxin2(src) @@ -243,8 +233,7 @@ /obj/item/weapon/storage/box/syndie_kit/nuke name = "box" -/obj/item/weapon/storage/box/syndie_kit/nuke/New() - ..() +/obj/item/weapon/storage/box/syndie_kit/nuke/PopulateContents() new /obj/item/weapon/screwdriver/nuke(src) new /obj/item/nuke_core_container(src) new /obj/item/weapon/paper/nuke_instructions(src) @@ -252,8 +241,7 @@ /obj/item/weapon/storage/box/syndie_kit/tuberculosisgrenade name = "boxed virus grenade kit" -/obj/item/weapon/storage/box/syndie_kit/tuberculosisgrenade/New() - ..() +/obj/item/weapon/storage/box/syndie_kit/tuberculosisgrenade/PopulateContents() 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) @@ -263,8 +251,7 @@ /obj/item/weapon/storage/box/syndie_kit/chameleon name = "chameleon kit" -/obj/item/weapon/storage/box/syndie_kit/chameleon/New() - ..() +/obj/item/weapon/storage/box/syndie_kit/chameleon/PopulateContents() new /obj/item/clothing/under/chameleon(src) new /obj/item/clothing/suit/chameleon(src) new /obj/item/clothing/gloves/chameleon(src) @@ -280,9 +267,7 @@ //5*(2*4) = 5*8 = 45, 45 damage if you hit one person with all 5 stars. //Not counting the damage it will do while embedded (2*4 = 8, at 15% chance) -/obj/item/weapon/storage/box/syndie_kit/throwing_weapons/New() - ..() - contents = list() +/obj/item/weapon/storage/box/syndie_kit/throwing_weapons/PopulateContents() new /obj/item/weapon/throwing_star(src) new /obj/item/weapon/throwing_star(src) new /obj/item/weapon/throwing_star(src) @@ -291,28 +276,23 @@ new /obj/item/weapon/restraints/legcuffs/bola/tactical(src) new /obj/item/weapon/restraints/legcuffs/bola/tactical(src) -/obj/item/weapon/storage/box/syndie_kit/cutouts/New() - ..() +/obj/item/weapon/storage/box/syndie_kit/cutouts/PopulateContents() for(var/i in 1 to 3) new/obj/item/cardboard_cutout/adaptive(src) new/obj/item/toy/crayon/rainbow(src) -/obj/item/weapon/storage/box/syndie_kit/romerol/New() - ..() +/obj/item/weapon/storage/box/syndie_kit/romerol/PopulateContents() new /obj/item/weapon/reagent_containers/glass/bottle/romerol(src) new /obj/item/weapon/reagent_containers/syringe(src) new /obj/item/weapon/reagent_containers/dropper(src) -/obj/item/weapon/storage/box/syndie_kit/ez_clean/New() - ..() +/obj/item/weapon/storage/box/syndie_kit/ez_clean/PopulateContents() for(var/i in 1 to 3) new/obj/item/weapon/grenade/chem_grenade/ez_clean(src) -/obj/item/weapon/storage/box/hug/reverse_revolver/New() - ..() +/obj/item/weapon/storage/box/hug/reverse_revolver/PopulateContents() new /obj/item/weapon/gun/ballistic/revolver/reverse(src) -/obj/item/weapon/storage/box/syndie_kit/mimery/New() - ..() +/obj/item/weapon/storage/box/syndie_kit/mimery/PopulateContents() new /obj/item/weapon/spellbook/oneuse/mimery_blockade(src) new /obj/item/weapon/spellbook/oneuse/mimery_guns(src) diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm index 72db963c59..b2501103aa 100644 --- a/code/game/objects/items/weapons/storage/wallets.dm +++ b/code/game/objects/items/weapons/storage/wallets.dm @@ -72,8 +72,7 @@ else return ..() -/obj/item/weapon/storage/wallet/random/New() - ..() +/obj/item/weapon/storage/wallet/random/PopulateContents() var/item1_type = pick( /obj/item/stack/spacecash/c10,/obj/item/stack/spacecash/c100,/obj/item/stack/spacecash/c1000,/obj/item/stack/spacecash/c20,/obj/item/stack/spacecash/c200,/obj/item/stack/spacecash/c50, /obj/item/stack/spacecash/c500) var/item2_type if(prob(50)) diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index c79e35d9ec..91372da6ae 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -29,7 +29,7 @@ /obj/item/weapon/melee/baton/throw_impact(atom/hit_atom) ..() //Only mob/living types have stun handling - if(status && prob(throw_hit_chance) && isliving(hit_atom)) + if(status && prob(throw_hit_chance) && iscarbon(hit_atom)) baton_stun(hit_atom) /obj/item/weapon/melee/baton/loaded/New() //this one starts with a cell pre-installed. @@ -164,7 +164,7 @@ if(ishuman(L)) var/mob/living/carbon/human/H = L - H.forcesay(hit_appends) + H.forcesay(GLOB.hit_appends) return 1 diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index ffac4b240b..0595076901 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -120,7 +120,7 @@ for(var/obj/item/W in H) H.dropItemToGround(W) if(prob(50)) - step(W, pick(alldirs)) + step(W, pick(GLOB.alldirs)) H.status_flags |= DISFIGURED H.bleed_rate = 5 H.gib_animation() @@ -143,7 +143,7 @@ . = ..() /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) + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "tanks", name, 420, 200, master_ui, state) diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm index 74a9bc324c..8a37452ffe 100644 --- a/code/game/objects/items/weapons/teleportation.dm +++ b/code/game/objects/items/weapons/teleportation.dm @@ -60,7 +60,7 @@ Frequency: if (sr) src.temp += "Located Beacons:
    " - for(var/obj/item/device/radio/beacon/W in teleportbeacons) + for(var/obj/item/device/radio/beacon/W in GLOB.teleportbeacons) if (W.frequency == src.frequency) var/turf/tr = get_turf(W) if (tr.z == sr.z && tr) @@ -78,7 +78,7 @@ Frequency: src.temp += "[W.code]-[dir2text(get_dir(sr, tr))]-[direct]
    " src.temp += "Extranneous Signals:
    " - for (var/obj/item/weapon/implant/tracking/W in tracked_implants) + for (var/obj/item/weapon/implant/tracking/W in GLOB.tracked_implants) if (!W.imp_in || !ismob(W.loc)) continue else @@ -145,7 +145,7 @@ Frequency: to_chat(user, "\The [src] is malfunctioning.") return var/list/L = list( ) - for(var/obj/machinery/computer/teleporter/com in machines) + for(var/obj/machinery/computer/teleporter/com in GLOB.machines) if(com.target) var/area/A = get_area(com.target) if(!A || A.noteleport) diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 74d9d256de..be615b297b 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -1,4 +1,4 @@ - +#define WELDER_FUEL_BURN_INTERVAL 13 /* Tools! * Note: Multitools are /obj/item/device @@ -336,6 +336,7 @@ var/change_icons = 1 var/can_off_process = 0 var/light_intensity = 2 //how powerful the emitted light is when used. + var/burned_fuel_for = 0 //when fuel was last removed heat = 3800 toolspeed = 1 @@ -381,7 +382,8 @@ if(1) force = 15 damtype = "fire" - if(prob(5)) + ++burned_fuel_for + if(burned_fuel_for >= WELDER_FUEL_BURN_INTERVAL) remove_fuel(1) update_icon() @@ -455,6 +457,8 @@ /obj/item/weapon/weldingtool/proc/remove_fuel(amount = 1, mob/living/M = null) if(!welding || !check_fuel()) return 0 + if(amount) + burned_fuel_for = 0 if(get_fuel() >= amount) reagents.remove_reagent("welding_fuel", amount) check_fuel() @@ -727,3 +731,5 @@ to_chat(user, "You attach the cutting jaws to [src].") qdel(src) user.put_in_active_hand(cutjaws) + +#undef WELDER_FUEL_BURN_INTERVAL diff --git a/code/game/objects/items/weapons/vending_items.dm b/code/game/objects/items/weapons/vending_items.dm index 0c0a3d804a..74ab7be4b6 100644 --- a/code/game/objects/items/weapons/vending_items.dm +++ b/code/game/objects/items/weapons/vending_items.dm @@ -63,11 +63,11 @@ /obj/item/weapon/vending_refill/autodrobe machine_name = "AutoDrobe" icon_state = "refill_costume" - charges = list(33, 2, 3)// of 97 standard, 6 contraband, 9 premium - init_charges = list(33, 2, 3) + charges = list(31, 2, 3)// of 94 standard, 6 contraband, 9 premium + init_charges = list(27, 2, 3) /obj/item/weapon/vending_refill/clothing machine_name = "ClothesMate" icon_state = "refill_clothes" - charges = list(39, 7, 4)// of 115 standard, 18 contraband, 10 premium(?) - init_charges = list(39, 7, 4) + charges = list(31, 4, 4)// of 101 standard, 12 contraband, 10 premium(?) + init_charges = list(31, 4, 4) diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 6fb24651b9..a0de9b5f76 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -123,7 +123,7 @@ /obj/item/weapon/claymore/highlander/attack_self(mob/living/user) var/closest_victim var/closest_distance = 255 - for(var/mob/living/carbon/human/H in player_list - user) + for(var/mob/living/carbon/human/H in GLOB.player_list - user) if(H.client && H.mind.special_role == "highlander" && (!closest_victim || get_dist(user, closest_victim) < closest_distance)) closest_victim = H if(!closest_victim) diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index a8c9518685..45f082f72c 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -100,7 +100,7 @@ /obj/attack_animal(mob/living/simple_animal/M) if(!M.melee_damage_upper && !M.obj_damage) - M.emote("custom", message = "[M.friendly] [src]") + M.emote("custom", message = "[M.friendly] [src].") return 0 else var/play_soundeffect = 1 @@ -148,7 +148,7 @@ ///// ACID -var/global/image/acid_overlay = image("icon" = 'icons/effects/effects.dmi', "icon_state" = "acid") +GLOBAL_DATUM_INIT(acid_overlay, /image, image("icon" = 'icons/effects/effects.dmi', "icon_state" = "acid")) //the obj's reaction when touched by acid /obj/acid_act(acidpwr, acid_volume) @@ -156,7 +156,7 @@ var/global/image/acid_overlay = image("icon" = 'icons/effects/effects.dmi', "ico if(!acid_level) SSacid.processing[src] = src - add_overlay(acid_overlay, TRUE) + add_overlay(GLOB.acid_overlay, TRUE) var/acid_cap = acidpwr * 300 //so we cannot use huge amounts of weak acids to do as well as strong acids. if(acid_level < acid_cap) acid_level = min(acid_level + acidpwr * acid_volume, acid_cap) @@ -194,7 +194,7 @@ var/global/image/acid_overlay = image("icon" = 'icons/effects/effects.dmi', "ico if(!(resistance_flags & ON_FIRE) && (resistance_flags & FLAMMABLE)) resistance_flags |= ON_FIRE SSfire_burning.processing[src] = src - add_overlay(fire_overlay, TRUE) + add_overlay(GLOB.fire_overlay, TRUE) return 1 //called when the obj is destroyed by fire @@ -206,7 +206,7 @@ var/global/image/acid_overlay = image("icon" = 'icons/effects/effects.dmi', "ico /obj/proc/extinguish() if(resistance_flags & ON_FIRE) resistance_flags &= ~ON_FIRE - cut_overlay(fire_overlay, TRUE) + cut_overlay(GLOB.fire_overlay, TRUE) SSfire_burning.processing -= src diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 905d3646e5..f297662c2d 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -1,12 +1,10 @@ /obj - languages_spoken = HUMAN - languages_understood = HUMAN - var/crit_fail = 0 + var/crit_fail = FALSE animate_movement = 2 var/throwforce = 0 var/in_use = 0 // If we have a user using us, this will be set on. We will check if the user has stopped using us, and thus stop updating and LAGGING EVERYTHING! - var/damtype = "brute" + var/damtype = BRUTE var/force = 0 var/list/armor @@ -18,14 +16,25 @@ var/acid_level = 0 //how much acid is on that obj - var/being_shocked = 0 + var/being_shocked = FALSE var/on_blueprints = FALSE //Are we visible on the station blueprints at roundstart? var/force_blueprints = FALSE //forces the obj to be on the blueprints, regardless of when it was created. - var/persistence_replacement = null //have something WAY too amazing to live to the next round? Set a new path here. Overuse of this var will make me upset. - var/unique_rename = 0 // can you customize the description/name of the thing? + var/persistence_replacement //have something WAY too amazing to live to the next round? Set a new path here. Overuse of this var will make me upset. + var/unique_rename = FALSE // can you customize the description/name of the thing? + + var/dangerous_possession = FALSE //Admin possession yes/no +/obj/vv_edit_var(vname, vval) + switch(vname) + if("dangerous_possession") + return FALSE + if("control_object") + var/obj/O = vval + if(istype(O) && O.dangerous_possession) + return FALSE + ..() /obj/Initialize() ..() diff --git a/code/game/objects/radiation.dm b/code/game/objects/radiation.dm index 1b522d6971..4e763a7b5f 100644 --- a/code/game/objects/radiation.dm +++ b/code/game/objects/radiation.dm @@ -50,4 +50,7 @@ . = ..(amount, TRUE) /mob/living/simple_animal/bot/rad_act(amount) - . = ..(amount, TRUE) \ No newline at end of file + . = ..(amount, TRUE) + +/mob/living/simple_animal/drone/rad_act(amount) + . = ..(amount, TRUE) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index e35e3816d6..d7fa0f1084 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -17,12 +17,12 @@ queue_smooth(src) queue_smooth_neighbors(src) icon_state = "" - if(ticker) - cameranet.updateVisibility(src) + if(SSticker) + GLOB.cameranet.updateVisibility(src) /obj/structure/Destroy() - if(ticker) - cameranet.updateVisibility(src) + if(SSticker) + GLOB.cameranet.updateVisibility(src) if(smooth) queue_smooth_neighbors(src) return ..() @@ -96,7 +96,7 @@ if(resistance_flags & ON_FIRE) to_chat(user, "It's on fire!") if(broken) - to_chat(user, "It looks broken.") + to_chat(user, "It appears to be broken.") var/examine_status = examine_status(user) if(examine_status) to_chat(user, examine_status) @@ -109,4 +109,5 @@ if(25 to 50) return "It appears heavily damaged." if(0 to 25) - return "It's falling apart!" + if(!broken) + return "It's falling apart!" diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm index 0fa60d55a9..3cf35daa03 100644 --- a/code/game/objects/structures/ai_core.dm +++ b/code/game/objects/structures/ai_core.dm @@ -174,7 +174,7 @@ playsound(loc, P.usesound, 50, 1) to_chat(user, "You connect the monitor.") if(brain) - ticker.mode.remove_antag_for_borging(brain.brainmob.mind) + SSticker.mode.remove_antag_for_borging(brain.brainmob.mind) if(!istype(brain.laws, /datum/ai_laws/ratvar)) remove_servant_of_ratvar(brain.brainmob, TRUE) var/mob/living/silicon/ai/A = new /mob/living/silicon/ai(loc, laws, brain.brainmob) diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm index 3150d69013..cd5a72d308 100644 --- a/code/game/objects/structures/aliens.dm +++ b/code/game/objects/structures/aliens.dm @@ -69,7 +69,6 @@ /obj/structure/alien/resin/New(location) ..() air_update_turf(1) - return /obj/structure/alien/resin/Move() var/turf/T = loc @@ -127,15 +126,20 @@ var/last_expand = 0 //last world.time this weed expanded var/growth_cooldown_low = 150 var/growth_cooldown_high = 200 - var/static/list/blacklisted_turfs = typecacheof(list( - /turf/open/space, - /turf/open/chasm, - /turf/open/floor/plating/lava)) + var/static/list/blacklisted_turfs -/obj/structure/alien/weeds/New() +/obj/structure/alien/weeds/Initialize() pixel_x = -4 pixel_y = -4 //so the sprites line up right in the map editor ..() + + if(!blacklisted_turfs) + blacklisted_turfs = typecacheof(list( + /turf/open/space, + /turf/open/chasm, + /turf/open/floor/plating/lava)) + + last_expand = world.time + rand(growth_cooldown_low, growth_cooldown_high) if(icon == initial(icon)) switch(rand(1,3)) @@ -171,12 +175,15 @@ name = "glowing resin" desc = "Blue bioluminescence shines from beneath the surface." icon_state = "weednode" - light_range = 1 + light_color = LIGHT_COLOR_BLUE + light_power = 0.5 + var/lon_range = 4 var/node_range = NODERANGE -/obj/structure/alien/weeds/node/New() +/obj/structure/alien/weeds/node/Initialize() icon = 'icons/obj/smooth_structures/alien/weednode.dmi' ..() + set_light(lon_range) var/obj/structure/alien/weeds/W = locate(/obj/structure/alien/weeds) in loc if(W && W != src) qdel(W) @@ -200,39 +207,58 @@ */ //for the status var -#define BURST 0 -#define BURSTING 1 -#define GROWING 2 -#define GROWN 3 +#define BURST "burst" +#define GROWING "growing" +#define GROWN "grown" #define MIN_GROWTH_TIME 900 //time it takes to grow a hugger #define MAX_GROWTH_TIME 1500 /obj/structure/alien/egg name = "egg" desc = "A large mottled egg." + var/base_icon = "egg" icon_state = "egg_growing" - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE obj_integrity = 100 max_integrity = 100 + integrity_failure = 5 var/status = GROWING //can be GROWING, GROWN or BURST; all mutually exclusive layer = MOB_LAYER + var/obj/item/clothing/mask/facehugger/child -/obj/structure/alien/egg/New() - new /obj/item/clothing/mask/facehugger(src) +/obj/structure/alien/egg/Initialize(mapload) ..() - addtimer(CALLBACK(src, .proc/Grow), rand(MIN_GROWTH_TIME, MAX_GROWTH_TIME)) + update_icon() + if(status == GROWING || status == GROWN) + child = new(src) + if(status == GROWING) + addtimer(CALLBACK(src, .proc/Grow), rand(MIN_GROWTH_TIME, MAX_GROWTH_TIME)) + if(status == GROWN) + add_to_proximity_list(src, 1) + if(status == BURST) + obj_integrity = integrity_failure /obj/structure/alien/egg/Destroy() remove_from_proximity_list(src, 1) - return ..() + . = ..() + +/obj/structure/alien/egg/update_icon() + ..() + switch(status) + if(GROWING) + icon_state = "[base_icon]_growing" + if(GROWN) + icon_state = "[base_icon]" + if(BURST) + icon_state = "[base_icon]_hatched" /obj/structure/alien/egg/attack_paw(mob/living/user) - return attack_hand(user) + . = attack_hand(user) /obj/structure/alien/egg/attack_alien(mob/living/carbon/alien/user) - return attack_hand(user) + . = attack_hand(user) /obj/structure/alien/egg/attack_hand(mob/living/user) if(user.getorgan(/obj/item/organ/alien/plasmavessel)) @@ -247,39 +273,39 @@ return if(GROWN) to_chat(user, "You retrieve the child.") - Burst(0) + Burst(kill=FALSE) return else to_chat(user, "It feels slimy.") user.changeNext_move(CLICK_CD_MELEE) -/obj/structure/alien/egg/proc/GetFacehugger() - return locate(/obj/item/clothing/mask/facehugger) in contents - /obj/structure/alien/egg/proc/Grow() - icon_state = "egg" status = GROWN + update_icon() add_to_proximity_list(src, 1) -/obj/structure/alien/egg/proc/Burst(kill = 1) //drops and kills the hugger if any is remaining +//drops and kills the hugger if any is remaining +/obj/structure/alien/egg/proc/Burst(kill = TRUE) if(status == GROWN || status == GROWING) remove_from_proximity_list(src, 1) - icon_state = "egg_hatched" + status = BURST + update_icon() flick("egg_opening", src) - status = BURSTING - spawn(15) - status = BURST - var/obj/item/clothing/mask/facehugger/child = GetFacehugger() - if(child) - child.loc = get_turf(src) - if(kill && istype(child)) - child.Die() - else - for(var/mob/M in range(1,src)) - if(CanHug(M)) - child.Attach(M) - break + addtimer(CALLBACK(src, .proc/finish_bursting, kill), 15) + +/obj/structure/alien/egg/proc/finish_bursting(kill = TRUE) + if(child) + child.forceMove(get_turf(src)) + // TECHNICALLY you could put non-facehuggers in the child var + if(istype(child)) + if(kill) + child.Die() + else + for(var/mob/M in range(1,src)) + if(CanHug(M)) + child.Attach(M) + break /obj/structure/alien/egg/Moved(oldloc) remove_from_proximity_list(oldloc, 1) @@ -287,14 +313,10 @@ add_to_proximity_list(src, 1) return ..() -/obj/structure/alien/egg/deconstruct() +/obj/structure/alien/egg/obj_break(damage_flag) if(!(flags & NODECONSTRUCT)) - if(status != BURST && status != BURSTING) - Burst() - else if(status == BURST) - qdel(src) //Remove the egg after it has been hit after bursting. - else - qdel(src) + if(status != BURST) + Burst(kill=TRUE) /obj/structure/alien/egg/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > 500) @@ -310,10 +332,17 @@ if(C.stat == CONSCIOUS && C.getorgan(/obj/item/organ/body_egg/alien_embryo)) return - Burst(0) + Burst(kill=FALSE) + +/obj/structure/alien/egg/grown + status = GROWN + icon_state = "egg" + +/obj/structure/alien/egg/burst + status = BURST + icon_state = "egg_hatched" #undef BURST -#undef BURSTING #undef GROWING #undef GROWN #undef MIN_GROWTH_TIME diff --git a/code/game/objects/structures/artstuff.dm b/code/game/objects/structures/artstuff.dm index b4e80bf9da..23bbc40ed8 100644 --- a/code/game/objects/structures/artstuff.dm +++ b/code/game/objects/structures/artstuff.dm @@ -45,7 +45,7 @@ #define AMT_OF_CANVASES 4 //Keep this up to date or shit will break. //To safe memory on making /icons we cache the blanks.. -var/global/list/globalBlankCanvases[AMT_OF_CANVASES] +GLOBAL_LIST_INIT(globalBlankCanvases, new(AMT_OF_CANVASES)) /obj/item/weapon/canvas name = "canvas" @@ -71,11 +71,11 @@ var/global/list/globalBlankCanvases[AMT_OF_CANVASES] //Find the right size blank canvas /obj/item/weapon/canvas/proc/getGlobalBackup() . = null - if(globalBlankCanvases[whichGlobalBackup]) - . = globalBlankCanvases[whichGlobalBackup] + if(GLOB.globalBlankCanvases[whichGlobalBackup]) + . = GLOB.globalBlankCanvases[whichGlobalBackup] else var/icon/I = icon(initial(icon),initial(icon_state)) - globalBlankCanvases[whichGlobalBackup] = I + GLOB.globalBlankCanvases[whichGlobalBackup] = I . = I diff --git a/code/game/objects/structures/barsigns.dm b/code/game/objects/structures/barsigns.dm index 707702d9a7..2b1319c50e 100644 --- a/code/game/objects/structures/barsigns.dm +++ b/code/game/objects/structures/barsigns.dm @@ -3,7 +3,7 @@ desc = "A bar sign with no writing on it" icon = 'icons/obj/barsigns.dmi' icon_state = "empty" - req_access = list(access_bar) + req_access = list(GLOB.access_bar) obj_integrity = 500 max_integrity = 500 integrity_failure = 250 @@ -132,7 +132,7 @@ sleep(100) //10 seconds set_sign(new /datum/barsign/hiddensigns/syndibarsign) emagged = 1 - req_access = list(access_syndicate) + req_access = list(GLOB.access_syndicate) @@ -299,6 +299,11 @@ icon = "thenet" desc = "You just seem to get caught up in it for hours." +/datum/barsign/maidcafe + name = "Maid Cafe" + icon = "maidcafe" + desc = "Welcome back, master!" + /datum/barsign/hiddensigns hidden = 1 diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index 990f22edf8..fdded787bd 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -25,7 +25,7 @@ return ..() /obj/structure/chair/proc/RemoveFromLatejoin() - latejoin -= src //These may be here due to the arrivals shuttle + GLOB.latejoin -= src //These may be here due to the arrivals shuttle /obj/structure/chair/deconstruct() // If we have materials, and don't have the NOCONSTRUCT flag @@ -61,7 +61,7 @@ return ..() /obj/structure/chair/attack_tk(mob/user) - if(has_buckled_mobs()) + if(!anchored || has_buckled_mobs()) ..() else rotate() diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 8317f96225..c0f50937d0 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -33,13 +33,19 @@ var/material_drop = /obj/item/stack/sheet/metal var/material_drop_amount = 2 var/delivery_icon = "deliverycloset" //which icon to use when packagewrapped. null to be unwrappable. + var/anchorable = TRUE /obj/structure/closet/Initialize(mapload) - ..() if(mapload && !opened) // if closed, any item at the crate's loc is put in the contents - take_contents() + addtimer(CALLBACK(src, .proc/take_contents), 0) + ..() update_icon() + PopulateContents() + +//USE THIS TO FILL IT, NOT INITIALIZE OR NEW +/obj/structure/closet/proc/PopulateContents() + return /obj/structure/closet/Destroy() dump_contents() @@ -73,8 +79,6 @@ ..() if(anchored) to_chat(user, "It is anchored to the ground.") - if(broken) - to_chat(user, "It appears to be broken.") else if(secure && !opened) to_chat(user, "Alt-click to [locked ? "unlock" : "lock"].") @@ -118,7 +122,7 @@ /obj/structure/closet/proc/take_contents() var/turf/T = get_turf(src) for(var/atom/movable/AM in T) - if(insert(AM) == -1) // limit reached + if(AM != src && insert(AM) == -1) // limit reached break /obj/structure/closet/proc/open(mob/living/user) @@ -240,7 +244,7 @@ "You [welded ? "weld" : "unwelded"] \the [src] with \the [WT].", "You hear welding.") update_icon() - else if(istype(W, /obj/item/weapon/wrench)) + else if(istype(W, /obj/item/weapon/wrench) && anchorable) if(isinspace() && !anchored) return anchored = !anchored @@ -315,6 +319,9 @@ togglelock(user) return +/obj/structure/closet/attack_paw(mob/user) + return attack_hand(user) + /obj/structure/closet/attack_robot(mob/user) if(user.Adjacent(src)) return attack_hand(user) diff --git a/code/game/objects/structures/crates_lockers/closets/bodybag.dm b/code/game/objects/structures/crates_lockers/closets/bodybag.dm index 0cf4048841..e817942a90 100644 --- a/code/game/objects/structures/crates_lockers/closets/bodybag.dm +++ b/code/game/objects/structures/crates_lockers/closets/bodybag.dm @@ -11,6 +11,7 @@ integrity_failure = 0 material_drop = /obj/item/stack/sheet/cloth delivery_icon = null //unwrappable + anchorable = FALSE var/foldedbag_path = /obj/item/bodybag var/tagged = 0 // so closet code knows to put the tag overlay back diff --git a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm index d517c9a57f..bb9348ee75 100644 --- a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm +++ b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm @@ -14,6 +14,7 @@ cutting_sound = 'sound/items/poster_ripped.ogg' material_drop = /obj/item/stack/sheet/cardboard delivery_icon = "deliverybox" + anchorable = FALSE var/move_speed_multiplier = 1 var/move_delay = 0 var/egged = 0 diff --git a/code/game/objects/structures/crates_lockers/closets/fitness.dm b/code/game/objects/structures/crates_lockers/closets/fitness.dm index baa71a8b19..b22a13f53f 100644 --- a/code/game/objects/structures/crates_lockers/closets/fitness.dm +++ b/code/game/objects/structures/crates_lockers/closets/fitness.dm @@ -3,7 +3,7 @@ desc = "It's a storage unit for athletic wear." icon_door = "mixed" -/obj/structure/closet/athletic_mixed/New() +/obj/structure/closet/athletic_mixed/PopulateContents() ..() new /obj/item/clothing/under/shorts/purple(src) new /obj/item/clothing/under/shorts/grey(src) @@ -19,7 +19,7 @@ name = "boxing gloves" desc = "It's a storage unit for gloves for use in the boxing ring." -/obj/structure/closet/boxinggloves/New() +/obj/structure/closet/boxinggloves/PopulateContents() ..() new /obj/item/clothing/gloves/boxing/blue(src) new /obj/item/clothing/gloves/boxing/green(src) @@ -31,7 +31,7 @@ name = "mask closet" desc = "IT'S A STORAGE UNIT FOR FIGHTER MASKS OLE!" -/obj/structure/closet/masks/New() +/obj/structure/closet/masks/PopulateContents() ..() new /obj/item/clothing/mask/luchador(src) new /obj/item/clothing/mask/luchador/rudos(src) @@ -43,7 +43,7 @@ desc = "It's a storage unit for laser tag equipment." icon_door = "red" -/obj/structure/closet/lasertag/red/New() +/obj/structure/closet/lasertag/red/PopulateContents() ..() for(var/i in 1 to 3) new /obj/item/weapon/gun/energy/laser/redtag(src) @@ -57,7 +57,7 @@ desc = "It's a storage unit for laser tag equipment." icon_door = "blue" -/obj/structure/closet/lasertag/blue/New() +/obj/structure/closet/lasertag/blue/PopulateContents() ..() for(var/i in 1 to 3) new /obj/item/weapon/gun/energy/laser/bluetag(src) diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm index 9769f58989..54590da389 100644 --- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm +++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm @@ -21,7 +21,7 @@ name = "russian surplus closet" desc = "It's a storage unit for Russian standard-issue surplus." -/obj/structure/closet/gimmick/russian/New() +/obj/structure/closet/gimmick/russian/PopulateContents() ..() for(var/i in 1 to 5) new /obj/item/clothing/head/ushanka(src) @@ -32,7 +32,7 @@ name = "tacticool gear closet" desc = "It's a storage unit for Tacticool gear." -/obj/structure/closet/gimmick/tacticool/New() +/obj/structure/closet/gimmick/tacticool/PopulateContents() ..() new /obj/item/clothing/glasses/eyepatch(src) new /obj/item/clothing/glasses/sunglasses(src) @@ -59,7 +59,7 @@ name = "red-team Thunderdome closet" icon_door = "red" -/obj/structure/closet/thunderdome/tdred/New() +/obj/structure/closet/thunderdome/tdred/PopulateContents() ..() for(var/i in 1 to 3) new /obj/item/clothing/suit/armor/tdome/red(src) @@ -78,7 +78,7 @@ name = "green-team Thunderdome closet" icon_door = "green" -/obj/structure/closet/thunderdome/tdgreen/New() +/obj/structure/closet/thunderdome/tdgreen/PopulateContents() ..() for(var/i in 1 to 3) new /obj/item/clothing/suit/armor/tdome/green(src) @@ -97,7 +97,7 @@ desc = "It's a storage unit for operational gear." icon_state = "syndicate" -/obj/structure/closet/malf/suits/New() +/obj/structure/closet/malf/suits/PopulateContents() ..() new /obj/item/weapon/tank/jetpack/void(src) new /obj/item/clothing/mask/breath(src) 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 ed368ba3da..801808f25e 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -5,7 +5,7 @@ desc = "It's a storage unit for formal clothing." icon_door = "black" -/obj/structure/closet/gmcloset/New() +/obj/structure/closet/gmcloset/PopulateContents() ..() new /obj/item/clothing/head/that(src) new /obj/item/device/radio/headset/headset_srv(src) @@ -33,7 +33,7 @@ desc = "It's a storage unit for foodservice garments and mouse traps." icon_door = "black" -/obj/structure/closet/chefcloset/New() +/obj/structure/closet/chefcloset/PopulateContents() ..() new /obj/item/clothing/under/waiter(src) new /obj/item/clothing/under/waiter(src) @@ -57,7 +57,7 @@ desc = "It's a storage unit for janitorial clothes and gear." icon_door = "mixed" -/obj/structure/closet/jcloset/New() +/obj/structure/closet/jcloset/PopulateContents() ..() new /obj/item/clothing/under/rank/janitor(src) new /obj/item/weapon/cartridge/janitor(src) @@ -81,7 +81,7 @@ desc = "It's a storage unit for courtroom apparel and items." icon_door = "blue" -/obj/structure/closet/lawcloset/New() +/obj/structure/closet/lawcloset/PopulateContents() ..() new /obj/item/clothing/under/lawyer/female(src) new /obj/item/clothing/under/lawyer/black(src) @@ -102,9 +102,7 @@ desc = "It's a storage unit for Nanotrasen-approved religious attire." icon_door = "black" -/obj/structure/closet/wardrobe/chaplain_black/New() - ..() - contents = list() +/obj/structure/closet/wardrobe/chaplain_black/PopulateContents() new /obj/item/clothing/under/rank/chaplain(src) new /obj/item/clothing/shoes/sneakers/black(src) new /obj/item/clothing/suit/nun(src) @@ -131,14 +129,14 @@ max_integrity = 70 horizontal = TRUE delivery_icon = "deliverycrate" + material_drop = /obj/item/stack/sheet/mineral/wood + material_drop_amount = 5 /obj/structure/closet/wardrobe/red name = "security wardrobe" icon_door = "red" -/obj/structure/closet/wardrobe/red/New() - ..() - contents = list() +/obj/structure/closet/wardrobe/red/PopulateContents() new /obj/item/clothing/suit/hooded/wintercoat/security(src) new /obj/item/weapon/storage/backpack/security(src) new /obj/item/weapon/storage/backpack/satchel/sec(src) @@ -161,9 +159,7 @@ name = "cargo wardrobe" icon_door = "orange" -/obj/structure/closet/wardrobe/cargotech/New() - ..() - contents = list() +/obj/structure/closet/wardrobe/cargotech/PopulateContents() new /obj/item/clothing/suit/hooded/wintercoat/cargo(src) for(var/i in 1 to 3) new /obj/item/clothing/under/rank/cargotech(src) @@ -179,9 +175,7 @@ name = "atmospherics wardrobe" icon_door = "atmos_wardrobe" -/obj/structure/closet/wardrobe/atmospherics_yellow/New() - ..() - contents = list() +/obj/structure/closet/wardrobe/atmospherics_yellow/PopulateContents() new /obj/item/weapon/storage/backpack/dufflebag/engineering(src) new /obj/item/weapon/storage/backpack/satchel/eng(src) new /obj/item/weapon/storage/backpack/industrial(src) @@ -197,9 +191,7 @@ name = "engineering wardrobe" icon_door = "yellow" -/obj/structure/closet/wardrobe/engineering_yellow/New() - ..() - contents = list() +/obj/structure/closet/wardrobe/engineering_yellow/PopulateContents() new /obj/item/weapon/storage/backpack/dufflebag/engineering(src) new /obj/item/weapon/storage/backpack/industrial(src) new /obj/item/weapon/storage/backpack/satchel/eng(src) @@ -217,9 +209,7 @@ /obj/structure/closet/wardrobe/white/medical name = "medical doctor's wardrobe" -/obj/structure/closet/wardrobe/white/medical/New() - ..() - contents = list() +/obj/structure/closet/wardrobe/white/medical/PopulateContents() new /obj/item/weapon/storage/backpack/dufflebag/med(src) new /obj/item/weapon/storage/backpack/medic(src) new /obj/item/weapon/storage/backpack/satchel/med(src) @@ -245,9 +235,7 @@ name = "robotics wardrobe" icon_door = "black" -/obj/structure/closet/wardrobe/robotics_black/New() - ..() - contents = list() +/obj/structure/closet/wardrobe/robotics_black/PopulateContents() new /obj/item/clothing/glasses/hud/diagnostic(src) new /obj/item/clothing/glasses/hud/diagnostic(src) new /obj/item/clothing/under/rank/roboticist(src) @@ -271,9 +259,7 @@ name = "chemistry wardrobe" icon_door = "white" -/obj/structure/closet/wardrobe/chemistry_white/New() - ..() - contents = list() +/obj/structure/closet/wardrobe/chemistry_white/PopulateContents() new /obj/item/clothing/under/rank/chemist(src) new /obj/item/clothing/under/rank/chemist(src) new /obj/item/clothing/shoes/sneakers/white(src) @@ -293,9 +279,7 @@ name = "genetics wardrobe" icon_door = "white" -/obj/structure/closet/wardrobe/genetics_white/New() - ..() - contents = list() +/obj/structure/closet/wardrobe/genetics_white/PopulateContents() new /obj/item/clothing/under/rank/geneticist(src) new /obj/item/clothing/under/rank/geneticist(src) new /obj/item/clothing/shoes/sneakers/white(src) @@ -313,9 +297,7 @@ name = "virology wardrobe" icon_door = "white" -/obj/structure/closet/wardrobe/virology_white/New() - ..() - contents = list() +/obj/structure/closet/wardrobe/virology_white/PopulateContents() new /obj/item/clothing/under/rank/virologist(src) new /obj/item/clothing/under/rank/virologist(src) new /obj/item/clothing/shoes/sneakers/white(src) @@ -334,9 +316,7 @@ name = "science wardrobe" icon_door = "white" -/obj/structure/closet/wardrobe/science_white/New() - ..() - contents = list() +/obj/structure/closet/wardrobe/science_white/PopulateContents() new /obj/item/weapon/storage/backpack/science(src) new /obj/item/weapon/storage/backpack/science(src) new /obj/item/weapon/storage/backpack/satchel/tox(src) @@ -358,9 +338,7 @@ name = "botanist wardrobe" icon_door = "green" -/obj/structure/closet/wardrobe/botanist/New() - ..() - contents = list() +/obj/structure/closet/wardrobe/botanist/PopulateContents() new /obj/item/weapon/storage/backpack/botany(src) new /obj/item/weapon/storage/backpack/botany(src) new /obj/item/weapon/storage/backpack/satchel/hyd(src) diff --git a/code/game/objects/structures/crates_lockers/closets/l3closet.dm b/code/game/objects/structures/crates_lockers/closets/l3closet.dm index df17705ae9..eb4a12c2de 100644 --- a/code/game/objects/structures/crates_lockers/closets/l3closet.dm +++ b/code/game/objects/structures/crates_lockers/closets/l3closet.dm @@ -3,7 +3,7 @@ desc = "It's a storage unit for level-3 biohazard gear." icon_state = "bio" -/obj/structure/closet/l3closet/New() +/obj/structure/closet/l3closet/PopulateContents() ..() new /obj/item/weapon/storage/bag/bio( src ) new /obj/item/clothing/suit/bio_suit/general( src ) @@ -13,9 +13,7 @@ /obj/structure/closet/l3closet/virology icon_state = "bio_viro" -/obj/structure/closet/l3closet/virology/New() - ..() - contents = list() +/obj/structure/closet/l3closet/virology/PopulateContents() new /obj/item/weapon/storage/bag/bio( src ) new /obj/item/clothing/suit/bio_suit/virology( src ) new /obj/item/clothing/head/bio_hood/virology( src ) @@ -24,9 +22,7 @@ /obj/structure/closet/l3closet/security icon_state = "bio_sec" -/obj/structure/closet/l3closet/security/New() - ..() - contents = list() +/obj/structure/closet/l3closet/security/PopulateContents() new /obj/item/clothing/suit/bio_suit/security( src ) new /obj/item/clothing/head/bio_hood/security( src ) @@ -34,9 +30,7 @@ /obj/structure/closet/l3closet/janitor icon_state = "bio_jan" -/obj/structure/closet/l3closet/janitor/New() - ..() - contents = list() +/obj/structure/closet/l3closet/janitor/PopulateContents() new /obj/item/clothing/suit/bio_suit/janitor( src ) new /obj/item/clothing/head/bio_hood/janitor( src ) @@ -44,9 +38,7 @@ /obj/structure/closet/l3closet/scientist icon_state = "bio_viro" -/obj/structure/closet/l3closet/scientist/New() - ..() - contents = list() +/obj/structure/closet/l3closet/scientist/PopulateContents() new /obj/item/weapon/storage/bag/bio( src ) new /obj/item/clothing/suit/bio_suit/scientist( src ) new /obj/item/clothing/head/bio_hood/scientist( 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 0a093039d8..9aabb97eae 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm @@ -1,12 +1,12 @@ /obj/structure/closet/secure_closet/bar name = "booze storage" - req_access = list(access_bar) + req_access = list(GLOB.access_bar) icon_state = "cabinet" resistance_flags = FLAMMABLE obj_integrity = 70 max_integrity = 70 -/obj/structure/closet/secure_closet/bar/New() +/obj/structure/closet/secure_closet/bar/PopulateContents() ..() 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/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm index cfdb3fdf5f..00822f26c1 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm @@ -1,9 +1,9 @@ /obj/structure/closet/secure_closet/quartermaster name = "\proper quartermaster's locker" - req_access = list(access_qm) + req_access = list(GLOB.access_qm) icon_state = "qm" -/obj/structure/closet/secure_closet/quartermaster/New() +/obj/structure/closet/secure_closet/quartermaster/PopulateContents() ..() new /obj/item/clothing/neck/cloak/qm(src) new /obj/item/clothing/under/rank/cargo(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 f770a3ba2e..f1c30a0bfb 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -1,9 +1,9 @@ /obj/structure/closet/secure_closet/engineering_chief name = "\proper chief engineer's locker" - req_access = list(access_ce) + req_access = list(GLOB.access_ce) icon_state = "ce" -/obj/structure/closet/secure_closet/engineering_chief/New() +/obj/structure/closet/secure_closet/engineering_chief/PopulateContents() ..() new /obj/item/clothing/neck/cloak/ce(src) new /obj/item/clothing/under/rank/chief_engineer(src) @@ -29,11 +29,11 @@ /obj/structure/closet/secure_closet/engineering_electrical name = "electrical supplies locker" - req_access = list(access_engine_equip) + req_access = list(GLOB.access_engine_equip) icon_state = "eng" icon_door = "eng_elec" -/obj/structure/closet/secure_closet/engineering_electrical/New() +/obj/structure/closet/secure_closet/engineering_electrical/PopulateContents() ..() new /obj/item/clothing/gloves/color/yellow(src) new /obj/item/clothing/gloves/color/yellow(src) @@ -46,11 +46,11 @@ /obj/structure/closet/secure_closet/engineering_welding name = "welding supplies locker" - req_access = list(access_engine_equip) + req_access = list(GLOB.access_engine_equip) icon_state = "eng" icon_door = "eng_weld" -/obj/structure/closet/secure_closet/engineering_welding/New() +/obj/structure/closet/secure_closet/engineering_welding/PopulateContents() ..() for(var/i in 1 to 3) new /obj/item/clothing/head/welding(src) @@ -59,10 +59,10 @@ /obj/structure/closet/secure_closet/engineering_personal name = "engineer's locker" - req_access = list(access_engine_equip) + req_access = list(GLOB.access_engine_equip) icon_state = "eng_secure" -/obj/structure/closet/secure_closet/engineering_personal/New() +/obj/structure/closet/secure_closet/engineering_personal/PopulateContents() ..() new /obj/item/device/radio/headset/headset_eng(src) new /obj/item/weapon/storage/toolbox/mechanical(src) @@ -75,10 +75,10 @@ /obj/structure/closet/secure_closet/atmospherics name = "\proper atmospheric technician's locker" - req_access = list(access_atmospherics) + req_access = list(GLOB.access_atmospherics) icon_state = "atmos" -/obj/structure/closet/secure_closet/atmospherics/New() +/obj/structure/closet/secure_closet/atmospherics/PopulateContents() ..() new /obj/item/device/radio/headset/headset_eng(src) new /obj/item/weapon/pipe_dispenser(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm index ba7c21e350..7c967c5be6 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm @@ -3,9 +3,9 @@ /obj/structure/closet/secure_closet/freezer/kitchen name = "kitchen Cabinet" - req_access = list(access_kitchen) + req_access = list(GLOB.access_kitchen) -/obj/structure/closet/secure_closet/freezer/kitchen/New() +/obj/structure/closet/secure_closet/freezer/kitchen/PopulateContents() ..() for(var/i = 0, i < 3, i++) new /obj/item/weapon/reagent_containers/food/condiment/flour(src) @@ -17,7 +17,7 @@ desc = "This refrigerator looks quite dusty, is there anything edible still inside?" req_access = list() -/obj/structure/closet/secure_closet/freezer/kitchen/maintenance/New() +/obj/structure/closet/secure_closet/freezer/kitchen/maintenance/PopulateContents() ..() for(var/i = 0, i < 5, i++) new /obj/item/weapon/reagent_containers/food/condiment/milk(src) @@ -32,14 +32,14 @@ /obj/structure/closet/secure_closet/freezer/meat name = "meat fridge" -/obj/structure/closet/secure_closet/freezer/meat/New() +/obj/structure/closet/secure_closet/freezer/meat/PopulateContents() ..() for(var/i = 0, i < 4, i++) new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/monkey(src) /obj/structure/closet/secure_closet/freezer/fridge name = "refrigerator" -/obj/structure/closet/secure_closet/freezer/fridge/New() +/obj/structure/closet/secure_closet/freezer/fridge/PopulateContents() ..() for(var/i = 0, i < 5, i++) new /obj/item/weapon/reagent_containers/food/condiment/milk(src) @@ -51,9 +51,9 @@ /obj/structure/closet/secure_closet/freezer/money name = "freezer" desc = "This contains cold hard cash." - req_access = list(access_heads_vault) + req_access = list(GLOB.access_heads_vault) -/obj/structure/closet/secure_closet/freezer/money/New() +/obj/structure/closet/secure_closet/freezer/money/PopulateContents() ..() for(var/i = 0, i < 3, i++) new /obj/item/stack/spacecash/c1000(src) @@ -65,8 +65,8 @@ /obj/structure/closet/secure_closet/freezer/cream_pie name = "cream pie closet" desc = "Contains pies filled with cream and/or custard, you sickos." - req_access = list(access_theatre) + req_access = list(GLOB.access_theatre) -/obj/structure/closet/secure_closet/freezer/pie/New() +/obj/structure/closet/secure_closet/freezer/pie/PopulateContents() ..() new /obj/item/weapon/reagent_containers/food/snacks/pie/cream(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm index 0cf694fecd..ed0e5588bf 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm @@ -1,9 +1,9 @@ /obj/structure/closet/secure_closet/hydroponics name = "botanist's locker" - req_access = list(access_hydroponics) + req_access = list(GLOB.access_hydroponics) icon_state = "hydro" -/obj/structure/closet/secure_closet/hydroponics/New() +/obj/structure/closet/secure_closet/hydroponics/PopulateContents() ..() new /obj/item/weapon/storage/bag/plants/portaseeder(src) new /obj/item/device/plant_analyzer(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 4fc298c86c..aaf40e634b 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -2,9 +2,9 @@ name = "medicine closet" desc = "Filled to the brim with medical junk." icon_state = "med" - req_access = list(access_medical) + req_access = list(GLOB.access_medical) -/obj/structure/closet/secure_closet/medical1/New() +/obj/structure/closet/secure_closet/medical1/PopulateContents() ..() new /obj/item/weapon/reagent_containers/glass/beaker(src) new /obj/item/weapon/reagent_containers/glass/beaker(src) @@ -24,9 +24,9 @@ /obj/structure/closet/secure_closet/medical2 name = "anesthetic closet" desc = "Used to knock people out." - req_access = list(access_surgery) + req_access = list(GLOB.access_surgery) -/obj/structure/closet/secure_closet/medical2/New() +/obj/structure/closet/secure_closet/medical2/PopulateContents() ..() for(var/i in 1 to 3) new /obj/item/weapon/tank/internals/anesthetic(src) @@ -35,10 +35,10 @@ /obj/structure/closet/secure_closet/medical3 name = "medical doctor's locker" - req_access = list(access_surgery) + req_access = list(GLOB.access_surgery) icon_state = "med_secure" -/obj/structure/closet/secure_closet/medical3/New() +/obj/structure/closet/secure_closet/medical3/PopulateContents() ..() new /obj/item/device/radio/headset/headset_med(src) new /obj/item/weapon/defibrillator/loaded(src) @@ -49,10 +49,10 @@ /obj/structure/closet/secure_closet/CMO name = "\proper chief medical officer's locker" - req_access = list(access_cmo) + req_access = list(GLOB.access_cmo) icon_state = "cmo" -/obj/structure/closet/secure_closet/CMO/New() +/obj/structure/closet/secure_closet/CMO/PopulateContents() ..() new /obj/item/clothing/neck/cloak/cmo(src) new /obj/item/weapon/storage/backpack/dufflebag/med(src) @@ -69,14 +69,14 @@ new /obj/item/weapon/storage/belt/medical(src) new /obj/item/device/assembly/flash/handheld(src) new /obj/item/weapon/reagent_containers/hypospray/CMO(src) - new /obj/item/device/autoimplanter/cmo(src) + new /obj/item/device/autosurgeon/cmo(src) new /obj/item/weapon/door_remote/chief_medical_officer(src) /obj/structure/closet/secure_closet/animal name = "animal control" - req_access = list(access_surgery) + req_access = list(GLOB.access_surgery) -/obj/structure/closet/secure_closet/animal/New() +/obj/structure/closet/secure_closet/animal/PopulateContents() ..() new /obj/item/device/assembly/signaler(src) for(var/i in 1 to 3) @@ -87,7 +87,7 @@ desc = "Store dangerous chemicals in here." icon_door = "chemical" -/obj/structure/closet/secure_closet/chemical/New() +/obj/structure/closet/secure_closet/chemical/PopulateContents() ..() new /obj/item/weapon/storage/box/pillbottles(src) new /obj/item/weapon/storage/box/pillbottles(src) 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 5ce6d85262..632dbd30e3 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/misc.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/misc.dm @@ -1,10 +1,10 @@ /obj/structure/closet/secure_closet/ertCom name = "commander's closet" desc = "Emergency Response Team equipment locker." - req_access = list(access_cent_captain) + req_access = list(GLOB.access_cent_captain) icon_state = "cap" -/obj/structure/closet/secure_closet/ertCom/New() +/obj/structure/closet/secure_closet/ertCom/PopulateContents() ..() new /obj/item/weapon/storage/firstaid/regular(src) new /obj/item/weapon/storage/box/handcuffs(src) @@ -22,10 +22,10 @@ /obj/structure/closet/secure_closet/ertSec name = "security closet" desc = "Emergency Response Team equipment locker." - req_access = list(access_cent_specops) + req_access = list(GLOB.access_cent_specops) icon_state = "hos" -/obj/structure/closet/secure_closet/ertSec/New() +/obj/structure/closet/secure_closet/ertSec/PopulateContents() ..() new /obj/item/weapon/storage/box/flashbangs(src) new /obj/item/weapon/storage/box/teargas(src) @@ -36,10 +36,10 @@ /obj/structure/closet/secure_closet/ertMed name = "medical closet" desc = "Emergency Response Team equipment locker." - req_access = list(access_cent_medical) + req_access = list(GLOB.access_cent_medical) icon_state = "cmo" -/obj/structure/closet/secure_closet/ertMed/New() +/obj/structure/closet/secure_closet/ertMed/PopulateContents() ..() new /obj/item/weapon/storage/firstaid/o2(src) new /obj/item/weapon/storage/firstaid/toxin(src) @@ -52,10 +52,10 @@ /obj/structure/closet/secure_closet/ertEngi name = "engineer closet" desc = "Emergency Response Team equipment locker." - req_access = list(access_cent_storage) + req_access = list(GLOB.access_cent_storage) icon_state = "ce" -/obj/structure/closet/secure_closet/ertEngi/New() +/obj/structure/closet/secure_closet/ertEngi/PopulateContents() ..() new /obj/item/stack/sheet/plasteel(src, 50) new /obj/item/stack/sheet/metal(src, 50) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm index 10ab9d09f5..c9638afadf 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm @@ -1,10 +1,10 @@ /obj/structure/closet/secure_closet/personal desc = "It's a secure locker for personnel. The first card swiped gains control." name = "personal closet" - req_access = list(access_all_personal_lockers) + req_access = list(GLOB.access_all_personal_lockers) var/registered_name = null -/obj/structure/closet/secure_closet/personal/New() +/obj/structure/closet/secure_closet/personal/PopulateContents() ..() if(prob(50)) new /obj/item/weapon/storage/backpack/dufflebag(src) @@ -17,9 +17,7 @@ /obj/structure/closet/secure_closet/personal/patient name = "patient's closet" -/obj/structure/closet/secure_closet/personal/patient/New() - ..() - contents.Cut() +/obj/structure/closet/secure_closet/personal/patient/PopulateContents() new /obj/item/clothing/under/color/white( src ) new /obj/item/clothing/shoes/sneakers/white( src ) @@ -29,9 +27,7 @@ obj_integrity = 70 max_integrity = 70 -/obj/structure/closet/secure_closet/personal/cabinet/New() - ..() - contents = list() +/obj/structure/closet/secure_closet/personal/cabinet/PopulateContents() new /obj/item/weapon/storage/backpack/satchel/leather/withwallet( src ) new /obj/item/device/radio/headset( src ) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm index 605145c7d3..684ba9af55 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm @@ -1,9 +1,9 @@ /obj/structure/closet/secure_closet/RD name = "\proper research director's locker" - req_access = list(access_rd) + req_access = list(GLOB.access_rd) icon_state = "rd" -/obj/structure/closet/secure_closet/RD/New() +/obj/structure/closet/secure_closet/RD/PopulateContents() ..() new /obj/item/clothing/neck/cloak/rd(src) new /obj/item/clothing/suit/bio_suit/scientist(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 a0abf38286..67989257f2 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -1,9 +1,9 @@ /obj/structure/closet/secure_closet/captains name = "\proper captain's locker" - req_access = list(access_captain) + req_access = list(GLOB.access_captain) icon_state = "cap" -/obj/structure/closet/secure_closet/captains/New() +/obj/structure/closet/secure_closet/captains/PopulateContents() ..() new /obj/item/clothing/suit/hooded/wintercoat/captain(src) if(prob(50)) @@ -32,10 +32,10 @@ /obj/structure/closet/secure_closet/hop name = "\proper head of personnel's locker" - req_access = list(access_hop) + req_access = list(GLOB.access_hop) icon_state = "hop" -/obj/structure/closet/secure_closet/hop/New() +/obj/structure/closet/secure_closet/hop/PopulateContents() ..() new /obj/item/clothing/neck/cloak/hop(src) new /obj/item/clothing/under/rank/head_of_personnel(src) @@ -56,10 +56,10 @@ /obj/structure/closet/secure_closet/hos name = "\proper head of security's locker" - req_access = list(access_hos) + req_access = list(GLOB.access_hos) icon_state = "hos" -/obj/structure/closet/secure_closet/hos/New() +/obj/structure/closet/secure_closet/hos/PopulateContents() ..() new /obj/item/clothing/neck/cloak/hos(src) new /obj/item/weapon/cartridge/hos(src) @@ -85,10 +85,10 @@ /obj/structure/closet/secure_closet/warden name = "\proper warden's locker" - req_access = list(access_armory) + req_access = list(GLOB.access_armory) icon_state = "warden" -/obj/structure/closet/secure_closet/warden/New() +/obj/structure/closet/secure_closet/warden/PopulateContents() ..() new /obj/item/device/radio/headset/headset_sec(src) new /obj/item/clothing/suit/armor/vest/warden(src) @@ -109,10 +109,10 @@ /obj/structure/closet/secure_closet/security name = "security officer's locker" - req_access = list(access_security) + req_access = list(GLOB.access_security) icon_state = "sec" -/obj/structure/closet/secure_closet/security/New() +/obj/structure/closet/secure_closet/security/PopulateContents() ..() new /obj/item/clothing/suit/armor/vest(src) new /obj/item/clothing/head/helmet/sec(src) @@ -123,47 +123,47 @@ /obj/structure/closet/secure_closet/security/sec -/obj/structure/closet/secure_closet/security/sec/New() +/obj/structure/closet/secure_closet/security/sec/PopulateContents() ..() new /obj/item/weapon/storage/belt/security/full(src) /obj/structure/closet/secure_closet/security/cargo -/obj/structure/closet/secure_closet/security/cargo/New() +/obj/structure/closet/secure_closet/security/cargo/PopulateContents() ..() new /obj/item/clothing/tie/armband/cargo(src) new /obj/item/device/encryptionkey/headset_cargo(src) /obj/structure/closet/secure_closet/security/engine -/obj/structure/closet/secure_closet/security/engine/New() +/obj/structure/closet/secure_closet/security/engine/PopulateContents() ..() new /obj/item/clothing/tie/armband/engine(src) new /obj/item/device/encryptionkey/headset_eng(src) /obj/structure/closet/secure_closet/security/science -/obj/structure/closet/secure_closet/security/science/New() +/obj/structure/closet/secure_closet/security/science/PopulateContents() ..() new /obj/item/clothing/tie/armband/science(src) new /obj/item/device/encryptionkey/headset_sci(src) /obj/structure/closet/secure_closet/security/med -/obj/structure/closet/secure_closet/security/med/New() +/obj/structure/closet/secure_closet/security/med/PopulateContents() ..() new /obj/item/clothing/tie/armband/medblue(src) new /obj/item/device/encryptionkey/headset_med(src) /obj/structure/closet/secure_closet/detective name = "\proper detective's cabinet" - req_access = list(access_forensics_lockers) + req_access = list(GLOB.access_forensics_lockers) icon_state = "cabinet" resistance_flags = FLAMMABLE obj_integrity = 70 max_integrity = 70 -/obj/structure/closet/secure_closet/detective/New() +/obj/structure/closet/secure_closet/detective/PopulateContents() ..() new /obj/item/clothing/under/rank/det(src) new /obj/item/clothing/suit/det_suit(src) @@ -185,29 +185,29 @@ /obj/structure/closet/secure_closet/injection name = "lethal injections" - req_access = list(access_hos) + req_access = list(GLOB.access_hos) -/obj/structure/closet/secure_closet/injection/New() +/obj/structure/closet/secure_closet/injection/PopulateContents() ..() for(var/i in 1 to 5) new /obj/item/weapon/reagent_containers/syringe/lethal/execution(src) /obj/structure/closet/secure_closet/brig name = "brig locker" - req_access = list(access_brig) + req_access = list(GLOB.access_brig) anchored = 1 var/id = null -/obj/structure/closet/secure_closet/brig/New() +/obj/structure/closet/secure_closet/brig/PopulateContents() ..() new /obj/item/clothing/under/rank/prisoner( src ) new /obj/item/clothing/shoes/sneakers/orange( src ) /obj/structure/closet/secure_closet/courtroom name = "courtroom locker" - req_access = list(access_court) + req_access = list(GLOB.access_court) -/obj/structure/closet/secure_closet/courtroom/New() +/obj/structure/closet/secure_closet/courtroom/PopulateContents() ..() new /obj/item/clothing/shoes/sneakers/brown(src) for(var/i in 1 to 3) @@ -219,10 +219,10 @@ /obj/structure/closet/secure_closet/armory1 name = "armory armor locker" - req_access = list(access_armory) + req_access = list(GLOB.access_armory) icon_state = "armory" -/obj/structure/closet/secure_closet/armory1/New() +/obj/structure/closet/secure_closet/armory1/PopulateContents() ..() new /obj/item/clothing/suit/armor/laserproof(src) for(var/i in 1 to 3) @@ -234,10 +234,10 @@ /obj/structure/closet/secure_closet/armory2 name = "armory ballistics locker" - req_access = list(access_armory) + req_access = list(GLOB.access_armory) icon_state = "armory" -/obj/structure/closet/secure_closet/armory2/New() +/obj/structure/closet/secure_closet/armory2/PopulateContents() ..() new /obj/item/weapon/storage/box/firingpins(src) for(var/i in 1 to 3) @@ -247,10 +247,10 @@ /obj/structure/closet/secure_closet/armory3 name = "armory energy gun locker" - req_access = list(access_armory) + req_access = list(GLOB.access_armory) icon_state = "armory" -/obj/structure/closet/secure_closet/armory3/New() +/obj/structure/closet/secure_closet/armory3/PopulateContents() ..() new /obj/item/weapon/storage/box/firingpins(src) new /obj/item/weapon/gun/energy/ionrifle(src) @@ -261,10 +261,10 @@ /obj/structure/closet/secure_closet/tac name = "armory tac locker" - req_access = list(access_armory) + req_access = list(GLOB.access_armory) icon_state = "tac" -/obj/structure/closet/secure_closet/tac/New() +/obj/structure/closet/secure_closet/tac/PopulateContents() ..() new /obj/item/weapon/gun/ballistic/automatic/wt550(src) new /obj/item/clothing/head/helmet/alt(src) @@ -273,10 +273,10 @@ /obj/structure/closet/secure_closet/lethalshots name = "shotgun lethal rounds" - req_access = list(access_armory) + req_access = list(GLOB.access_armory) icon_state = "tac" -/obj/structure/closet/secure_closet/lethalshots/New() +/obj/structure/closet/secure_closet/lethalshots/PopulateContents() ..() 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 76c7e8d3e2..c09f3d2ff7 100644 --- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm +++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm @@ -6,7 +6,7 @@ /obj/structure/closet/syndicate/personal desc = "It's a personal storage unit for operative gear." -/obj/structure/closet/syndicate/personal/New() +/obj/structure/closet/syndicate/personal/PopulateContents() ..() new /obj/item/clothing/under/syndicate(src) new /obj/item/clothing/shoes/sneakers/black(src) @@ -20,9 +20,7 @@ /obj/structure/closet/syndicate/nuclear desc = "It's a storage unit for a Syndicate boarding party." -/obj/structure/closet/syndicate/nuclear/New() - ..() - contents = list() +/obj/structure/closet/syndicate/nuclear/PopulateContents() for(var/i in 1 to 5) new /obj/item/ammo_box/magazine/m10mm(src) new /obj/item/weapon/storage/box/flashbangs(src) @@ -34,7 +32,7 @@ /obj/structure/closet/syndicate/resources desc = "An old, dusty locker." -/obj/structure/closet/syndicate/resources/New() +/obj/structure/closet/syndicate/resources/PopulateContents() ..() var/common_min = 30 //Minimum amount of minerals in the stack for common minerals var/common_max = 50 //Maximum amount of HONK in the stack for HONK common minerals @@ -99,9 +97,7 @@ /obj/structure/closet/syndicate/resources/everything desc = "It's an emergency storage closet for repairs." -/obj/structure/closet/syndicate/resources/everything/New() - ..() - contents = list() +/obj/structure/closet/syndicate/resources/everything/PopulateContents() var/list/resources = list( /obj/item/stack/sheet/metal, /obj/item/stack/sheet/glass, 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 3763a1ff9b..1b864d1813 100644 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm @@ -17,7 +17,7 @@ desc = "It's a storage unit for emergency breath masks and O2 tanks." icon_state = "emergency" -/obj/structure/closet/emcloset/New() +/obj/structure/closet/emcloset/PopulateContents() ..() if (prob(40)) @@ -63,7 +63,7 @@ desc = "It's a storage unit for fire-fighting supplies." icon_state = "fire" -/obj/structure/closet/firecloset/New() +/obj/structure/closet/firecloset/PopulateContents() ..() new /obj/item/clothing/suit/fire/firefighter(src) @@ -72,10 +72,7 @@ new /obj/item/weapon/extinguisher(src) new /obj/item/clothing/head/hardhat/red(src) -/obj/structure/closet/firecloset/full/New() - ..() - contents = list() - +/obj/structure/closet/firecloset/full/PopulateContents() new /obj/item/clothing/suit/fire/firefighter(src) new /obj/item/clothing/mask/gas(src) new /obj/item/device/flashlight(src) @@ -92,7 +89,7 @@ icon_state = "eng" icon_door = "eng_tool" -/obj/structure/closet/toolcloset/New() +/obj/structure/closet/toolcloset/PopulateContents() ..() if(prob(40)) new /obj/item/clothing/suit/hazardvest(src) @@ -135,7 +132,7 @@ icon_state = "eng" icon_door = "eng_rad" -/obj/structure/closet/radiation/New() +/obj/structure/closet/radiation/PopulateContents() ..() new /obj/item/device/geiger_counter(src) new /obj/item/clothing/suit/radiation(src) @@ -149,7 +146,7 @@ desc = "It's a storage unit for explosion-protective suits." icon_state = "bomb" -/obj/structure/closet/bombcloset/New() +/obj/structure/closet/bombcloset/PopulateContents() ..() new /obj/item/clothing/suit/bomb_suit( src ) new /obj/item/clothing/under/color/black( src ) @@ -162,9 +159,7 @@ desc = "It's a storage unit for explosion-protective suits." icon_state = "bomb" -/obj/structure/closet/bombclosetsecurity/New() - ..() - contents = list() +/obj/structure/closet/bombclosetsecurity/PopulateContents() new /obj/item/clothing/suit/bomb_suit/security( src ) new /obj/item/clothing/under/rank/security( src ) new /obj/item/clothing/shoes/sneakers/brown( src ) @@ -176,7 +171,7 @@ /obj/structure/closet/ammunitionlocker name = "ammunition locker" -/obj/structure/closet/ammunitionlocker/New() +/obj/structure/closet/ammunitionlocker/PopulateContents() ..() 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 1ac9b16ea4..7b1ff30b45 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -3,7 +3,7 @@ desc = "It's a storage unit for standard-issue Nanotrasen attire." icon_door = "blue" -/obj/structure/closet/wardrobe/New() +/obj/structure/closet/wardrobe/PopulateContents() ..() for(var/i in 1 to 3) new /obj/item/clothing/under/color/blue(src) @@ -15,9 +15,7 @@ name = "pink wardrobe" icon_door = "pink" -/obj/structure/closet/wardrobe/pink/New() - ..() - contents = list() +/obj/structure/closet/wardrobe/pink/PopulateContents() for(var/i in 1 to 3) new /obj/item/clothing/under/color/pink(src) for(var/i in 1 to 3) @@ -28,9 +26,7 @@ name = "black wardrobe" icon_door = "black" -/obj/structure/closet/wardrobe/black/New() - ..() - contents = list() +/obj/structure/closet/wardrobe/black/PopulateContents() for(var/i in 1 to 3) new /obj/item/clothing/under/color/black(src) if(prob(25)) @@ -54,9 +50,7 @@ name = "green wardrobe" icon_door = "green" -/obj/structure/closet/wardrobe/green/New() - ..() - contents = list() +/obj/structure/closet/wardrobe/green/PopulateContents() for(var/i in 1 to 3) new /obj/item/clothing/under/color/green(src) for(var/i in 1 to 3) @@ -71,9 +65,7 @@ desc = "It's a storage unit for Nanotrasen-regulation prisoner attire." icon_door = "orange" -/obj/structure/closet/wardrobe/orange/New() - ..() - contents = list() +/obj/structure/closet/wardrobe/orange/PopulateContents() for(var/i in 1 to 3) new /obj/item/clothing/under/rank/prisoner(src) for(var/i in 1 to 3) @@ -85,9 +77,7 @@ name = "yellow wardrobe" icon_door = "yellow" -/obj/structure/closet/wardrobe/yellow/New() - ..() - contents = list() +/obj/structure/closet/wardrobe/yellow/PopulateContents() for(var/i in 1 to 3) new /obj/item/clothing/under/color/yellow(src) for(var/i in 1 to 3) @@ -101,9 +91,7 @@ name = "white wardrobe" icon_door = "white" -/obj/structure/closet/wardrobe/white/New() - ..() - contents = list() +/obj/structure/closet/wardrobe/white/PopulateContents() for(var/i in 1 to 3) new /obj/item/clothing/under/color/white(src) for(var/i in 1 to 3) @@ -116,9 +104,7 @@ name = "pajama wardrobe" icon_door = "white" -/obj/structure/closet/wardrobe/pjs/New() - ..() - contents = list() +/obj/structure/closet/wardrobe/pjs/PopulateContents() new /obj/item/clothing/under/pj/red(src) new /obj/item/clothing/under/pj/red(src) new /obj/item/clothing/under/pj/blue(src) @@ -132,9 +118,7 @@ name = "grey wardrobe" icon_door = "grey" -/obj/structure/closet/wardrobe/grey/New() - ..() - contents = list() +/obj/structure/closet/wardrobe/grey/PopulateContents() for(var/i in 1 to 3) new /obj/item/clothing/under/color/grey(src) for(var/i in 1 to 3) @@ -160,9 +144,7 @@ name = "mixed wardrobe" icon_door = "mixed" -/obj/structure/closet/wardrobe/mixed/New() - ..() - contents = list() +/obj/structure/closet/wardrobe/mixed/PopulateContents() if(prob(40)) new /obj/item/clothing/suit/jacket(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 02394e4d5d..8724136b87 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -85,7 +85,7 @@ name = "blood freezer" desc = "A freezer containing packs of blood." -/obj/structure/closet/crate/freezer/blood/New() +/obj/structure/closet/crate/freezer/blood/PopulateContents() . = ..() new /obj/item/weapon/reagent_containers/blood/empty(src) new /obj/item/weapon/reagent_containers/blood/empty(src) @@ -102,7 +102,7 @@ name = "surplus prosthetic limbs" desc = "A crate containing an assortment of cheap prosthetic limbs." -/obj/structure/closet/crate/freezer/surplus_limbs/New() +/obj/structure/closet/crate/freezer/surplus_limbs/PopulateContents() . = ..() new /obj/item/bodypart/l_arm/robot/surplus(src) new /obj/item/bodypart/l_arm/robot/surplus(src) @@ -135,7 +135,7 @@ name = "\improper RCD crate" icon_state = "engi_crate" -/obj/structure/closet/crate/rcd/New() +/obj/structure/closet/crate/rcd/PopulateContents() ..() for(var/i in 1 to 4) new /obj/item/weapon/rcd_ammo(src) diff --git a/code/game/objects/structures/crates_lockers/crates/secure.dm b/code/game/objects/structures/crates_lockers/crates/secure.dm index 1ddb99b6fc..603dce4358 100644 --- a/code/game/objects/structures/crates_lockers/crates/secure.dm +++ b/code/game/objects/structures/crates_lockers/crates/secure.dm @@ -33,7 +33,7 @@ if(user) to_chat(user, "The crate's anti-tamper system activates!") var/message = "[ADMIN_LOOKUPFLW(user)] has detonated [src.name]." - bombers += message + GLOB.bombers += message message_admins(message) log_game("[key_name(user)] has detonated [src.name].") for(var/atom/movable/AM in src) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index ee54173f75..dfd2574bbb 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -207,7 +207,7 @@ playsound(src.loc, I.usesound, 50, 1) if(do_after(user, 30*I.toolspeed, target = src)) playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - new /obj/item/stack/sheet/mineral/wood(get_turf(src)) + new /obj/item/stack/sheet/mineral/wood(get_turf(src), 5) qdel(src) else if(istype(I, /obj/item/weapon/electronics/airlock)) @@ -238,15 +238,14 @@ return ..() //The captains display case requiring specops ID access is intentional. -//Intentional why? Because of this, the captain has to SMASH his own display case to get his own gun. WHY? -ktccd //The lab cage and captains display case do not spawn with electronics, which is why req_access is needed. /obj/structure/displaycase/captain alert = 1 start_showpiece_type = /obj/item/weapon/gun/energy/laser/captain - req_access = list(access_captain) + req_access = list(GLOB.access_captain) /obj/structure/displaycase/labcage name = "lab cage" desc = "A glass lab container for storing interesting creatures." start_showpiece_type = /obj/item/clothing/mask/facehugger/lamarr - req_access = list(access_rd) + req_access = list(GLOB.access_rd) diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm index 2eaa8e66c6..c072c052e5 100644 --- a/code/game/objects/structures/dresser.dm +++ b/code/game/objects/structures/dresser.dm @@ -18,16 +18,16 @@ return switch(choice) if("Underwear") - var/new_undies = input(user, "Select your underwear", "Changing") as null|anything in underwear_list + var/new_undies = input(user, "Select your underwear", "Changing") as null|anything in GLOB.underwear_list if(new_undies) H.underwear = new_undies if("Undershirt") - var/new_undershirt = input(user, "Select your undershirt", "Changing") as null|anything in undershirt_list + var/new_undershirt = input(user, "Select your undershirt", "Changing") as null|anything in GLOB.undershirt_list if(new_undershirt) H.undershirt = new_undershirt if("Socks") - var/new_socks = input(user, "Select your socks", "Changing") as null|anything in socks_list + var/new_socks = input(user, "Select your socks", "Changing") as null|anything in GLOB.socks_list if(new_socks) H.socks= new_socks diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index 8c7c248667..466be07c50 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -339,5 +339,5 @@ return ..() /obj/structure/falsewall/brass/ratvar_act() - if(ratvar_awakens) + if(GLOB.ratvar_awakens) obj_integrity = max_integrity diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index 18dcaa1d33..54e85e0eb7 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -44,7 +44,7 @@ icon = 'icons/obj/flora/pinetrees.dmi' icon_state = "pine_1" -/obj/structure/flora/tree/pine/New() +/obj/structure/flora/tree/pine/Initialize() icon_state = "pine_[rand(1, 3)]" ..() @@ -52,7 +52,7 @@ name = "xmas tree" icon_state = "pine_c" -/obj/structure/flora/tree/pine/xmas/New() +/obj/structure/flora/tree/pine/xmas/Initialize() ..() icon_state = "pine_c" @@ -64,7 +64,7 @@ icon = 'icons/misc/beach2.dmi' icon_state = "palm1" -/obj/structure/flora/tree/palm/New() +/obj/structure/flora/tree/palm/Initialize() ..() icon_state = pick("palm1","palm2") pixel_x = 0 @@ -75,10 +75,21 @@ icon_state = "festivus_pole" desc = "During last year's Feats of Strength the Research Director was able to suplex this passing immobile rod into a planter." -/obj/structure/flora/tree/dead/New() +/obj/structure/flora/tree/dead/Initialize() icon_state = "tree_[rand(1, 6)]" ..() +/obj/structure/flora/tree/jungle + name = "tree" + icon_state = "tree" + desc = "It's seriously hampering your view of the jungle." + icon = 'icons/obj/flora/jungletrees.dmi' + pixel_x = -48 + pixel_y = -20 + +/obj/structure/flora/tree/jungle/Initialize() + icon_state = "[icon_state][rand(1, 3)]" + ..() //grass /obj/structure/flora/grass @@ -89,7 +100,7 @@ /obj/structure/flora/grass/brown icon_state = "snowgrass1bb" -/obj/structure/flora/grass/brown/New() +/obj/structure/flora/grass/brown/Initialize() icon_state = "snowgrass[rand(1, 3)]bb" ..() @@ -97,14 +108,14 @@ /obj/structure/flora/grass/green icon_state = "snowgrass1gb" -/obj/structure/flora/grass/green/New() +/obj/structure/flora/grass/green/Initialize() icon_state = "snowgrass[rand(1, 3)]gb" ..() /obj/structure/flora/grass/both icon_state = "snowgrassall1" -/obj/structure/flora/grass/both/New() +/obj/structure/flora/grass/both/Initialize() icon_state = "snowgrassall[rand(1, 3)]" ..() @@ -116,7 +127,7 @@ icon_state = "snowbush1" anchored = 1 -/obj/structure/flora/bush/New() +/obj/structure/flora/bush/Initialize() icon_state = "snowbush[rand(1, 6)]" ..() @@ -127,7 +138,7 @@ icon = 'icons/obj/flora/ausflora.dmi' icon_state = "firstbush_1" -/obj/structure/flora/ausbushes/New() +/obj/structure/flora/ausbushes/Initialize() if(icon_state == "firstbush_1") icon_state = "firstbush_[rand(1, 4)]" ..() @@ -135,105 +146,105 @@ /obj/structure/flora/ausbushes/reedbush icon_state = "reedbush_1" -/obj/structure/flora/ausbushes/reedbush/New() +/obj/structure/flora/ausbushes/reedbush/Initialize() icon_state = "reedbush_[rand(1, 4)]" ..() /obj/structure/flora/ausbushes/leafybush icon_state = "leafybush_1" -/obj/structure/flora/ausbushes/leafybush/New() +/obj/structure/flora/ausbushes/leafybush/Initialize() icon_state = "leafybush_[rand(1, 3)]" ..() /obj/structure/flora/ausbushes/palebush icon_state = "palebush_1" -/obj/structure/flora/ausbushes/palebush/New() +/obj/structure/flora/ausbushes/palebush/Initialize() icon_state = "palebush_[rand(1, 4)]" ..() /obj/structure/flora/ausbushes/stalkybush icon_state = "stalkybush_1" -/obj/structure/flora/ausbushes/stalkybush/New() +/obj/structure/flora/ausbushes/stalkybush/Initialize() icon_state = "stalkybush_[rand(1, 3)]" ..() /obj/structure/flora/ausbushes/grassybush icon_state = "grassybush_1" -/obj/structure/flora/ausbushes/grassybush/New() +/obj/structure/flora/ausbushes/grassybush/Initialize() icon_state = "grassybush_[rand(1, 4)]" ..() /obj/structure/flora/ausbushes/fernybush icon_state = "fernybush_1" -/obj/structure/flora/ausbushes/fernybush/New() +/obj/structure/flora/ausbushes/fernybush/Initialize() icon_state = "fernybush_[rand(1, 3)]" ..() /obj/structure/flora/ausbushes/sunnybush icon_state = "sunnybush_1" -/obj/structure/flora/ausbushes/sunnybush/New() +/obj/structure/flora/ausbushes/sunnybush/Initialize() icon_state = "sunnybush_[rand(1, 3)]" ..() /obj/structure/flora/ausbushes/genericbush icon_state = "genericbush_1" -/obj/structure/flora/ausbushes/genericbush/New() +/obj/structure/flora/ausbushes/genericbush/Initialize() icon_state = "genericbush_[rand(1, 4)]" ..() /obj/structure/flora/ausbushes/pointybush icon_state = "pointybush_1" -/obj/structure/flora/ausbushes/pointybush/New() +/obj/structure/flora/ausbushes/pointybush/Initialize() icon_state = "pointybush_[rand(1, 4)]" ..() /obj/structure/flora/ausbushes/lavendergrass icon_state = "lavendergrass_1" -/obj/structure/flora/ausbushes/lavendergrass/New() +/obj/structure/flora/ausbushes/lavendergrass/Initialize() icon_state = "lavendergrass_[rand(1, 4)]" ..() /obj/structure/flora/ausbushes/ywflowers icon_state = "ywflowers_1" -/obj/structure/flora/ausbushes/ywflowers/New() +/obj/structure/flora/ausbushes/ywflowers/Initialize() icon_state = "ywflowers_[rand(1, 3)]" ..() /obj/structure/flora/ausbushes/brflowers icon_state = "brflowers_1" -/obj/structure/flora/ausbushes/brflowers/New() +/obj/structure/flora/ausbushes/brflowers/Initialize() icon_state = "brflowers_[rand(1, 3)]" ..() /obj/structure/flora/ausbushes/ppflowers icon_state = "ppflowers_1" -/obj/structure/flora/ausbushes/ppflowers/New() +/obj/structure/flora/ausbushes/ppflowers/Initialize() icon_state = "ppflowers_[rand(1, 3)]" ..() /obj/structure/flora/ausbushes/sparsegrass icon_state = "sparsegrass_1" -/obj/structure/flora/ausbushes/sparsegrass/New() +/obj/structure/flora/ausbushes/sparsegrass/Initialize() icon_state = "sparsegrass_[rand(1, 3)]" ..() /obj/structure/flora/ausbushes/fullgrass icon_state = "fullgrass_1" -/obj/structure/flora/ausbushes/fullgrass/New() +/obj/structure/flora/ausbushes/fullgrass/Initialize() icon_state = "fullgrass_[rand(1, 3)]" ..() @@ -251,7 +262,7 @@ /obj/item/weapon/twohanded/required/kirbyplants/equipped(mob/living/user) var/image/I = image(icon = 'icons/obj/flora/plants.dmi' , icon_state = src.icon_state, loc = user) I.override = 1 - user.add_alt_appearance("sneaking_mission", I, player_list) + user.add_alt_appearance("sneaking_mission", I, GLOB.player_list) ..() /obj/item/weapon/twohanded/required/kirbyplants/dropped(mob/living/user) @@ -261,7 +272,7 @@ /obj/item/weapon/twohanded/required/kirbyplants/random var/list/static/states -/obj/item/weapon/twohanded/required/kirbyplants/random/New() +/obj/item/weapon/twohanded/required/kirbyplants/random/Initialize() . = ..() if(!states) generate_states() @@ -295,7 +306,7 @@ resistance_flags = FIRE_PROOF density = 1 -/obj/structure/flora/rock/New() +/obj/structure/flora/rock/Initialize() ..() icon_state = "[icon_state][rand(1,3)]" @@ -303,6 +314,72 @@ icon_state = "lavarocks" desc = "A pile of rocks" -/obj/structure/flora/rock/pile/New() +/obj/structure/flora/rock/pile/Initialize() ..() icon_state = "[icon_state][rand(1,3)]" + +//Jungle grass + +/obj/structure/flora/grass/jungle + name = "jungle grass" + desc = "Thick alien flora." + icon = 'icons/obj/flora/jungleflora.dmi' + icon_state = "grassa" + + +/obj/structure/flora/grass/jungle/Initialize() + icon_state = "[icon_state][rand(1, 5)]" + ..() + +/obj/structure/flora/grass/jungle/b + icon_state = "grassb" + +//Jungle rocks + +/obj/structure/flora/rock/jungle + icon_state = "pile of rocks" + desc = "A pile of rocks." + icon_state = "rock" + icon = 'icons/obj/flora/jungleflora.dmi' + density = FALSE + +/obj/structure/flora/rock/jungle/Initialize() + ..() + icon_state = "[initial(icon_state)][rand(1,5)]" + + +//Jungle bushes + +/obj/structure/flora/junglebush + name = "bush" + icon = 'icons/obj/flora/jungleflora.dmi' + icon_state = "busha" + +/obj/structure/flora/junglebush/Initialize() + icon_state = "[icon_state][rand(1, 3)]" + ..() + +/obj/structure/flora/junglebush/b + icon_state = "bushb" + +/obj/structure/flora/junglebush/c + icon_state = "bushc" + +/obj/structure/flora/junglebush/large + icon_state = "bush" + icon = 'icons/obj/flora/largejungleflora.dmi' + pixel_x = -16 + pixel_y = -12 + layer = ABOVE_ALL_MOB_LAYER + +/obj/structure/flora/rock/pile/largejungle + name = "rocks" + icon_state = "rocks" + icon = 'icons/obj/flora/largejungleflora.dmi' + density = FALSE + pixel_x = -16 + pixel_y = -16 + +/obj/structure/flora/rock/pile/largejungle/Initialize() + ..() + icon_state = "[initial(icon_state)][rand(1,3)]" \ No newline at end of file diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index 378f5030bf..f1a808938e 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -106,40 +106,21 @@ travel the stars with a single declaration: \"Yeah go do whatever.\" Though you are bound to the one who created you, it is customary in your society to repeat those same words to newborn \ golems, so that no golem may ever be forced to serve again.
    " -/obj/effect/mob_spawn/human/golem/New(loc, datum/species/golem/species = null, has_owner = FALSE, mob/creator = null) +/obj/effect/mob_spawn/human/golem/Initialize(mapload, datum/species/golem/species = null, has_owner = FALSE, mob/creator = null) ..() if(species) - name += " ([initial(species.id)])" + name += " ([initial(species.prefix)])" mob_species = species var/area/A = get_area(src) - if(A) - notify_ghosts("\A [initial(species.id)] golem shell has been completed in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE) + if(!mapload && A) + notify_ghosts("\A [initial(species.prefix)] golem shell has been completed in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE) if(has_owner && creator) flavour_text = "You are a golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. \ Serve [creator], and assist [creator.p_them()] in completing [creator.p_their()] goals at any cost." owner = creator /obj/effect/mob_spawn/human/golem/special(mob/living/new_spawn) - var/golem_surname = pick(golem_names) - // 3% chance that our golem has a human surname, because - // cultural contamination - if(prob(3)) - golem_surname = pick(last_names) - var/datum/species/golem/X = mob_species - var/golem_forename = initial(X.id) - - // The id of golem species is either their material "diamond","gold", - // or just "golem" for the plain ones. So we're using it for naming. - - if(golem_forename == "golem") - golem_forename = "iron" - - new_spawn.real_name = "[capitalize(golem_forename)] [golem_surname]" - // This means golems have names like Iron Forge, or Diamond Quarry - // also a tiny chance of being called "Plasma Meme" - // which is clearly a feature - to_chat(new_spawn, "[initial(X.info_text)]") if(!owner) to_chat(new_spawn, "Build golem shells in the autolathe, and feed refined mineral sheets to the shells to bring them to life! You are generally a peaceful group unless provoked.") @@ -151,6 +132,7 @@ if(ishuman(new_spawn)) var/mob/living/carbon/human/H = new_spawn H.set_cloned_appearance() + H.real_name = H.dna.species.random_name() /obj/effect/mob_spawn/human/golem/adamantine name = "dust-caked golem shell" diff --git a/code/game/objects/structures/guncase.dm b/code/game/objects/structures/guncase.dm index 42a6664364..077e405616 100644 --- a/code/game/objects/structures/guncase.dm +++ b/code/game/objects/structures/guncase.dm @@ -17,15 +17,16 @@ if(mapload) for(var/obj/item/I in loc.contents) if(istype(I, gun_category)) - I.loc = src + I.forceMove(src) if(contents.len >= capacity) break update_icon() /obj/structure/guncase/update_icon() cut_overlays() - for(var/i = contents.len, i >= 1, i--) - add_overlay(image(icon = src.icon, icon_state = "[case_type]", pixel_x = 4 * (i -1) )) + if(case_type && LAZYLEN(contents)) + for(var/i in 1 to contents.len) + add_overlay(image(icon = src.icon, icon_state = "[case_type]", pixel_x = 3 * (i - 1) )) if(open) add_overlay("[icon_state]_open") else @@ -34,14 +35,16 @@ /obj/structure/guncase/attackby(obj/item/I, mob/user, params) if(iscyborg(user) || isalien(user)) return - if(istype(I, gun_category)) - if(contents.len < capacity && open) + if(istype(I, gun_category) && open) + if(LAZYLEN(contents) < capacity) if(!user.drop_item()) return - contents += I + I.forceMove(src) to_chat(user, "You place [I] in [src].") update_icon() - return + else + to_chat(user, "[src] is full.") + return else if(user.a_intent != INTENT_HARM) open = !open @@ -62,9 +65,10 @@ var/dat = {"

    Stored Guns

    "} - for(var/i = contents.len, i >= 1, i--) - var/obj/item/I = contents[i] - dat += "[I.name]
    " + if(LAZYLEN(contents)) + for(var/i in 1 to contents.len) + var/obj/item/I = contents[i] + dat += "[I.name]
    " dat += "
    " var/datum/browser/popup = new(user, "gunlocker", "
    [name]
    ", 350, 300) @@ -76,7 +80,7 @@ var/obj/item/O = locate(href_list["retrieve"]) in contents if(!O || !istype(O)) return - if(!usr.canUseTopic(src)) + if(!usr.canUseTopic(src) || !open) return if(ishuman(usr)) if(!usr.put_in_hands(O)) diff --git a/code/game/objects/structures/ladders.dm b/code/game/objects/structures/ladders.dm index 9db8b4e07e..ec82b45a1f 100644 --- a/code/game/objects/structures/ladders.dm +++ b/code/game/objects/structures/ladders.dm @@ -13,20 +13,32 @@ desc = "An extremely sturdy metal ladder." -/obj/structure/ladder/New() - spawn(8) - for(var/obj/structure/ladder/L in world) - if(L.id == id) - if(L.height == (height - 1)) - down = L - continue - if(L.height == (height + 1)) - up = L - continue +/obj/structure/ladder/Initialize(mapload) + if(!initialized) + GLOB.ladders += src + ..() + if(mapload) + return TRUE + update_link() + +/obj/structure/ladder/Destroy() + GLOB.ladders -= src + . = ..() + +/obj/structure/ladder/proc/update_link() + for(var/obj/structure/ladder/L in GLOB.ladders) + if(L.id == id) + if(L.height == (height - 1)) + down = L + continue + if(L.height == (height + 1)) + up = L + continue + + if(up && down) //if both our connections are filled + break + update_icon() - if(up && down) //if both our connections are filled - break - update_icon() /obj/structure/ladder/update_icon() if(up && down) diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 312f6c32dc..ba859d5952 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -9,7 +9,7 @@ obj_integrity = 50 max_integrity = 50 layer = LATTICE_LAYER //under pipes - var/obj/item/stack/rods/stored + var/number_of_rods = 1 canSmoothWith = list(/obj/structure/lattice, /turf/open/floor, /turf/closed/wall, @@ -17,26 +17,20 @@ smooth = SMOOTH_MORE // flags = CONDUCT -/obj/structure/lattice/New() +/obj/structure/lattice/Initialize(mapload) ..() - for(var/obj/structure/lattice/LAT in src.loc) + for(var/obj/structure/lattice/LAT in loc) if(LAT != src) - qdel(LAT) - stored = new/obj/item/stack/rods(src) - -/obj/structure/lattice/Destroy() - qdel(stored) - stored = null - return ..() + QDEL_IN(LAT, 0) /obj/structure/lattice/blob_act(obj/structure/blob/B) return /obj/structure/lattice/ratvar_act() if(IsEven(x + y)) - new/obj/structure/lattice/clockwork(loc) + new /obj/structure/lattice/clockwork(loc) else - new/obj/structure/lattice/clockwork/large(loc) + new /obj/structure/lattice/clockwork/large(loc) /obj/structure/lattice/attackby(obj/item/C, mob/user, params) if(istype(C, /obj/item/weapon/wirecutters)) @@ -48,8 +42,7 @@ /obj/structure/lattice/deconstruct(disassembled = TRUE) if(!(flags & NODECONSTRUCT)) - stored.forceMove(get_turf(src)) - stored = null + new /obj/item/stack/rods(get_turf(src), number_of_rods) qdel(src) /obj/structure/lattice/singularity_pull(S, current_size) @@ -61,15 +54,15 @@ desc = "A lightweight support lattice. These hold the Justicar's station together." icon = 'icons/obj/smooth_structures/lattice_clockwork.dmi' -/obj/structure/lattice/clockwork/New() +/obj/structure/lattice/clockwork/Initialize(mapload) ..() ratvar_act() /obj/structure/lattice/clockwork/ratvar_act() if(IsOdd(x+y)) - new/obj/structure/lattice/clockwork/large(loc) + new /obj/structure/lattice/clockwork/large(loc) // deletes old one -/obj/structure/lattice/clockwork/large/New() +/obj/structure/lattice/clockwork/large/Initialize(mapload) ..() icon = 'icons/obj/smooth_structures/lattice_clockwork_large.dmi' pixel_x = -9 @@ -77,23 +70,19 @@ /obj/structure/lattice/clockwork/large/ratvar_act() if(IsEven(x + y)) - new/obj/structure/lattice/clockwork(loc) + new /obj/structure/lattice/clockwork(loc) /obj/structure/lattice/catwalk name = "catwalk" desc = "A catwalk for easier EVA maneuvering and cable placement." icon = 'icons/obj/smooth_structures/catwalk.dmi' icon_state = "catwalk" + number_of_rods = 2 smooth = SMOOTH_TRUE canSmoothWith = null -/obj/structure/lattice/catwalk/New() - ..() - stored.amount++ - stored.update_icon() - /obj/structure/lattice/catwalk/ratvar_act() - new/obj/structure/lattice/catwalk/clockwork(loc) + new /obj/structure/lattice/catwalk/clockwork(loc) /obj/structure/lattice/catwalk/Move() var/turf/T = loc @@ -111,7 +100,7 @@ name = "clockwork catwalk" icon = 'icons/obj/smooth_structures/catwalk_clockwork.dmi' -/obj/structure/lattice/catwalk/clockwork/New() +/obj/structure/lattice/catwalk/clockwork/Initialize(mapload) ..() new /obj/effect/overlay/temp/ratvar/floor/catwalk(loc) new /obj/effect/overlay/temp/ratvar/beam/catwalk(loc) diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index 76e00ae67a..1dad6b094f 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -25,7 +25,7 @@ //handle facial hair (if necessary) if(H.gender == MALE) - var/new_style = input(user, "Select a facial hair style", "Grooming") as null|anything in facial_hair_styles_list + var/new_style = input(user, "Select a facial hair style", "Grooming") as null|anything in GLOB.facial_hair_styles_list if(userloc != H.loc) return //no tele-grooming if(new_style) @@ -34,7 +34,7 @@ H.facial_hair_style = "Shaved" //handle normal hair - var/new_style = input(user, "Select a hair style", "Grooming") as null|anything in hair_styles_list + var/new_style = input(user, "Select a hair style", "Grooming") as null|anything in GLOB.hair_styles_list if(userloc != H.loc) return //no tele-grooming if(new_style) @@ -90,7 +90,7 @@ name = "magic mirror" desc = "Turn and face the strange... face." icon_state = "magic_mirror" - var/list/races_blacklist = list("skeleton", "agent", "angel", "military_synth") + var/list/races_blacklist = list("skeleton", "agent", "angel", "military_synth", "memezombie") var/list/choosable_races = list() /obj/structure/mirror/magic/New() @@ -102,7 +102,7 @@ ..() /obj/structure/mirror/magic/lesser/New() - choosable_races = roundstart_species + choosable_races = GLOB.roundstart_species ..() /obj/structure/mirror/magic/badmin/New() @@ -140,7 +140,7 @@ if("race") var/newrace var/racechoice = input(H, "What are we again?", "Race change") as null|anything in choosable_races - newrace = species_list[racechoice] + newrace = GLOB.species_list[racechoice] if(!newrace) return @@ -149,7 +149,7 @@ H.set_species(newrace, icon_update=0) if(H.dna.species.use_skintones) - var/new_s_tone = input(user, "Choose your skin tone:", "Race change") as null|anything in skin_tones + var/new_s_tone = input(user, "Choose your skin tone:", "Race change") as null|anything in GLOB.skin_tones if(new_s_tone) H.skin_tone = new_s_tone @@ -223,4 +223,4 @@ curse(user) /obj/structure/mirror/magic/proc/curse(mob/living/user) - return \ No newline at end of file + return diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 3b9efb6410..b388fd78cf 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -147,7 +147,7 @@ /* * Crematorium */ -var/global/list/crematoriums = new/list() +GLOBAL_LIST_EMPTY(crematoriums) /obj/structure/bodycontainer/crematorium name = "crematorium" desc = "A human incinerator. Works well on barbeque nights." @@ -160,14 +160,14 @@ var/global/list/crematoriums = new/list() return /obj/structure/bodycontainer/crematorium/Destroy() - crematoriums.Remove(src) + GLOB.crematoriums.Remove(src) return ..() /obj/structure/bodycontainer/crematorium/New() connected = new/obj/structure/tray/c_tray(src) connected.connected = src - crematoriums.Add(src) + GLOB.crematoriums.Add(src) ..() /obj/structure/bodycontainer/crematorium/update_icon() diff --git a/code/game/objects/structures/musician.dm b/code/game/objects/structures/musician.dm index 4ebb05b5b8..1ceb91ccd9 100644 --- a/code/game/objects/structures/musician.dm +++ b/code/game/objects/structures/musician.dm @@ -182,6 +182,27 @@ popup.set_title_image(user.browse_rsc_icon(instrumentObj.icon, instrumentObj.icon_state)) popup.open() +/datum/song/proc/ParseSong(text) + set waitfor = FALSE + //split into lines + lines = splittext(text, "\n") + if(lines.len) + if(copytext(lines[1],1,6) == "BPM: ") + tempo = sanitize_tempo(600 / text2num(copytext(lines[1],6))) + lines.Cut(1,2) + else + tempo = sanitize_tempo(5) // default 120 BPM + if(lines.len > 50) + to_chat(usr, "Too many lines!") + lines.Cut(51) + var/linenum = 1 + for(var/l in lines) + if(lentext(l) > 50) + to_chat(usr, "Line [linenum] too long!") + lines.Remove(l) + else + linenum++ + updateDialog(usr) // make sure updates when complete /datum/song/Topic(href, href_list) if(!usr.canUseTopic(instrumentObj)) @@ -208,26 +229,7 @@ if(cont == "no") break while(lentext(t) > 3072) - - //split into lines - spawn() - lines = splittext(t, "\n") - if(copytext(lines[1],1,6) == "BPM: ") - tempo = sanitize_tempo(600 / text2num(copytext(lines[1],6))) - lines.Cut(1,2) - else - tempo = sanitize_tempo(5) // default 120 BPM - if(lines.len > 50) - to_chat(usr, "Too many lines!") - lines.Cut(51) - var/linenum = 1 - for(var/l in lines) - if(lentext(l) > 50) - to_chat(usr, "Line [linenum] too long!") - lines.Remove(l) - else - linenum++ - updateDialog(usr) // make sure updates when complete + ParseSong(t) else if(href_list["help"]) help = text2num(href_list["help"]) - 1 diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index 1a5982821d..5122d877ef 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -90,39 +90,39 @@ /obj/structure/noticeboard/captain name = "Captain's Notice Board" desc = "Important notices from the Captain." - req_access = list(access_captain) + req_access = list(GLOB.access_captain) /obj/structure/noticeboard/hop name = "Head of Personnel's Notice Board" desc = "Important notices from the Head of Personnel." - req_access = list(access_hop) + req_access = list(GLOB.access_hop) /obj/structure/noticeboard/ce name = "Chief Engineer's Notice Board" desc = "Important notices from the Chief Engineer." - req_access = list(access_ce) + req_access = list(GLOB.access_ce) /obj/structure/noticeboard/hos name = "Head of Security's Notice Board" desc = "Important notices from the Head of Security." - req_access = list(access_hos) + req_access = list(GLOB.access_hos) /obj/structure/noticeboard/cmo name = "Chief Medical Officer's Notice Board" desc = "Important notices from the Chief Medical Officer." - req_access = list(access_cmo) + req_access = list(GLOB.access_cmo) /obj/structure/noticeboard/rd name = "Research Director's Notice Board" desc = "Important notices from the Research Director." - req_access = list(access_rd) + req_access = list(GLOB.access_rd) /obj/structure/noticeboard/qm name = "Quartermaster's Notice Board" desc = "Important notices from the Quartermaster." - req_access = list(access_qm) + req_access = list(GLOB.access_qm) /obj/structure/noticeboard/staff name = "Staff Notice Board" desc = "Important notices from the heads of staff." - req_access = list(access_heads) + req_access = list(GLOB.access_heads) diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/petrified_statue.dm similarity index 97% rename from code/game/objects/structures/crates_lockers/closets/statue.dm rename to code/game/objects/structures/petrified_statue.dm index 016ed5a497..421bc0d699 100644 --- a/code/game/objects/structures/crates_lockers/closets/statue.dm +++ b/code/game/objects/structures/petrified_statue.dm @@ -82,9 +82,7 @@ var/obj/structure/statue/petrified/S = new(loc, src, statue_timer) S.name = "statue of [name]" bleedsuppress = 1 - S.icon = icon - S.icon_state = icon_state - S.copy_overlays(overlays) + S.copy_overlays(src) var/newcolor = list(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0)) S.add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY) return 1 diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index cd52610be2..a1a2ea65ba 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -147,6 +147,7 @@ FLOOR SAFES if(open) if(P && in_range(src, user)) user.put_in_hands(P) + space -= P.w_class updateUsrDialog() diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index e6eff359b1..11d20a2dc1 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -134,6 +134,11 @@ Cargo(brown), Science(purple), Escape(red and white), and Medbay(blue).\nIn the center of the station, you see the Bridge(dark blue).\n\ Around those, you see Hallways/Entrances(light grey), Public Areas(grey), and Maintenance(dark grey)." +/obj/structure/sign/map/left/ceres + icon_state = "map-CS" + desc = "A framed picture of the station.\nClockwise from the top, you see Security (red), Dorms (light-green), Bridge (dark-blue), AI Core (gray), \ + Cargo (brown), Medbay (blue), Arrivals/Departures(orange/cyan), Research (purple), Service (dark-green), and Engineering in the center (yellow)." + /obj/structure/sign/securearea name = "\improper SECURE AREA" desc = "A warning sign which reads 'SECURE AREA'." @@ -241,6 +246,11 @@ desc = "A sign labelling an area as a place where xenobiological entities are researched." icon_state = "xenobio" +/obj/structure/sign/enginesafety + name = "\improper ENGINEERING SAFETY" + desc = "A sign detailing the various safety protocols when working on-site to ensure a safe shift." + icon_state = "safety" + /obj/structure/sign/directions/science name = "science department" desc = "A direction sign, pointing out which way the Science department is." @@ -265,3 +275,13 @@ name = "escape arm" desc = "A direction sign, pointing out which way the escape shuttle dock is." icon_state = "direction_evac" + +/obj/structure/sign/directions/supply + name = "cargo bay" + desc = "A direction sign, pointing out which way the Cargo Bay is." + icon_state = "direction_supply" + +/obj/structure/sign/directions/command + name = "command department" + desc = "A direction sign, pointing out which way the Command department is." + icon_state = "direction_bridge" diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index 1987a4699e..f5defdab50 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -10,7 +10,7 @@ anchored = 0 obj_integrity = 100 max_integrity = 100 - var/oreAmount = 7 + var/oreAmount = 5 var/material_drop_type = /obj/item/stack/sheet/metal CanAtmosPass = ATMOS_PASS_DENSITY diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 79224863e8..c42b61a622 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -366,7 +366,7 @@ /obj/structure/table/optable/New() ..() - for(var/dir in cardinal) + for(var/dir in GLOB.cardinal) computer = locate(/obj/machinery/computer/operating, get_step(src, dir)) if(computer) computer.table = src diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index f5cc3da64f..12ad7eb2cc 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -69,7 +69,7 @@ update_icon() /obj/structure/tank_dispenser/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) + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "tank_dispenser", name, 275, 100, master_ui, state) diff --git a/code/game/objects/structures/transit_tubes/transit_tube.dm b/code/game/objects/structures/transit_tubes/transit_tube.dm index 135f5ca02f..eae2041a31 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube.dm @@ -129,7 +129,7 @@ /obj/structure/transit_tube/proc/generate_tube_overlays() for(var/direction in tube_dirs) - if(direction in diagonals) + if(direction in GLOB.diagonals) if(direction & NORTH) create_tube_overlay(direction ^ 3, NORTH) diff --git a/code/game/objects/structures/traps.dm b/code/game/objects/structures/traps.dm index 2b32864aec..90500f14db 100644 --- a/code/game/objects/structures/traps.dm +++ b/code/game/objects/structures/traps.dm @@ -1,5 +1,5 @@ /obj/structure/trap - name = "IT'S A TARP" + name = "IT'S A TRAP" desc = "stepping on me is a guaranteed bad day" icon = 'icons/obj/hand_of_god_structures.dmi' icon_state = "trap" diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 9aabba3ed8..d5bcb8b60b 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -546,7 +546,7 @@ return ..() /obj/structure/window/reinforced/clockwork/ratvar_act() - if(ratvar_awakens) + if(GLOB.ratvar_awakens) obj_integrity = max_integrity update_icon() diff --git a/code/game/say.dm b/code/game/say.dm index 172bfc0fd3..efad2f105f 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -3,7 +3,7 @@ This file has the basic atom/movable level speech procs. And the base of the send_speech() proc, which is the core of saycode. */ -var/list/freqtospan = list( +GLOBAL_LIST_INIT(freqtospan, list( "1351" = "sciradio", "1355" = "medradio", "1357" = "engradio", @@ -13,33 +13,38 @@ var/list/freqtospan = list( "1353" = "comradio", "1447" = "aiprivradio", "1213" = "syndradio", - "1337" = "centcomradio" - ) + "1337" = "centcomradio", + "1215" = "redteamradio", + "1217" = "blueteamradio" + )) -/atom/movable/proc/say(message) +/atom/movable/proc/say(message, datum/language/language = null) if(!can_speak()) return if(message == "" || !message) return var/list/spans = get_spans() - send_speech(message, 7, src, , spans) + if(!language) + language = get_default_language() + send_speech(message, 7, src, , spans, message_language=language) -/atom/movable/proc/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans) +/atom/movable/proc/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) return /atom/movable/proc/can_speak() return 1 -/atom/movable/proc/send_speech(message, range = 7, obj/source = src, bubble_type, list/spans) - var/rendered = compose_message(src, languages_spoken, message, , spans) - for(var/atom/movable/AM in get_hearers_in_view(range, src)) - AM.Hear(rendered, src, languages_spoken, message, , spans) +/atom/movable/proc/send_speech(message, range = 7, obj/source = src, bubble_type, list/spans, datum/language/message_language = null, message_mode) + var/rendered = compose_message(src, message_language, message, , spans) + for(var/_AM in get_hearers_in_view(range, source)) + var/atom/movable/AM = _AM + AM.Hear(rendered, src, message_language, message, , spans) //To get robot span classes, stuff like that. /atom/movable/proc/get_spans() return list() -/atom/movable/proc/compose_message(atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans) +/atom/movable/proc/compose_message(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode) //This proc uses text() because it is faster than appending strings. Thanks BYOND. //Basic span var/spanpart1 = "" @@ -48,13 +53,13 @@ var/list/freqtospan = list( //Radio freq/name display var/freqpart = radio_freq ? "\[[get_radio_name(radio_freq)]\] " : "" //Speaker name - var/namepart = "[speaker.GetVoice()][speaker.get_alt_name()]" + var/namepart = "[speaker.GetVoice()][speaker.get_alt_name()]" //End name span. var/endspanpart = "" //Message - var/messagepart = " [lang_treat(speaker, message_langs, raw_message, spans)]" + var/messagepart = " [lang_treat(speaker, message_language, raw_message, spans, message_mode)]" - return "[spanpart1][spanpart2][freqpart][compose_track_href(speaker, namepart)][namepart][compose_job(speaker, message_langs, raw_message, radio_freq)][endspanpart][messagepart]" + return "[spanpart1][spanpart2][freqpart][compose_track_href(speaker, namepart)][namepart][compose_job(speaker, message_language, raw_message, radio_freq)][endspanpart][messagepart]" /atom/movable/proc/compose_track_href(atom/movable/speaker, message_langs, raw_message, radio_freq) return "" @@ -62,7 +67,7 @@ var/list/freqtospan = list( /atom/movable/proc/compose_job(atom/movable/speaker, message_langs, raw_message, radio_freq) return "" -/atom/movable/proc/say_quote(input, list/spans=list()) +/atom/movable/proc/say_quote(input, list/spans=list(), message_mode) if(!input) return "says, \"...\"" //not the best solution, but it will stop a large number of runtimes. The cause is somewhere in the Tcomms code var/ending = copytext(input, length(input)) @@ -77,46 +82,34 @@ var/list/freqtospan = list( return "[verb_say], \"[input]\"" -/atom/movable/proc/lang_treat(atom/movable/speaker, message_langs, raw_message, list/spans) - if(languages_understood & message_langs) +/atom/movable/proc/lang_treat(atom/movable/speaker, datum/language/language, raw_message, list/spans, message_mode) + if(has_language(language)) var/atom/movable/AM = speaker.GetSource() if(AM) //Basically means "if the speaker is virtual" if(AM.verb_say != speaker.verb_say || AM.verb_ask != speaker.verb_ask || AM.verb_exclaim != speaker.verb_exclaim || AM.verb_yell != speaker.verb_yell) //If the saymod was changed - return speaker.say_quote(raw_message, spans) - return AM.say_quote(raw_message, spans) + return speaker.say_quote(raw_message, spans, message_mode) + return AM.say_quote(raw_message, spans, message_mode) else - return speaker.say_quote(raw_message, spans) - else if((message_langs & HUMAN) || (message_langs & RATVAR)) //it's human or ratvar language + return speaker.say_quote(raw_message, spans, message_mode) + else if(language) var/atom/movable/AM = speaker.GetSource() - if(message_langs & HUMAN) - raw_message = stars(raw_message) - if(message_langs & RATVAR) - raw_message = text2ratvar(raw_message) + var/datum/language/D = new language + raw_message = D.scramble(raw_message) if(AM) - return AM.say_quote(raw_message, spans) + return AM.say_quote(raw_message, spans, message_mode) else - return speaker.say_quote(raw_message, spans) - else if(message_langs & MONKEY) - return "chimpers." - else if(message_langs & ALIEN) - return "hisses." - else if(message_langs & ROBOT) - return "beeps rapidly." - else if(message_langs & DRONE) - return "chitters." - else if(message_langs & SWARMER) - return "hums." + return speaker.say_quote(raw_message, spans, message_mode) else return "makes a strange sound." /proc/get_radio_span(freq) - var/returntext = freqtospan["[freq]"] + var/returntext = GLOB.freqtospan["[freq]"] if(returntext) return returntext return "radio" /proc/get_radio_name(freq) - var/returntext = radiochannelsreverse["[freq]"] + var/returntext = GLOB.reverseradiochannels["[freq]"] if(returntext) return returntext return "[copytext("[freq]", 1, 4)].[copytext("[freq]", 4, 5)]" diff --git a/code/game/sound.dm b/code/game/sound.dm index 91b016d061..8d0c20d63d 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -1,4 +1,4 @@ -/proc/playsound(atom/source, soundin, vol as num, vary, extrarange as num, falloff, surround = 1, frequency = null) +/proc/playsound(atom/source, soundin, vol as num, vary, extrarange as num, falloff, surround = 1, frequency = null, channel = 0, pressure_affected = TRUE) soundin = get_sfx(soundin) // same sound for everyone @@ -10,23 +10,28 @@ frequency = get_rand_frequency() // Same frequency for everybody var/turf/turf_source = get_turf(source) + //allocate a channel if necessary now so its the same for everyone + channel = channel || open_sound_channel() + // Looping through the player list has the added bonus of working for mobs inside containers - for (var/P in player_list) + for (var/P in GLOB.player_list) var/mob/M = P if(!M || !M.client) continue if(get_dist(M, turf_source) <= world.view + extrarange) var/turf/T = get_turf(M) if(T && T.z == turf_source.z) - M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff, surround) + M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff, surround, channel, pressure_affected) +/atom/proc/playsound_direct(soundin, vol as num, vary, frequency, falloff, surround = TRUE, channel = 0, pressure_affected = FALSE) + playsound_local(get_turf(src), soundin, vol, vary, frequency, falloff, surround, channel) -/atom/proc/playsound_local(turf/turf_source, soundin, vol as num, vary, frequency, falloff, surround = 1) +/atom/proc/playsound_local(turf/turf_source, soundin, vol as num, vary, frequency, falloff, surround = 1, channel = 0, pressure_affected = TRUE) soundin = get_sfx(soundin) var/sound/S = sound(soundin) S.wait = 0 //No queue - S.channel = 0 //Any channel + S.channel = channel || open_sound_channel() S.volume = vol if (vary) @@ -38,27 +43,28 @@ if(isturf(turf_source)) var/turf/T = get_turf(src) - //Atmosphere affects sound - var/pressure_factor = 1 - var/datum/gas_mixture/hearer_env = T.return_air() - var/datum/gas_mixture/source_env = turf_source.return_air() + if(pressure_affected) + //Atmosphere affects sound + var/pressure_factor = 1 + var/datum/gas_mixture/hearer_env = T.return_air() + var/datum/gas_mixture/source_env = turf_source.return_air() - if(hearer_env && source_env) - var/pressure = min(hearer_env.return_pressure(), source_env.return_pressure()) - if(pressure < ONE_ATMOSPHERE) - pressure_factor = max((pressure - SOUND_MINIMUM_PRESSURE)/(ONE_ATMOSPHERE - SOUND_MINIMUM_PRESSURE), 0) - else //space - pressure_factor = 0 + if(hearer_env && source_env) + var/pressure = min(hearer_env.return_pressure(), source_env.return_pressure()) + if(pressure < ONE_ATMOSPHERE) + pressure_factor = max((pressure - SOUND_MINIMUM_PRESSURE)/(ONE_ATMOSPHERE - SOUND_MINIMUM_PRESSURE), 0) + else //space + pressure_factor = 0 - var/distance = get_dist(T, turf_source) - if(distance <= 1) - pressure_factor = max(pressure_factor, 0.15) //touching the source of the sound + var/distance = get_dist(T, turf_source) + if(distance <= 1) + pressure_factor = max(pressure_factor, 0.15) //touching the source of the sound - S.volume *= pressure_factor - //End Atmosphere affecting sound + S.volume *= pressure_factor + //End Atmosphere affecting sound - if(S.volume <= 0) - return //No sound + if(S.volume <= 0) + return //No sound // 3D sounds, the technology is here! if (surround) @@ -74,19 +80,25 @@ src << S -/mob/playsound_local(turf/turf_source, soundin, vol as num, vary, frequency, falloff, surround = 1) +/mob/playsound_local(turf/turf_source, soundin, vol as num, vary, frequency, falloff, surround = 1, channel = 0, pressure_affected = TRUE) if(!client || ear_deaf > 0) return ..() -/mob/proc/stopLobbySound() - src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) +/proc/open_sound_channel() + var/static/next_channel = 1 //loop through the available 1024 - (the ones we reserve) channels and pray that its not still being used + . = ++next_channel + if(next_channel > CHANNEL_HIGHEST_AVAILABLE) + next_channel = 1 + +/mob/proc/stop_sound_channel(chan) + src << sound(null, repeat = 0, wait = 0, channel = chan) /client/proc/playtitlemusic() - UNTIL(ticker.login_music) //wait for ticker init to set the login music + UNTIL(SSticker.login_music) //wait for SSticker init to set the login music if(prefs && (prefs.toggles & SOUND_LOBBY)) - src << sound(ticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1) // MAD JAMS + src << sound(SSticker.login_music, repeat = 0, wait = 0, volume = 85, channel = CHANNEL_LOBBYMUSIC) // MAD JAMS /proc/get_rand_frequency() return rand(32000, 55000) //Frequency stuff only works with 45kbps oggs. @@ -125,5 +137,5 @@ return soundin /proc/playsound_global(file, repeat=0, wait, channel, volume) - for(var/V in clients) - V << sound(file, repeat, wait, channel, volume) \ No newline at end of file + for(var/V in GLOB.clients) + V << sound(file, repeat, wait, channel, volume) diff --git a/code/game/turfs/closed.dm b/code/game/turfs/closed.dm index 54b99c0bea..f8cb0d1be3 100644 --- a/code/game/turfs/closed.dm +++ b/code/game/turfs/closed.dm @@ -29,14 +29,23 @@ /turf/closed/indestructible/splashscreen name = "Space Station 13" - icon = 'config/title_screens/images/title1.dmi' + icon = 'config/title_screens/images/blank.png' icon_state = "" layer = FLY_LAYER /turf/closed/indestructible/splashscreen/New() - SStitle.title_screen = src + SStitle.splash_turf = src + if(SStitle.icon) + icon = SStitle.icon ..() +/turf/closed/indestructible/splashscreen/vv_edit_var(var_name, var_value) + . = ..() + if(.) + switch(var_name) + if("icon") + SStitle.icon = icon + /turf/closed/indestructible/riveted icon = 'icons/turf/walls/riveted.dmi' icon_state = "riveted" diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index 00e11e2092..ee5527c0f5 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -57,11 +57,9 @@ current_cycle = times_fired //cache some vars - var/datum/gas_mixture/air = src.air - air.holder = src var/list/atmos_adjacent_turfs = src.atmos_adjacent_turfs - for(var/direction in cardinal) + for(var/direction in GLOB.cardinal) var/turf/open/enemy_tile = get_step(src, direction) if(!istype(enemy_tile)) if (atmos_adjacent_turfs) @@ -109,19 +107,17 @@ air.temperature += temp air_update_turf() -/turf/open/freon_gas_act() +/turf/open/proc/freon_gas_act() for(var/obj/I in contents) if(!HAS_SECONDARY_FLAG(I, FROZEN)) //let it go I.make_frozen_visual() for(var/mob/living/L in contents) - if(L.bodytemperature >= 10) - L.bodytemperature -= 10 if(L.bodytemperature <= 50) L.apply_status_effect(/datum/status_effect/freon) MakeSlippery(TURF_WET_PERMAFROST, 5) return 1 -/turf/open/water_vapor_gas_act() +/turf/open/proc/water_vapor_gas_act() MakeSlippery(min_wet_time = 10, wet_time_to_add = 5) for(var/mob/living/simple_animal/slime/M in src) diff --git a/code/game/turfs/simulated/chasm.dm b/code/game/turfs/simulated/chasm.dm index e031bbe401..8890c50129 100644 --- a/code/game/turfs/simulated/chasm.dm +++ b/code/game/turfs/simulated/chasm.dm @@ -9,6 +9,7 @@ icon = 'icons/turf/floors/Chasms.dmi' icon_state = "smooth" canSmoothWith = list(/turf/open/floor/fakepit, /turf/open/chasm) + density = TRUE //This will prevent hostile mobs from pathing into chasms, while the canpass override will still let it function like an open turf var/drop_x = 1 var/drop_y = 1 var/drop_z = 1 @@ -21,6 +22,7 @@ if(!drop_stuff()) STOP_PROCESSING(SSobj, src) + /turf/open/chasm/attackby(obj/item/C, mob/user, params, area/area_restriction) ..() if(istype(C, /obj/item/stack/rods)) @@ -48,7 +50,6 @@ else to_chat(user, "The plating is going to need some support! Place metal rods first.") - /turf/open/chasm/proc/drop_stuff(AM) . = 0 var/thing_to_check = src @@ -122,6 +123,9 @@ L.notransform = TRUE L.Stun(10) L.resting = TRUE + var/oldtransform = AM.transform + var/oldcolor = AM.color + var/oldalpha = AM.alpha animate(AM, transform = matrix() - matrix(), alpha = 0, color = rgb(0, 0, 0), time = 10) for(var/i in 1 to 5) //Make sure the item is still there after our sleep @@ -139,6 +143,18 @@ qdel(S.mmi) qdel(AM) - + + if(AM && !QDELETED(AM)) //It's indestructible + visible_message("[src] spits out the [AM]!") + AM.alpha = oldalpha + AM.color = oldcolor + AM.transform = oldtransform + AM.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)),rand(1, 10),rand(1, 10)) + /turf/open/chasm/straight_down/lava_land_surface/normal_air - initial_gas_mix = "o2=22;n2=82;TEMP=293.15" \ No newline at end of file + initial_gas_mix = "o2=22;n2=82;TEMP=293.15" + + + +/turf/open/chasm/CanPass(atom/movable/mover, turf/target, height=0) + return 1 diff --git a/code/game/turfs/simulated/dirtystation.dm b/code/game/turfs/simulated/dirtystation.dm index 88d0b07181..3eef7272ed 100644 --- a/code/game/turfs/simulated/dirtystation.dm +++ b/code/game/turfs/simulated/dirtystation.dm @@ -5,39 +5,6 @@ //This file was made not awful by Xhuis on September 13, 2016 -/obj/effect/decal/cleanable/blood/old - name = "dried blood" - desc = "Looks like it's been here a while. Eew." - bloodiness = 0 - -/obj/effect/decal/cleanable/blood/old/New() - ..() - icon_state += "-old" //This IS necessary because the parent /blood type uses icon randomization. - blood_DNA["Non-human DNA"] = "A+" - -/obj/effect/decal/cleanable/blood/gibs/old - name = "old rotting gibs" - desc = "Space Jesus, why didn't anyone clean this up? It smells terrible." - bloodiness = 0 - -/obj/effect/decal/cleanable/blood/gibs/old/New() - ..() - setDir(pick(1,2,4,8)) - icon_state += "-old" - blood_DNA["Non-human DNA"] = "A+" - -/obj/effect/decal/cleanable/vomit/old - name = "crusty dried vomit" - desc = "You try not to look at the chunks, and fail." - -/obj/effect/decal/cleanable/vomit/old/New() - ..() - icon_state += "-old" - -/obj/effect/decal/cleanable/robot_debris/old - name = "dusty robot debris" - desc = "Looks like nobody has touched this in a while." - //Making the station dirty, one tile at a time. Called by master controller's setup_objects /turf/open/floor/proc/MakeDirty() diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 8a81e2b6d0..98c28256e9 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -1,20 +1,3 @@ -//This is so damaged or burnt tiles or platings don't get remembered as the default tile -var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3","damaged4", - "damaged5","panelscorched","floorscorched1","floorscorched2","platingdmg1","platingdmg2", - "platingdmg3","plating","light_on","light_on_flicker1","light_on_flicker2", - "light_on_clicker3","light_on_clicker4","light_on_clicker5","light_broken", - "light_on_broken","light_off","wall_thermite","grass", "sand", - "asteroid","asteroid_dug", - "asteroid0","asteroid1","asteroid2","asteroid3","asteroid4", - "asteroid5","asteroid6","asteroid7","asteroid8","asteroid9","asteroid10","asteroid11","asteroid12", - "basalt","basalt_dug", - "basalt0","basalt1","basalt2","basalt3","basalt4", - "basalt5","basalt6","basalt7","basalt8","basalt9","basalt10","basalt11","basalt12", - "oldburning","light-on-r","light-on-y","light-on-g","light-on-b", "wood", "wood-broken", - "carpetcorner", "carpetside", "carpet", "ironsand1", "ironsand2", "ironsand3", "ironsand4", "ironsand5", - "ironsand6", "ironsand7", "ironsand8", "ironsand9", "ironsand10", "ironsand11", - "ironsand12", "ironsand13", "ironsand14", "ironsand15") - /turf/open/floor //NOTE: Floor code has been refactored, many procs were removed and refactored //- you should use istype() if you want to find out whether a floor has a certain type @@ -39,6 +22,22 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3"," if (!burnt_states) burnt_states = list() ..() + //This is so damaged or burnt tiles or platings don't get remembered as the default tile + var/static/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3","damaged4", + "damaged5","panelscorched","floorscorched1","floorscorched2","platingdmg1","platingdmg2", + "platingdmg3","plating","light_on","light_on_flicker1","light_on_flicker2", + "light_on_clicker3","light_on_clicker4","light_on_clicker5","light_broken", + "light_on_broken","light_off","wall_thermite","grass", "sand", + "asteroid","asteroid_dug", + "asteroid0","asteroid1","asteroid2","asteroid3","asteroid4", + "asteroid5","asteroid6","asteroid7","asteroid8","asteroid9","asteroid10","asteroid11","asteroid12", + "basalt","basalt_dug", + "basalt0","basalt1","basalt2","basalt3","basalt4", + "basalt5","basalt6","basalt7","basalt8","basalt9","basalt10","basalt11","basalt12", + "oldburning","light-on-r","light-on-y","light-on-g","light-on-b", "wood", "wood-broken", + "carpetcorner", "carpetside", "carpet", "ironsand1", "ironsand2", "ironsand3", "ironsand4", "ironsand5", + "ironsand6", "ironsand7", "ironsand8", "ironsand9", "ironsand10", "ironsand11", + "ironsand12", "ironsand13", "ironsand14", "ironsand15") if(icon_state in icons_to_ignore_at_floor_init) //so damaged/burned tiles or plating icons aren't saved as the default icon_regular_floor = "floor" else @@ -137,21 +136,22 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3"," if(..()) return 1 if(intact && istype(C, /obj/item/weapon/crowbar)) - pry_tile(C, user) - return 1 + return pry_tile(C, user) if(intact && istype(C, /obj/item/stack/tile)) - var/obj/item/stack/tile/T = C - if(T.turf_type == type) - return - var/obj/item/weapon/crowbar/CB = user.is_holding_item_of_type(/obj/item/weapon/crowbar) - if(!CB) - return - var/turf/open/floor/plating/P = pry_tile(CB, user, TRUE) - if(!istype(P)) - return - P.attackby(T, user, params) + try_replace_tile(C, user, params) return 0 +/turf/open/floor/proc/try_replace_tile(obj/item/stack/tile/T, mob/user, params) + if(T.turf_type == type) + return + var/obj/item/weapon/crowbar/CB = user.is_holding_item_of_type(/obj/item/weapon/crowbar) + if(!CB) + return + var/turf/open/floor/plating/P = pry_tile(CB, user, TRUE) + if(!istype(P)) + return + P.attackby(T, user, params) + /turf/open/floor/proc/pry_tile(obj/item/C, mob/user, silent = FALSE) playsound(src, C.usesound, 80, 1) return remove_tile(user, silent) @@ -224,7 +224,7 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3"," to_chat(user, "You build an airlock.") var/obj/machinery/door/airlock/A = new the_rcd.airlock_type(src) - A.electronics = new/obj/item/weapon/electronics/airlock(src) + A.electronics = new/obj/item/weapon/electronics/airlock(A) if(the_rcd.conf_access) A.electronics.accesses = the_rcd.conf_access.Copy() diff --git a/code/game/turfs/simulated/floor/fancy_floor.dm b/code/game/turfs/simulated/floor/fancy_floor.dm index 0e9dda1b8c..eaba3d50eb 100644 --- a/code/game/turfs/simulated/floor/fancy_floor.dm +++ b/code/game/turfs/simulated/floor/fancy_floor.dm @@ -18,6 +18,19 @@ pry_tile(C, user) return +/turf/open/floor/wood/try_replace_tile(obj/item/stack/tile/T, mob/user, params) + if(T.turf_type == type) + return + var/obj/item/weapon/tool = user.is_holding_item_of_type(/obj/item/weapon/screwdriver) + if(!tool) + tool = user.is_holding_item_of_type(/obj/item/weapon/crowbar) + if(!tool) + return + var/turf/open/floor/plating/P = pry_tile(tool, user, TRUE) + if(!istype(P)) + return + P.attackby(T, user, params) + /turf/open/floor/wood/pry_tile(obj/item/C, mob/user, silent = FALSE) var/is_screwdriver = istype(C, /obj/item/weapon/screwdriver) playsound(src, C.usesound, 80, 1) @@ -155,4 +168,4 @@ turf/open/floor/fakepit /turf/open/floor/fakespace/Initialize() ..() - icon_state = "[rand(0,25)]" \ No newline at end of file + icon_state = "[rand(0,25)]" diff --git a/code/game/turfs/simulated/floor/light_floor.dm b/code/game/turfs/simulated/floor/light_floor.dm index 8690982f26..d3f7ba8c64 100644 --- a/code/game/turfs/simulated/floor/light_floor.dm +++ b/code/game/turfs/simulated/floor/light_floor.dm @@ -16,6 +16,11 @@ ..() update_icon() +/turf/open/floor/light/break_tile() + ..() + light_range = 0 + update_light() + /turf/open/floor/light/update_icon() ..() if(on) diff --git a/code/game/turfs/simulated/floor/plating/asteroid.dm b/code/game/turfs/simulated/floor/plating/asteroid.dm index 6eec8039a0..a17fcf2ca8 100644 --- a/code/game/turfs/simulated/floor/plating/asteroid.dm +++ b/code/game/turfs/simulated/floor/plating/asteroid.dm @@ -202,7 +202,7 @@ length = set_length // Get our directiosn - forward_cave_dir = pick(alldirs - exclude_dir) + forward_cave_dir = pick(GLOB.alldirs - exclude_dir) // Get the opposite direction of our facing direction backward_cave_dir = angle2dir(dir2angle(forward_cave_dir) + 180) diff --git a/code/game/turfs/simulated/floor/plating/dirt.dm b/code/game/turfs/simulated/floor/plating/dirt.dm new file mode 100644 index 0000000000..580aadc85f --- /dev/null +++ b/code/game/turfs/simulated/floor/plating/dirt.dm @@ -0,0 +1,21 @@ +/turf/open/floor/plating/dirt + name = "dirt" + desc = "Upon closer examination, it's still dirt." + icon = 'icons/turf/floors.dmi' + icon_state = "dirt" + var/smooth_icon = 'icons/turf/floors/dirt.dmi' + canSmoothWith = list(/turf/closed, /turf/open/floor/plating/dirt) + smooth = SMOOTH_MORE|SMOOTH_BORDER + baseturf = /turf/open/chasm/straight_down/lava_land_surface + initial_gas_mix = "o2=14;n2=23;TEMP=300" + planetary_atmos = TRUE + +/turf/open/floor/plating/dirt/Initialize() + pixel_y = -2 + pixel_x = -2 + icon = smooth_icon + ..() + +/turf/open/floor/plating/dirt/dark + icon_state = "darkdirt" + smooth_icon = 'icons/turf/floors/darkdirt.dmi' diff --git a/code/game/turfs/simulated/floor/plating/lava.dm b/code/game/turfs/simulated/floor/plating/lava.dm index ec6adb09cf..9321b4f082 100644 --- a/code/game/turfs/simulated/floor/plating/lava.dm +++ b/code/game/turfs/simulated/floor/plating/lava.dm @@ -108,6 +108,12 @@ /turf/open/floor/plating/lava/break_tile() return +/turf/open/floor/plating/lava/pry_tile() + return + +/turf/open/floor/plating/lava/try_replace_tile() + return + /turf/open/floor/plating/lava/burn_tile() return diff --git a/code/game/turfs/simulated/minerals.dm b/code/game/turfs/simulated/minerals.dm index 38095ae38d..ba84d0ff11 100644 --- a/code/game/turfs/simulated/minerals.dm +++ b/code/game/turfs/simulated/minerals.dm @@ -32,7 +32,7 @@ icon = smooth_icon ..() if (mineralType && mineralAmt && spread && spreadChance) - for(var/dir in cardinal) + for(var/dir in GLOB.cardinal) if(prob(spreadChance)) var/turf/T = get_step(src, dir) if(istype(T, /turf/closed/mineral/random)) diff --git a/code/game/turfs/simulated/river.dm b/code/game/turfs/simulated/river.dm index 18e521b23f..49ac9a6d32 100644 --- a/code/game/turfs/simulated/river.dm +++ b/code/game/turfs/simulated/river.dm @@ -78,7 +78,7 @@ var/turf/closed/mineral/M = T logged_turf_type = M.turf_type - if(get_dir(src, F) in cardinal) + if(get_dir(src, F) in GLOB.cardinal) cardinal_turfs += F else diagonal_turfs += F diff --git a/code/game/turfs/simulated/wall/mineral_walls.dm b/code/game/turfs/simulated/wall/mineral_walls.dm index 20d26dbdab..8b46ef679a 100644 --- a/code/game/turfs/simulated/wall/mineral_walls.dm +++ b/code/game/turfs/simulated/wall/mineral_walls.dm @@ -174,7 +174,7 @@ icon_state = "map-shuttle" sheet_type = /obj/item/stack/sheet/mineral/titanium smooth = SMOOTH_MORE|SMOOTH_DIAGONAL - canSmoothWith = list(/turf/closed/wall/mineral/titanium, /obj/machinery/door/airlock/shuttle, /obj/machinery/door/airlock/, /turf/closed/wall/shuttle, /obj/structure/window/shuttle, /obj/structure/shuttle/engine/heater) + canSmoothWith = list(/turf/closed/wall/mineral/titanium, /obj/machinery/door/airlock/shuttle, /obj/machinery/door/airlock/, /turf/closed/wall/shuttle, /obj/structure/window/shuttle, /obj/structure/shuttle/engine/heater, /obj/structure/falsewall/titanium) /turf/closed/wall/mineral/titanium/nodiagonal smooth = SMOOTH_MORE @@ -240,4 +240,4 @@ /turf/closed/wall/mineral/plastitanium/copyTurf(turf/T) . = ..() - T.transform = transform \ No newline at end of file + T.transform = transform diff --git a/code/game/turfs/simulated/wall/reinf_walls.dm b/code/game/turfs/simulated/wall/reinf_walls.dm index c95f6090a3..c1eff8e415 100644 --- a/code/game/turfs/simulated/wall/reinf_walls.dm +++ b/code/game/turfs/simulated/wall/reinf_walls.dm @@ -38,6 +38,8 @@ /turf/closed/wall/r_wall/attack_animal(mob/living/simple_animal/M) M.changeNext_move(CLICK_CD_MELEE) M.do_attack_animation(src) + if(!M.environment_smash) + return if(M.environment_smash == 3) dismantle_wall(1) playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1) @@ -249,8 +251,12 @@ if(prob(30)) dismantle_wall() -/turf/closed/wall/r_vall/rcd_vals(mob/user, obj/item/weapon/rcd/the_rcd) - return FALSE +/turf/closed/wall/r_wall/rcd_vals(mob/user, obj/item/weapon/rcd/the_rcd) + if(!the_rcd.canRturf) + return FALSE + return ..() -/turf/closed/wall/r_vall/rcd_act(mob/user, obj/item/weapon/rcd/the_rcd, passed_mode) - return FALSE \ No newline at end of file +/turf/closed/wall/r_wall/rcd_act(mob/user, obj/item/weapon/rcd/the_rcd, passed_mode) + if(!the_rcd.canRturf) + return FALSE + return ..() diff --git a/code/game/turfs/simulated/water.dm b/code/game/turfs/simulated/water.dm new file mode 100644 index 0000000000..d0208218a5 --- /dev/null +++ b/code/game/turfs/simulated/water.dm @@ -0,0 +1,16 @@ +/turf/open/water + name = "water" + desc = "Shallow water." + icon = 'icons/turf/floors.dmi' + icon_state = "riverwater" + baseturf = /turf/open/chasm/straight_down/lava_land_surface + initial_gas_mix = "o2=14;n2=23;TEMP=300" + planetary_atmos = TRUE + slowdown = 1 + wet = TURF_WET_WATER + +/turf/open/water/HandleWet() + if(wet == TURF_WET_WATER) + return + ..() + MakeSlippery(TURF_WET_WATER) //rewet after ..() clears out lube/ice etc. \ No newline at end of file diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index cdddbeb62b..7262569762 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -76,11 +76,14 @@ /turf/open/space/attack_paw(mob/user) return src.attack_hand(user) -/turf/open/space/attackby(obj/item/C, mob/user, params, area/area_restriction) +/turf/open/space/proc/CanBuildHere() + return TRUE + +/turf/open/space/attackby(obj/item/C, mob/user, params) ..() + if(!CanBuildHere()) + return if(istype(C, /obj/item/stack/rods)) - if(istype(area_restriction) && !istype(get_area(src), area_restriction)) - return var/obj/item/stack/rods/R = C var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) var/obj/structure/lattice/catwalk/W = locate(/obj/structure/lattice/catwalk, src) @@ -136,43 +139,6 @@ stoplag()//Let a diagonal move finish, if necessary A.newtonian_move(A.inertia_dir) -/turf/open/space/proc/Sandbox_Spacemove(atom/movable/A) - var/cur_x - var/cur_y - var/next_x = src.x - var/next_y = src.y - var/target_z - var/list/y_arr - var/list/cur_pos = src.get_global_map_pos() - if(!cur_pos) - return - cur_x = cur_pos["x"] - cur_y = cur_pos["y"] - - if(src.x <= 1) - next_x = (--cur_x||global_map.len) - y_arr = global_map[next_x] - target_z = y_arr[cur_y] - next_x = world.maxx - 2 - else if (src.x >= world.maxx) - next_x = (++cur_x > global_map.len ? 1 : cur_x) - y_arr = global_map[next_x] - target_z = y_arr[cur_y] - next_x = 3 - else if (src.y <= 1) - y_arr = global_map[cur_x] - next_y = (--cur_y||y_arr.len) - target_z = y_arr[next_y] - next_y = world.maxy - 2 - else if (src.y >= world.maxy) - y_arr = global_map[cur_x] - next_y = (++cur_y > y_arr.len ? 1 : cur_y) - target_z = y_arr[next_y] - next_y = 3 - - var/turf/T = locate(next_x, next_y, target_z) - A.Move(T) - /turf/open/space/handle_slip() return @@ -194,6 +160,8 @@ /turf/open/space/rcd_vals(mob/user, obj/item/weapon/rcd/the_rcd) + if(!CanBuildHere()) + return FALSE switch(the_rcd.mode) if(RCD_FLOORWALL) return list("mode" = RCD_FLOORWALL, "delay" = 0, "cost" = 2) diff --git a/code/game/turfs/space/transit.dm b/code/game/turfs/space/transit.dm index 5cea451da2..b3a322d407 100644 --- a/code/game/turfs/space/transit.dm +++ b/code/game/turfs/space/transit.dm @@ -58,9 +58,8 @@ AM.loc = T AM.newtonian_move(dir) -//Overwrite because we dont want people building rods -/turf/open/space/transit/attackby(obj/item/C, mob/user, params) - ..(C, user, params, /area/shuttle) +/turf/open/space/transit/CanBuildHere() + return istype(get_area(src), /area/shuttle) /turf/open/space/transit/Initialize() ..() @@ -90,4 +89,4 @@ state = ((p*x+y) % 15) + 1 icon_state = "speedspace_ns_[state]" - transform = turn(matrix(), angle) + transform = turn(matrix(), angle) \ No newline at end of file diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index afa1012152..b6ed50c576 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -217,13 +217,16 @@ /turf/proc/ChangeTurf(path, defer_change = FALSE, ignore_air = FALSE) if(!path) return - if(!use_preloader && path == type) // Don't no-op if the map loader requires it to be reconstructed + if(!GLOB.use_preloader && path == type) // Don't no-op if the map loader requires it to be reconstructed return src + var/old_baseturf = baseturf changing_turf = TRUE qdel(src) //Just get the side effects and call Destroy var/turf/W = new path(src) + W.baseturf = old_baseturf + if(!defer_change) W.AfterChange(ignore_air) @@ -246,6 +249,8 @@ queue_smooth_neighbors(src) + HandleTurfChange(src) + /turf/open/AfterChange(ignore_air) ..() RemoveLattice() @@ -281,7 +286,6 @@ air_gases[id][MOLES] /= turf_count //Averages contents of the turfs, ignoring walls and the like air.temperature /= turf_count - air.holder = src SSair.add_to_active(src) /turf/proc/ReplaceWithLattice() @@ -348,8 +352,8 @@ return can_have_cabling() & !intact /turf/proc/visibilityChanged() - if(ticker) - cameranet.updateVisibility(src) + if(SSticker) + GLOB.cameranet.updateVisibility(src) /turf/proc/burn_tile() @@ -399,7 +403,7 @@ /turf/proc/add_blueprints_preround(atom/movable/AM) - if(!ticker || ticker.current_state != GAME_STATE_PLAYING) + if(!SSticker || SSticker.current_state != GAME_STATE_PLAYING) add_blueprints(AM) /turf/proc/empty(turf_type=/turf/open/space) diff --git a/code/modules/VR/vr_sleeper.dm b/code/modules/VR/vr_sleeper.dm index 9eda00a8ea..41f3bbc001 100644 --- a/code/modules/VR/vr_sleeper.dm +++ b/code/modules/VR/vr_sleeper.dm @@ -27,7 +27,7 @@ if(!available_vr_spawnpoints || !available_vr_spawnpoints.len) //(re)build spawnpoint lists available_vr_spawnpoints = list() - for(var/obj/effect/landmark/vr_spawn/V in landmarks_list) + for(var/obj/effect/landmark/vr_spawn/V in GLOB.landmarks_list) available_vr_spawnpoints[V.vr_category] = list() var/turf/T = get_turf(V) if(T) @@ -80,7 +80,7 @@ ui_interact(occupant) -/obj/machinery/vr_sleeper/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) +/obj/machinery/vr_sleeper/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "vr_sleeper", "VR Sleeper", 475, 340, master_ui, state) diff --git a/code/modules/admin/DB_ban/functions.dm b/code/modules/admin/DB_ban/functions.dm index 236df58699..d6d88b6e8f 100644 --- a/code/modules/admin/DB_ban/functions.dm +++ b/code/modules/admin/DB_ban/functions.dm @@ -6,7 +6,7 @@ if(!check_rights(R_BAN)) return - if(!dbcon.Connect()) + if(!GLOB.dbcon.Connect()) to_chat(src, "Failed to establish database connection.") return @@ -71,7 +71,7 @@ computerid = bancid ip = banip - var/DBQuery/query_add_ban_get_id = dbcon.NewQuery("SELECT id FROM [format_table_name("player")] WHERE ckey = '[ckey]'") + var/DBQuery/query_add_ban_get_id = GLOB.dbcon.NewQuery("SELECT id FROM [format_table_name("player")] WHERE ckey = '[ckey]'") if(!query_add_ban_get_id.warn_execute()) return var/validckey = 0 @@ -97,14 +97,14 @@ return var/who - for(var/client/C in clients) + for(var/client/C in GLOB.clients) if(!who) who = "[C]" else who += ", [C]" var/adminwho - for(var/client/C in admins) + for(var/client/C in GLOB.admins) if(!adminwho) adminwho = "[C]" else @@ -113,7 +113,7 @@ reason = sanitizeSQL(reason) if(maxadminbancheck) - var/DBQuery/query_check_adminban_amt = dbcon.NewQuery("SELECT count(id) AS num FROM [format_table_name("ban")] WHERE (a_ckey = '[a_ckey]') AND (bantype = 'ADMIN_PERMABAN' OR (bantype = 'ADMIN_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)") + var/DBQuery/query_check_adminban_amt = GLOB.dbcon.NewQuery("SELECT count(id) AS num FROM [format_table_name("ban")] WHERE (a_ckey = '[a_ckey]') AND (bantype = 'ADMIN_PERMABAN' OR (bantype = 'ADMIN_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)") if(!query_check_adminban_amt.warn_execute()) return if(query_check_adminban_amt.NextRow()) @@ -126,7 +126,7 @@ if(!ip) ip = "0.0.0.0" var/sql = "INSERT INTO [format_table_name("ban")] (`bantime`,`server_ip`,`server_port`,`bantype`,`reason`,`job`,`duration`,`expiration_time`,`ckey`,`computerid`,`ip`,`a_ckey`,`a_computerid`,`a_ip`,`who`,`adminwho`) VALUES (Now(), INET_ATON('[world.internet_address]'), '[world.port]', '[bantype_str]', '[reason]', '[job]', [(duration)?"[duration]":"0"], Now() + INTERVAL [(duration>0) ? duration : 0] MINUTE, '[ckey]', '[computerid]', INET_ATON('[ip]'), '[a_ckey]', '[a_computerid]', INET_ATON('[a_ip]'), '[who]', '[adminwho]')" - var/DBQuery/query_add_ban = dbcon.NewQuery(sql) + var/DBQuery/query_add_ban = GLOB.dbcon.NewQuery(sql) if(!query_add_ban.warn_execute()) return to_chat(usr, "Ban saved to database.") @@ -187,13 +187,13 @@ if(job) sql += " AND job = '[job]'" - if(!dbcon.Connect()) + if(!GLOB.dbcon.Connect()) return var/ban_id var/ban_number = 0 //failsafe - var/DBQuery/query_unban_get_id = dbcon.NewQuery(sql) + var/DBQuery/query_unban_get_id = GLOB.dbcon.NewQuery(sql) if(!query_unban_get_id.warn_execute()) return while(query_unban_get_id.NextRow()) @@ -225,7 +225,7 @@ to_chat(usr, "Cancelled") return - var/DBQuery/query_edit_ban_get_details = dbcon.NewQuery("SELECT ckey, duration, reason FROM [format_table_name("ban")] WHERE id = [banid]") + var/DBQuery/query_edit_ban_get_details = GLOB.dbcon.NewQuery("SELECT ckey, duration, reason FROM [format_table_name("ban")] WHERE id = [banid]") if(!query_edit_ban_get_details.warn_execute()) return @@ -254,7 +254,7 @@ to_chat(usr, "Cancelled") return - var/DBQuery/query_edit_ban_reason = dbcon.NewQuery("UPDATE [format_table_name("ban")] SET reason = '[value]', edits = CONCAT(edits,'- [eckey] changed ban reason from \\\"[reason]\\\" to \\\"[value]\\\"
    ') WHERE id = [banid]") + var/DBQuery/query_edit_ban_reason = GLOB.dbcon.NewQuery("UPDATE [format_table_name("ban")] SET reason = '[value]', edits = CONCAT(edits,'- [eckey] changed ban reason from \\\"[reason]\\\" to \\\"[value]\\\"
    ') WHERE id = [banid]") if(!query_edit_ban_reason.warn_execute()) return message_admins("[key_name_admin(usr)] has edited a ban for [pckey]'s reason from [reason] to [value]",1) @@ -265,7 +265,7 @@ to_chat(usr, "Cancelled") return - var/DBQuery/query_edit_ban_duration = dbcon.NewQuery("UPDATE [format_table_name("ban")] SET duration = [value], edits = CONCAT(edits,'- [eckey] changed ban duration from [duration] to [value]
    '), expiration_time = DATE_ADD(bantime, INTERVAL [value] MINUTE) WHERE id = [banid]") + var/DBQuery/query_edit_ban_duration = GLOB.dbcon.NewQuery("UPDATE [format_table_name("ban")] SET duration = [value], edits = CONCAT(edits,'- [eckey] changed ban duration from [duration] to [value]
    '), expiration_time = DATE_ADD(bantime, INTERVAL [value] MINUTE) WHERE id = [banid]") if(!query_edit_ban_duration.warn_execute()) return message_admins("[key_name_admin(usr)] has edited a ban for [pckey]'s duration from [duration] to [value]",1) @@ -287,13 +287,13 @@ var/sql = "SELECT ckey FROM [format_table_name("ban")] WHERE id = [id]" - if(!dbcon.Connect()) + if(!GLOB.dbcon.Connect()) return var/ban_number = 0 //failsafe var/pckey - var/DBQuery/query_unban_get_ckey = dbcon.NewQuery(sql) + var/DBQuery/query_unban_get_ckey = GLOB.dbcon.NewQuery(sql) if(!query_unban_get_ckey.warn_execute()) return while(query_unban_get_ckey.NextRow()) @@ -316,7 +316,7 @@ var/unban_ip = src.owner:address var/sql_update = "UPDATE [format_table_name("ban")] SET unbanned = 1, unbanned_datetime = Now(), unbanned_ckey = '[unban_ckey]', unbanned_computerid = '[unban_computerid]', unbanned_ip = INET_ATON('[unban_ip]') WHERE id = [id]" - var/DBQuery/query_unban = dbcon.NewQuery(sql_update) + var/DBQuery/query_unban = GLOB.dbcon.NewQuery(sql_update) if(!query_unban.warn_execute()) return message_admins("[key_name_admin(usr)] has lifted [pckey]'s ban.",1) @@ -339,7 +339,7 @@ if(!check_rights(R_BAN)) return - if(!dbcon.Connect()) + if(!GLOB.dbcon.Connect()) to_chat(usr, "Failed to establish database connection.") return @@ -371,7 +371,7 @@ output += "" for(var/j in get_all_jobs()) output += "" - for(var/j in nonhuman_positions) + for(var/j in GLOB.nonhuman_positions) output += "" for(var/j in list("traitor","changeling","operative","revolutionary", "gangster","cultist","wizard")) output += "" @@ -405,7 +405,7 @@ var/bansperpage = 15 var/pagecount = 0 page = text2num(page) - var/DBQuery/query_count_bans = dbcon.NewQuery("SELECT COUNT(id) FROM [format_table_name("ban")] WHERE 1 [playersearch] [adminsearch]") + var/DBQuery/query_count_bans = GLOB.dbcon.NewQuery("SELECT COUNT(id) FROM [format_table_name("ban")] WHERE 1 [playersearch] [adminsearch]") if(!query_count_bans.warn_execute()) return if(query_count_bans.NextRow()) @@ -431,7 +431,7 @@ output += "OPTIONS" output += "" var/limit = " LIMIT [bansperpage * page], [bansperpage]" - var/DBQuery/query_search_bans = dbcon.NewQuery("SELECT id, bantime, bantype, reason, job, duration, expiration_time, ckey, a_ckey, unbanned, unbanned_ckey, unbanned_datetime, edits FROM [format_table_name("ban")] WHERE 1 [playersearch] [adminsearch] ORDER BY bantime DESC[limit]") + var/DBQuery/query_search_bans = GLOB.dbcon.NewQuery("SELECT id, bantime, bantype, reason, job, duration, expiration_time, ckey, a_ckey, unbanned, unbanned_ckey, unbanned_datetime, edits FROM [format_table_name("ban")] WHERE 1 [playersearch] [adminsearch] ORDER BY bantime DESC[limit]") if(!query_search_bans.warn_execute()) return diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index e69897e183..afa1675bd2 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -16,7 +16,7 @@ return list("reason"="invalid login data", "desc"="Error: Could not check ban status, Please try again. Error message: Your computer provided an invalid Computer ID.)") var/admin = 0 var/ckey = ckey(key) - if((ckey in admin_datums) || (ckey in deadmins)) + if((ckey in GLOB.admin_datums) || (ckey in GLOB.deadmins)) admin = 1 //Whitelist @@ -32,10 +32,10 @@ //Guest Checking if(IsGuestKey(key)) - if (!guests_allowed) + if (!GLOB.guests_allowed) log_access("Failed Login: [key] - Guests not allowed") return list("reason"="guest", "desc"="\nReason: Guests not allowed. Please sign in with a byond account.") - if (config.panic_bunker && dbcon && dbcon.IsConnected()) + if (config.panic_bunker && GLOB.dbcon && GLOB.dbcon.IsConnected()) log_access("Failed Login: [key] - Guests not allowed during panic bunker") return list("reason"="guest", "desc"="\nReason: Sorry but the server is currently not accepting connections from never before seen players or guests. If you have played on this server with a byond account before, please log in to the byond account you have played from.") @@ -61,9 +61,9 @@ var/ckeytext = ckey(key) - if(!dbcon.Connect()) + if(!GLOB.dbcon.Connect()) log_world("Ban database connection failure. Key [ckeytext] not checked") - diary << "Ban database connection failure. Key [ckeytext] not checked" + GLOB.diary << "Ban database connection failure. Key [ckeytext] not checked" return var/ipquery = "" @@ -74,7 +74,7 @@ if(computer_id) cidquery = " OR computerid = '[computer_id]' " - var/DBQuery/query_ban_check = dbcon.NewQuery("SELECT ckey, a_ckey, reason, expiration_time, duration, bantime, bantype FROM [format_table_name("ban")] WHERE (ckey = '[ckeytext]' [ipquery] [cidquery]) AND (bantype = 'PERMABAN' OR bantype = 'ADMIN_PERMABAN' OR ((bantype = 'TEMPBAN' OR bantype = 'ADMIN_TEMPBAN') AND expiration_time > Now())) AND isnull(unbanned)") + var/DBQuery/query_ban_check = GLOB.dbcon.NewQuery("SELECT ckey, a_ckey, reason, expiration_time, duration, bantime, bantype FROM [format_table_name("ban")] WHERE (ckey = '[ckeytext]' [ipquery] [cidquery]) AND (bantype = 'PERMABAN' OR bantype = 'ADMIN_PERMABAN' OR ((bantype = 'TEMPBAN' OR bantype = 'ADMIN_TEMPBAN') AND expiration_time > Now())) AND isnull(unbanned)") if(!query_ban_check.Execute()) return while(query_ban_check.NextRow()) @@ -120,7 +120,7 @@ bannedckey = ban["ckey"] var/newmatch = FALSE - var/client/C = directory[ckey] + var/client/C = GLOB.directory[ckey] var/cachedban = SSstickyban.cache[bannedckey] //rogue ban in the process of being reverted. diff --git a/code/modules/admin/NewBan.dm b/code/modules/admin/NewBan.dm index 0855ac13b9..aa8c8db2db 100644 --- a/code/modules/admin/NewBan.dm +++ b/code/modules/admin/NewBan.dm @@ -1,76 +1,77 @@ -var/CMinutes = null -var/savefile/Banlist +GLOBAL_VAR(CMinutes) +GLOBAL_DATUM(Banlist, /savefile) +GLOBAL_PROTECT(Banlist) /proc/CheckBan(ckey, id, address) - if(!Banlist) // if Banlist cannot be located for some reason + if(!GLOB.Banlist) // if Banlist cannot be located for some reason LoadBans() // try to load the bans - if(!Banlist) // uh oh, can't find bans! + if(!GLOB.Banlist) // uh oh, can't find bans! return 0 // ABORT ABORT ABORT . = list() var/appeal if(config && config.banappeals) appeal = "\nFor more information on your ban, or to appeal, head to [config.banappeals]" - Banlist.cd = "/base" - if( "[ckey][id]" in Banlist.dir ) - Banlist.cd = "[ckey][id]" - if (Banlist["temp"]) - if (!GetExp(Banlist["minutes"])) + GLOB.Banlist.cd = "/base" + if( "[ckey][id]" in GLOB.Banlist.dir ) + GLOB.Banlist.cd = "[ckey][id]" + if (GLOB.Banlist["temp"]) + if (!GetExp(GLOB.Banlist["minutes"])) ClearTempbans() return 0 else - .["desc"] = "\nReason: [Banlist["reason"]]\nExpires: [GetExp(Banlist["minutes"])]\nBy: [Banlist["bannedby"]][appeal]" + .["desc"] = "\nReason: [GLOB.Banlist["reason"]]\nExpires: [GetExp(GLOB.Banlist["minutes"])]\nBy: [GLOB.Banlist["bannedby"]][appeal]" else - Banlist.cd = "/base/[ckey][id]" - .["desc"] = "\nReason: [Banlist["reason"]]\nExpires: PERMENANT\nBy: [Banlist["bannedby"]][appeal]" + GLOB.Banlist.cd = "/base/[ckey][id]" + .["desc"] = "\nReason: [GLOB.Banlist["reason"]]\nExpires: PERMENANT\nBy: [GLOB.Banlist["bannedby"]][appeal]" .["reason"] = "ckey/id" return . else - for (var/A in Banlist.dir) - Banlist.cd = "/base/[A]" + for (var/A in GLOB.Banlist.dir) + GLOB.Banlist.cd = "/base/[A]" var/matches - if( ckey == Banlist["key"] ) + if( ckey == GLOB.Banlist["key"] ) matches += "ckey" - if( id == Banlist["id"] ) + if( id == GLOB.Banlist["id"] ) if(matches) matches += "/" matches += "id" - if( address == Banlist["ip"] ) + if( address == GLOB.Banlist["ip"] ) if(matches) matches += "/" matches += "ip" if(matches) - if(Banlist["temp"]) - if (!GetExp(Banlist["minutes"])) + if(GLOB.Banlist["temp"]) + if (!GetExp(GLOB.Banlist["minutes"])) ClearTempbans() return 0 else - .["desc"] = "\nReason: [Banlist["reason"]]\nExpires: [GetExp(Banlist["minutes"])]\nBy: [Banlist["bannedby"]][appeal]" + .["desc"] = "\nReason: [GLOB.Banlist["reason"]]\nExpires: [GetExp(GLOB.Banlist["minutes"])]\nBy: [GLOB.Banlist["bannedby"]][appeal]" else - .["desc"] = "\nReason: [Banlist["reason"]]\nExpires: PERMENANT\nBy: [Banlist["bannedby"]][appeal]" + .["desc"] = "\nReason: [GLOB.Banlist["reason"]]\nExpires: PERMENANT\nBy: [GLOB.Banlist["bannedby"]][appeal]" .["reason"] = matches return . return 0 /proc/UpdateTime() //No idea why i made this a proc. - CMinutes = (world.realtime / 10) / 60 + GLOB.CMinutes = (world.realtime / 10) / 60 return 1 /proc/LoadBans() - Banlist = new("data/banlist.bdb") + GLOB.Banlist = new("data/banlist.bdb") log_admin("Loading Banlist") - if (!length(Banlist.dir)) log_admin("Banlist is empty.") + if (!length(GLOB.Banlist.dir)) log_admin("Banlist is empty.") - if (!Banlist.dir.Find("base")) + if (!GLOB.Banlist.dir.Find("base")) log_admin("Banlist missing base dir.") - Banlist.dir.Add("base") - Banlist.cd = "/base" - else if (Banlist.dir.Find("base")) - Banlist.cd = "/base" + GLOB.Banlist.dir.Add("base") + GLOB.Banlist.cd = "/base" + else if (GLOB.Banlist.dir.Find("base")) + GLOB.Banlist.cd = "/base" ClearTempbans() return 1 @@ -78,17 +79,17 @@ var/savefile/Banlist /proc/ClearTempbans() UpdateTime() - Banlist.cd = "/base" - for (var/A in Banlist.dir) - Banlist.cd = "/base/[A]" - if (!Banlist["key"] || !Banlist["id"]) + GLOB.Banlist.cd = "/base" + for (var/A in GLOB.Banlist.dir) + GLOB.Banlist.cd = "/base/[A]" + if (!GLOB.Banlist["key"] || !GLOB.Banlist["id"]) RemoveBan(A) log_admin("Invalid Ban.") message_admins("Invalid Ban.") continue - if (!Banlist["temp"]) continue - if (CMinutes >= Banlist["minutes"]) RemoveBan(A) + if (!GLOB.Banlist["temp"]) continue + if (GLOB.CMinutes >= GLOB.Banlist["minutes"]) RemoveBan(A) return 1 @@ -99,23 +100,23 @@ var/savefile/Banlist if (temp) UpdateTime() - bantimestamp = CMinutes + minutes + bantimestamp = GLOB.CMinutes + minutes - Banlist.cd = "/base" - if ( Banlist.dir.Find("[ckey][computerid]") ) + GLOB.Banlist.cd = "/base" + if ( GLOB.Banlist.dir.Find("[ckey][computerid]") ) to_chat(usr, text("Ban already exists.")) return 0 else - Banlist.dir.Add("[ckey][computerid]") - Banlist.cd = "/base/[ckey][computerid]" - Banlist["key"] << ckey - Banlist["id"] << computerid - Banlist["ip"] << address - Banlist["reason"] << reason - Banlist["bannedby"] << bannedby - Banlist["temp"] << temp + GLOB.Banlist.dir.Add("[ckey][computerid]") + GLOB.Banlist.cd = "/base/[ckey][computerid]" + GLOB.Banlist["key"] << ckey + GLOB.Banlist["id"] << computerid + GLOB.Banlist["ip"] << address + GLOB.Banlist["reason"] << reason + GLOB.Banlist["bannedby"] << bannedby + GLOB.Banlist["temp"] << temp if (temp) - Banlist["minutes"] << bantimestamp + GLOB.Banlist["minutes"] << bantimestamp if(!temp) create_message("note", ckey, bannedby, "Permanently banned - [reason]", null, null, 0, 0) else @@ -126,12 +127,12 @@ var/savefile/Banlist var/key var/id - Banlist.cd = "/base/[foldername]" - Banlist["key"] >> key - Banlist["id"] >> id - Banlist.cd = "/base" + GLOB.Banlist.cd = "/base/[foldername]" + GLOB.Banlist["key"] >> key + GLOB.Banlist["id"] >> id + GLOB.Banlist.cd = "/base" - if (!Banlist.dir.Remove(foldername)) return 0 + if (!GLOB.Banlist.dir.Remove(foldername)) return 0 if(!usr) log_admin_private("Ban Expired: [key]") @@ -142,18 +143,18 @@ var/savefile/Banlist message_admins("[key_name_admin(usr)] unbanned: [key]") feedback_inc("ban_unban",1) usr.client.holder.DB_ban_unban( ckey(key), BANTYPE_ANY_FULLBAN) - for (var/A in Banlist.dir) - Banlist.cd = "/base/[A]" - if (key == Banlist["key"] /*|| id == Banlist["id"]*/) - Banlist.cd = "/base" - Banlist.dir.Remove(A) + for (var/A in GLOB.Banlist.dir) + GLOB.Banlist.cd = "/base/[A]" + if (key == GLOB.Banlist["key"] /*|| id == Banlist["id"]*/) + GLOB.Banlist.cd = "/base" + GLOB.Banlist.dir.Remove(A) continue return 1 /proc/GetExp(minutes as num) UpdateTime() - var/exp = minutes - CMinutes + var/exp = minutes - GLOB.CMinutes if (exp <= 0) return 0 else @@ -170,19 +171,19 @@ var/savefile/Banlist var/count = 0 var/dat //var/dat = "
    Unban Player: \blue(U) = Unban , (E) = Edit Ban\green (Total
    " - Banlist.cd = "/base" - for (var/A in Banlist.dir) + GLOB.Banlist.cd = "/base" + for (var/A in GLOB.Banlist.dir) count++ - Banlist.cd = "/base/[A]" + GLOB.Banlist.cd = "/base/[A]" var/ref = "\ref[src]" - var/key = Banlist["key"] - var/id = Banlist["id"] - var/ip = Banlist["ip"] - var/reason = Banlist["reason"] - var/by = Banlist["bannedby"] + var/key = GLOB.Banlist["key"] + var/id = GLOB.Banlist["id"] + var/ip = GLOB.Banlist["ip"] + var/reason = GLOB.Banlist["reason"] + var/by = GLOB.Banlist["bannedby"] var/expiry - if(Banlist["temp"]) - expiry = GetExp(Banlist["minutes"]) + if(GLOB.Banlist["temp"]) + expiry = GetExp(GLOB.Banlist["minutes"]) if(!expiry) expiry = "Removal Pending" else @@ -207,26 +208,26 @@ var/savefile/Banlist var/a = pick(1,0) var/b = pick(1,0) if(b) - Banlist.cd = "/base" - Banlist.dir.Add("trash[i]trashid[i]") - Banlist.cd = "/base/trash[i]trashid[i]" - Banlist["key"] << "trash[i]" + GLOB.Banlist.cd = "/base" + GLOB.Banlist.dir.Add("trash[i]trashid[i]") + GLOB.Banlist.cd = "/base/trash[i]trashid[i]" + GLOB.Banlist["key"] << "trash[i]" else - Banlist.cd = "/base" - Banlist.dir.Add("[last]trashid[i]") - Banlist.cd = "/base/[last]trashid[i]" - Banlist["key"] << last - Banlist["id"] << "trashid[i]" - Banlist["reason"] << "Trashban[i]." - Banlist["temp"] << a - Banlist["minutes"] << CMinutes + rand(1,2000) - Banlist["bannedby"] << "trashmin" + GLOB.Banlist.cd = "/base" + GLOB.Banlist.dir.Add("[last]trashid[i]") + GLOB.Banlist.cd = "/base/[last]trashid[i]" + GLOB.Banlist["key"] << last + GLOB.Banlist["id"] << "trashid[i]" + GLOB.Banlist["reason"] << "Trashban[i]." + GLOB.Banlist["temp"] << a + GLOB.Banlist["minutes"] << GLOB.CMinutes + rand(1,2000) + GLOB.Banlist["bannedby"] << "trashmin" last = "trash[i]" - Banlist.cd = "/base" + GLOB.Banlist.cd = "/base" /proc/ClearAllBans() - Banlist.cd = "/base" - for (var/A in Banlist.dir) + GLOB.Banlist.cd = "/base" + for (var/A in GLOB.Banlist.dir) RemoveBan(A) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 4a536666ca..94cb8a4e95 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -1,19 +1,17 @@ -var/global/BSACooldown = 0 - //////////////////////////////// /proc/message_admins(msg) msg = "ADMIN LOG: [msg]" - to_chat(admins, msg) + to_chat(GLOB.admins, msg) /proc/relay_msg_admins(msg) msg = "RELAY: [msg]" - to_chat(admins, msg) + to_chat(GLOB.admins, msg) ///////////////////////////////////////////////////////////////////////////////////////////////Panels -/datum/admins/proc/show_player_panel(mob/M in mob_list) +/datum/admins/proc/show_player_panel(mob/M in GLOB.mob_list) set category = "Admin" set name = "Show Player Panel" set desc="Edit player (respawn, ban, heal, etc)" @@ -83,7 +81,8 @@ var/global/BSACooldown = 0 body += "Traitor panel | " body += "Narrate to | " body += "Subtle message | " - body += "Individual Round Logs" + body += "Individual Round Logs | " + body += "Language Menu" if (M.client) if(!isnewplayer(M)) @@ -162,15 +161,12 @@ var/global/BSACooldown = 0 body += "Thunderdome 2 | " body += "Thunderdome Admin | " body += "Thunderdome Observer | " - body += "Make Mentor | " - body += "Remove Mentor | " - body += "
    " body += "" usr << browse(body, "window=adminplayeropts-\ref[M];size=550x515") - feedback_add_details("admin_verb","SPP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Player Panel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/access_news_network() //MARKER @@ -191,14 +187,14 @@ var/global/BSACooldown = 0 dat += "Welcome to the admin newscaster.
    Here you can add, edit and censor every newspiece on the network." dat += "
    Feed channels and stories entered through here will be uneditable and handled as official news by the rest of the units." dat += "
    Note that this panel allows full freedom over the news network, there are no constrictions except the few basic ones. Don't break things!" - if(news_network.wanted_issue.active) + if(GLOB.news_network.wanted_issue.active) dat+= "
    Read Wanted Issue" dat+= "

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

    Exit" var/wanted_already = 0 - if(news_network.wanted_issue.active) + if(GLOB.news_network.wanted_issue.active) wanted_already = 1 dat+="
    Feed Security functions:
    " dat+="
    [(wanted_already) ? ("Manage") : ("Publish")] \"Wanted\" Issue" @@ -207,10 +203,10 @@ var/global/BSACooldown = 0 dat+="

    The newscaster recognises you as:
    [src.admin_signature]
    " if(1) dat+= "Station Feed Channels
    " - if( isemptylist(news_network.network_channels) ) + if( isemptylist(GLOB.news_network.network_channels) ) dat+="No active channels found..." else - for(var/datum/newscaster/feed_channel/CHANNEL in news_network.network_channels) + for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels) if(CHANNEL.is_admin_channel) dat+="[CHANNEL.channel_name]
    " else @@ -247,7 +243,7 @@ var/global/BSACooldown = 0 if(src.admincaster_feed_channel.channel_name =="" || src.admincaster_feed_channel.channel_name == "\[REDACTED\]") dat+="•Invalid channel name.
    " var/check = 0 - for(var/datum/newscaster/feed_channel/FC in news_network.network_channels) + for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels) if(FC.channel_name == src.admincaster_feed_channel.channel_name) check = 1 break @@ -282,10 +278,10 @@ var/global/BSACooldown = 0 dat+="NOTE: Due to the nature of news Feeds, total deletion of a Feed Story is not possible.
    " dat+="Keep in mind that users attempting to view a censored feed will instead see the \[REDACTED\] tag above it.
    " dat+="
    Select Feed channel to get Stories from:
    " - if(isemptylist(news_network.network_channels)) + if(isemptylist(GLOB.news_network.network_channels)) dat+="No feed channels found active...
    " else - for(var/datum/newscaster/feed_channel/CHANNEL in news_network.network_channels) + for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels) dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
    " dat+="
    Cancel" if(11) @@ -293,10 +289,10 @@ var/global/BSACooldown = 0 dat+="A D-Notice is to be bestowed upon the channel if the handling Authority deems it as harmful for the station's" dat+="morale, integrity or disciplinary behaviour. A D-Notice will render a channel unable to be updated by anyone, without deleting any feed" dat+="stories it might contain at the time. You can lift a D-Notice if you have the required access at any time.
    " - if(isemptylist(news_network.network_channels)) + if(isemptylist(GLOB.news_network.network_channels)) dat+="No feed channels found active...
    " else - for(var/datum/newscaster/feed_channel/CHANNEL in news_network.network_channels) + for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels) dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
    " dat+="
    Back" @@ -331,7 +327,7 @@ var/global/BSACooldown = 0 dat+="Wanted Issue Handler:" var/wanted_already = 0 var/end_param = 1 - if(news_network.wanted_issue.active) + if(GLOB.news_network.wanted_issue.active) wanted_already = 1 end_param = 2 if(wanted_already) @@ -340,7 +336,7 @@ var/global/BSACooldown = 0 dat+="Criminal Name: [src.admincaster_wanted_message.criminal]
    " dat+="Description: [src.admincaster_wanted_message.body]
    " if(wanted_already) - dat+="Wanted Issue created by:[news_network.wanted_issue.scannedUser]
    " + dat+="Wanted Issue created by:[GLOB.news_network.wanted_issue.scannedUser]
    " else dat+="Wanted Issue will be created under prosecutor:[src.admin_signature]
    " dat+="
    [(wanted_already) ? ("Edit Issue") : ("Submit")]" @@ -361,12 +357,12 @@ var/global/BSACooldown = 0 dat+="Wanted Issue successfully deleted from Circulation
    " dat+="
    Return
    " if(18) - dat+="-- STATIONWIDE WANTED ISSUE --
    \[Submitted by: [news_network.wanted_issue.scannedUser]\]
    " - dat+="Criminal: [news_network.wanted_issue.criminal]
    " - dat+="Description: [news_network.wanted_issue.body]
    " + dat+="-- STATIONWIDE WANTED ISSUE --
    \[Submitted by: [GLOB.news_network.wanted_issue.scannedUser]\]
    " + dat+="Criminal: [GLOB.news_network.wanted_issue.criminal]
    " + dat+="Description: [GLOB.news_network.wanted_issue.body]
    " dat+="Photo:: " - if(news_network.wanted_issue.img) - usr << browse_rsc(news_network.wanted_issue.img, "tmp_photow.png") + if(GLOB.news_network.wanted_issue.img) + usr << browse_rsc(GLOB.news_network.wanted_issue.img, "tmp_photow.png") dat+="
    " else dat+="None" @@ -391,7 +387,7 @@ var/global/BSACooldown = 0
    Game Panel

    \n Change Game Mode
    "} - if(master_mode == "secret") + if(GLOB.master_mode == "secret") dat += "(Force Secret Mode)
    " dat += {" @@ -422,8 +418,8 @@ var/global/BSACooldown = 0 if(confirm == "Cancel") return if(confirm == "Yes") - ticker.delay_end = 0 - feedback_add_details("admin_verb","R") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSticker.delay_end = 0 + feedback_add_details("admin_verb","Hard Restart") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! world.Reboot("Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key].", "end_error", "admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]", 10) /datum/admins/proc/end_round() @@ -437,8 +433,8 @@ var/global/BSACooldown = 0 if(confirm == "Cancel") return if(confirm == "Yes") - ticker.force_ending = 1 - feedback_add_details("admin_verb","ER") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSticker.force_ending = 1 + feedback_add_details("admin_verb","End Round") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/announce() @@ -454,7 +450,7 @@ var/global/BSACooldown = 0 message = adminscrub(message,500) to_chat(world, "[usr.client.holder.fakekey ? "Administrator" : usr.key] Announces:\n \t [message]") log_admin("Announce: [key_name(usr)] : [message]") - feedback_add_details("admin_verb","A") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Announce") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/set_admin_notice() set category = "Special Verbs" @@ -463,20 +459,20 @@ var/global/BSACooldown = 0 if(!check_rights(0)) return - var/new_admin_notice = input(src,"Set a public notice for this round. Everyone who joins the server will see it.\n(Leaving it blank will delete the current notice):","Set Notice",admin_notice) as message|null + var/new_admin_notice = input(src,"Set a public notice for this round. Everyone who joins the server will see it.\n(Leaving it blank will delete the current notice):","Set Notice",GLOB.admin_notice) as message|null if(new_admin_notice == null) return - if(new_admin_notice == admin_notice) + if(new_admin_notice == GLOB.admin_notice) return if(new_admin_notice == "") message_admins("[key_name(usr)] removed the admin notice.") - log_admin("[key_name(usr)] removed the admin notice:\n[admin_notice]") + log_admin("[key_name(usr)] removed the admin notice:\n[GLOB.admin_notice]") else message_admins("[key_name(usr)] set the admin notice.") log_admin("[key_name(usr)] set the admin notice:\n[new_admin_notice]") to_chat(world, "Admin Notice:\n \t [new_admin_notice]") - feedback_add_details("admin_verb","SAN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - admin_notice = new_admin_notice + feedback_add_details("admin_verb","Set Admin Notice") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + GLOB.admin_notice = new_admin_notice return /datum/admins/proc/toggleooc() @@ -486,41 +482,32 @@ var/global/BSACooldown = 0 toggle_ooc() log_admin("[key_name(usr)] toggled OOC.") message_admins("[key_name_admin(usr)] toggled OOC.") - feedback_add_details("admin_verb","TOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_toggle","Toggle OOC|[GLOB.ooc_allowed]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/toggleoocdead() set category = "Server" set desc="Toggle dis bitch" set name="Toggle Dead OOC" - dooc_allowed = !( dooc_allowed ) + GLOB.dooc_allowed = !( GLOB.dooc_allowed ) log_admin("[key_name(usr)] toggled OOC.") message_admins("[key_name_admin(usr)] toggled Dead OOC.") - feedback_add_details("admin_verb","TDOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/* -/datum/admins/proc/toggletraitorscaling() - set category = "Server" - set desc="Toggle traitor scaling" - set name="Toggle Traitor Scaling" - traitor_scaling = !traitor_scaling - log_admin("[key_name(usr)] toggled Traitor Scaling to [traitor_scaling].") - message_admins("[key_name_admin(usr)] toggled Traitor Scaling [traitor_scaling ? "on" : "off"].") - feedback_add_details("admin_verb","TTS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -*/ + feedback_add_details("admin_toggle","Toggle Dead OOC|[GLOB.dooc_allowed]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + /datum/admins/proc/startnow() set category = "Server" set desc="Start the round RIGHT NOW" set name="Start Now" - if(ticker.current_state == GAME_STATE_PREGAME || ticker.current_state == GAME_STATE_STARTUP) - ticker.start_immediately = TRUE + if(SSticker.current_state == GAME_STATE_PREGAME || SSticker.current_state == GAME_STATE_STARTUP) + SSticker.start_immediately = TRUE log_admin("[usr.key] has started the game.") var/msg = "" - if(ticker.current_state == GAME_STATE_STARTUP) + if(SSticker.current_state == GAME_STATE_STARTUP) msg = " (The server is still setting up, but the round will be \ started as soon as possible.)" message_admins("\ [usr.key] has started the game.[msg]") - feedback_add_details("admin_verb","SN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Start Now") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return 1 else to_chat(usr, "Error: Start Now: Game has already started.") @@ -531,15 +518,15 @@ var/global/BSACooldown = 0 set category = "Server" set desc="People can't enter" set name="Toggle Entering" - enter_allowed = !( enter_allowed ) - if (!( enter_allowed )) + GLOB.enter_allowed = !( GLOB.enter_allowed ) + if (!( GLOB.enter_allowed )) to_chat(world, "New players may no longer enter the game.") else to_chat(world, "New players may now enter the game.") log_admin("[key_name(usr)] toggled new player game entering.") message_admins("[key_name_admin(usr)] toggled new player game entering.") world.update_status() - feedback_add_details("admin_verb","TE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_toggle","Toggle Entering|[GLOB.enter_allowed]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/toggleAI() set category = "Server" @@ -552,32 +539,32 @@ var/global/BSACooldown = 0 to_chat(world, "The AI job is chooseable now.") log_admin("[key_name(usr)] toggled AI allowed.") world.update_status() - feedback_add_details("admin_verb","TAI") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_toggle","Toggle AI|[config.allow_ai]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/toggleaban() set category = "Server" set desc="Respawn basically" set name="Toggle Respawn" - abandon_allowed = !( abandon_allowed ) - if (abandon_allowed) + GLOB.abandon_allowed = !( GLOB.abandon_allowed ) + if (GLOB.abandon_allowed) to_chat(world, "You may now respawn.") else to_chat(world, "You may no longer respawn :(") - message_admins("[key_name_admin(usr)] toggled respawn to [abandon_allowed ? "On" : "Off"].") - log_admin("[key_name(usr)] toggled respawn to [abandon_allowed ? "On" : "Off"].") + message_admins("[key_name_admin(usr)] toggled respawn to [GLOB.abandon_allowed ? "On" : "Off"].") + log_admin("[key_name(usr)] toggled respawn to [GLOB.abandon_allowed ? "On" : "Off"].") world.update_status() - feedback_add_details("admin_verb","TR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_toggle","Toggle Respawn|[GLOB.abandon_allowed]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/delay() set category = "Server" set desc="Delay the game start" set name="Delay pre-game" - var/newtime = input("Set a new time in seconds. Set -1 for indefinite delay.","Set Delay",round(ticker.GetTimeLeft()/10)) as num|null - if(ticker.current_state > GAME_STATE_PREGAME) + var/newtime = input("Set a new time in seconds. Set -1 for indefinite delay.","Set Delay",round(SSticker.GetTimeLeft()/10)) as num|null + if(SSticker.current_state > GAME_STATE_PREGAME) return alert("Too late... The game has already started!") if(newtime) - ticker.SetTimeLeft(newtime * 10) + SSticker.SetTimeLeft(newtime * 10) if(newtime < 0) to_chat(world, "The game start has been delayed.") log_admin("[key_name(usr)] delayed the round start.") @@ -585,18 +572,18 @@ var/global/BSACooldown = 0 to_chat(world, "The game will start in [newtime] seconds.") world << 'sound/ai/attention.ogg' log_admin("[key_name(usr)] set the pre-game delay to [newtime] seconds.") - feedback_add_details("admin_verb","DELAY") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Delay Game Start") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/datum/admins/proc/unprison(mob/M in mob_list) +/datum/admins/proc/unprison(mob/M in GLOB.mob_list) set category = "Admin" set name = "Unprison" if (M.z == ZLEVEL_CENTCOM) - M.loc = pick(latejoin) + M.loc = pick(GLOB.latejoin) message_admins("[key_name_admin(usr)] has unprisoned [key_name_admin(M)]") log_admin("[key_name(usr)] has unprisoned [key_name(M)]") else alert("[M.name] is not prisoned.") - feedback_add_details("admin_verb","UP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Unprison") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! ////////////////////////////////////////////////////////////////////////////////////////////////ADMIN HELPER PROCS @@ -637,10 +624,10 @@ var/global/BSACooldown = 0 A.admin_spawned = TRUE log_admin("[key_name(usr)] spawned [chosen] at ([usr.x],[usr.y],[usr.z])") - feedback_add_details("admin_verb","SA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Spawn Atom") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/datum/admins/proc/show_traitor_panel(mob/M in mob_list) +/datum/admins/proc/show_traitor_panel(mob/M in GLOB.mob_list) set category = "Admin" set desc = "Edit mobs's memory and role" set name = "Show Traitor Panel" @@ -653,38 +640,38 @@ var/global/BSACooldown = 0 return M.mind.edit_memory() - feedback_add_details("admin_verb","STP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Traitor Panel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/toggletintedweldhelmets() set category = "Debug" set desc="Reduces view range when wearing welding helmets" set name="Toggle tinted welding helmes" - tinted_weldhelh = !( tinted_weldhelh ) - if (tinted_weldhelh) + GLOB.tinted_weldhelh = !( GLOB.tinted_weldhelh ) + if (GLOB.tinted_weldhelh) to_chat(world, "The tinted_weldhelh has been enabled!") else to_chat(world, "The tinted_weldhelh has been disabled!") log_admin("[key_name(usr)] toggled tinted_weldhelh.") message_admins("[key_name_admin(usr)] toggled tinted_weldhelh.") - feedback_add_details("admin_verb","TTWH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_toggle","Toggle Tinted Welding Helmets|[GLOB.tinted_weldhelh]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/toggleguests() set category = "Server" set desc="Guests can't enter" set name="Toggle guests" - guests_allowed = !( guests_allowed ) - if (!( guests_allowed )) + GLOB.guests_allowed = !( GLOB.guests_allowed ) + if (!( GLOB.guests_allowed )) to_chat(world, "Guests may no longer enter the game.") else to_chat(world, "Guests may now enter the game.") - log_admin("[key_name(usr)] toggled guests game entering [guests_allowed?"":"dis"]allowed.") - message_admins("[key_name_admin(usr)] toggled guests game entering [guests_allowed?"":"dis"]allowed.") - feedback_add_details("admin_verb","TGU") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + log_admin("[key_name(usr)] toggled guests game entering [GLOB.guests_allowed?"":"dis"]allowed.") + message_admins("[key_name_admin(usr)] toggled guests game entering [GLOB.guests_allowed?"":"dis"]allowed.") + feedback_add_details("admin_toggle","Toggle Guests|[GLOB.guests_allowed]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/output_ai_laws() var/ai_number = 0 - for(var/mob/living/silicon/S in mob_list) + for(var/mob/living/silicon/S in GLOB.mob_list) ai_number++ if(isAI(S)) to_chat(usr, "AI [key_name(S, usr)]'s laws:") @@ -705,15 +692,15 @@ var/global/BSACooldown = 0 /datum/admins/proc/output_all_devil_info() var/devil_number = 0 - for(var/D in ticker.mode.devils) + for(var/D in SSticker.mode.devils) devil_number++ - to_chat(usr, "Devil #[devil_number]:

    " + ticker.mode.printdevilinfo(D)) + to_chat(usr, "Devil #[devil_number]:

    " + SSticker.mode.printdevilinfo(D)) if(!devil_number) to_chat(usr, "No Devils located" ) /datum/admins/proc/output_devil_info(mob/living/M) if(istype(M) && M.mind && M.mind.devilinfo) - to_chat(usr, ticker.mode.printdevilinfo(M.mind)) + to_chat(usr, SSticker.mode.printdevilinfo(M.mind)) else to_chat(usr, "[M] is not a devil.") @@ -723,7 +710,7 @@ var/global/BSACooldown = 0 var/dat = "Manage Free Slots" var/count = 0 - if(ticker && !ticker.mode) + if(SSticker && !SSticker.mode) alert(usr, "You cannot manage jobs before the round starts!") return @@ -772,7 +759,7 @@ var/global/BSACooldown = 0 //returns a list of ckeys of the kicked clients /proc/kick_clients_in_lobby(message, kick_only_afk = 0) var/list/kicked_client_names = list() - for(var/client/C in clients) + for(var/client/C in GLOB.clients) if(isnewplayer(C.mob)) if(kick_only_afk && !C.is_afk()) //Ignore clients who are not afk continue @@ -809,7 +796,7 @@ var/global/BSACooldown = 0 message_admins("[key_name_admin(usr)] has put [frommob.ckey] in control of [tomob.name].") log_admin("[key_name(usr)] stuffed [frommob.ckey] into [tomob.name].") - feedback_add_details("admin_verb","CGD") + feedback_add_details("admin_verb","Ghost Drag Control") tomob.ckey = frommob.ckey qdel(frommob) @@ -817,7 +804,7 @@ var/global/BSACooldown = 0 return 1 /client/proc/adminGreet(logout) - if(ticker && ticker.current_state == GAME_STATE_PLAYING) + if(SSticker && SSticker.current_state == GAME_STATE_PLAYING) var/string if(logout && config && config.announce_admin_logout) string = pick( @@ -826,4 +813,4 @@ var/global/BSACooldown = 0 string = pick( "Admin login: [key_name(src)]") if(string) - message_admins("[string]") \ No newline at end of file + message_admins("[string]") diff --git a/code/modules/admin/admin_investigate.dm b/code/modules/admin/admin_investigate.dm index 12c587c868..f5704db604 100644 --- a/code/modules/admin/admin_investigate.dm +++ b/code/modules/admin/admin_investigate.dm @@ -38,8 +38,8 @@ return src << browse(F,"window=investigate[subject];size=800x300") if("hrefs") //persistent logs and stuff - if(href_logfile) - src << browse(href_logfile,"window=investigate[subject];size=800x300") + if(GLOB.href_logfile) + src << browse(GLOB.href_logfile,"window=investigate[subject];size=800x300") else if(!config.log_hrefs) to_chat(src, "Href logging is off and no logfile was found.") return diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm index 079415f864..4e6b14ff67 100644 --- a/code/modules/admin/admin_ranks.dm +++ b/code/modules/admin/admin_ranks.dm @@ -1,4 +1,5 @@ -var/list/admin_ranks = list() //list of all admin_rank datums +GLOBAL_LIST_EMPTY(admin_ranks) //list of all admin_rank datums +GLOBAL_PROTECT(admin_ranks) /datum/admin_rank var/name = "NoRank" @@ -99,7 +100,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums //load our rank - > rights associations /proc/load_admin_ranks() - admin_ranks.Cut() + GLOB.admin_ranks.Cut() if(config.admin_legacy_system) var/previous_rights = 0 @@ -114,7 +115,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums var/datum/admin_rank/R = new(ckeyEx(copytext(line, 1, next))) if(!R) continue - admin_ranks += R + GLOB.admin_ranks += R var/prev = findchar(line, "+-", next, 0) while(prev) @@ -124,14 +125,14 @@ var/list/admin_ranks = list() //list of all admin_rank datums previous_rights = R.rights else - if(!dbcon.Connect()) + if(!GLOB.dbcon.Connect()) log_world("Failed to connect to database in load_admin_ranks(). Reverting to legacy system.") - diary << "Failed to connect to database in load_admin_ranks(). Reverting to legacy system." + GLOB.diary << "Failed to connect to database in load_admin_ranks(). Reverting to legacy system." config.admin_legacy_system = 1 load_admin_ranks() return - var/DBQuery/query_load_admin_ranks = dbcon.NewQuery("SELECT rank, flags FROM [format_table_name("admin_ranks")]") + var/DBQuery/query_load_admin_ranks = GLOB.dbcon.NewQuery("SELECT rank, flags FROM [format_table_name("admin_ranks")]") if(!query_load_admin_ranks.Execute()) return while(query_load_admin_ranks.NextRow()) @@ -142,11 +143,11 @@ var/list/admin_ranks = list() //list of all admin_rank datums var/datum/admin_rank/R = new(rank_name, flags) if(!R) continue - admin_ranks += R + GLOB.admin_ranks += R #ifdef TESTING var/msg = "Permission Sets Built:\n" - for(var/datum/admin_rank/R in admin_ranks) + for(var/datum/admin_rank/R in GLOB.admin_ranks) msg += "\t[R.name]" var/rights = rights2text(R.rights,"\n\t\t",R.adds,R.subs) if(rights) @@ -158,18 +159,18 @@ var/list/admin_ranks = list() //list of all admin_rank datums /proc/load_admins(target = null) //clear the datums references if(!target) - admin_datums.Cut() - for(var/client/C in admins) + GLOB.admin_datums.Cut() + for(var/client/C in GLOB.admins) C.remove_admin_verbs() C.holder = null - admins.Cut() + GLOB.admins.Cut() load_admin_ranks() //Clear profile access for(var/A in world.GetConfig("admin")) world.SetConfig("APP/admin", A, null) var/list/rank_names = list() - for(var/datum/admin_rank/R in admin_ranks) + for(var/datum/admin_rank/R in GLOB.admin_ranks) rank_names[R.name] = R if(config.admin_legacy_system) @@ -197,16 +198,16 @@ var/list/admin_ranks = list() //list of all admin_rank datums continue //will occur if an invalid rank is provided if(D.rank.rights & R_DEBUG) //grant profile access world.SetConfig("APP/admin", ckey, "role=admin") - D.associate(directory[ckey]) //find the client for a ckey if they are connected and associate them with the new admin datum + D.associate(GLOB.directory[ckey]) //find the client for a ckey if they are connected and associate them with the new admin datum else - if(!dbcon.Connect()) + if(!GLOB.dbcon.Connect()) log_world("Failed to connect to database in load_admins(). Reverting to legacy system.") - diary << "Failed to connect to database in load_admins(). Reverting to legacy system." + GLOB.diary << "Failed to connect to database in load_admins(). Reverting to legacy system." config.admin_legacy_system = 1 load_admins() return - var/DBQuery/query_load_admins = dbcon.NewQuery("SELECT ckey, rank FROM [format_table_name("admin")]") + var/DBQuery/query_load_admins = GLOB.dbcon.NewQuery("SELECT ckey, rank FROM [format_table_name("admin")]") if(!query_load_admins.Execute()) return while(query_load_admins.NextRow()) @@ -224,19 +225,19 @@ var/list/admin_ranks = list() //list of all admin_rank datums continue //will occur if an invalid rank is provided if(D.rank.rights & R_DEBUG) //grant profile access world.SetConfig("APP/admin", ckey, "role=admin") - D.associate(directory[ckey]) //find the client for a ckey if they are connected and associate them with the new admin datum + D.associate(GLOB.directory[ckey]) //find the client for a ckey if they are connected and associate them with the new admin datum #ifdef TESTING var/msg = "Admins Built:\n" - for(var/ckey in admin_datums) - var/datum/admins/D = admin_datums[ckey] + for(var/ckey in GLOB.admin_datums) + var/datum/admins/D = GLOB.admin_datums[ckey] msg += "\t[ckey] - [D.rank.name]\n" testing(msg) #endif #ifdef TESTING -/client/verb/changerank(newrank in admin_ranks) +/client/verb/changerank(newrank in GLOB.admin_ranks) if(holder) holder.rank = newrank else @@ -266,7 +267,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums var/new_ckey = ckey(input(usr,"New admin's ckey","Admin ckey", null) as text|null) if(!new_ckey) return - if(new_ckey in admin_datums) + if(new_ckey in GLOB.admin_datums) to_chat(usr, "Error: Topic 'editrights': [new_ckey] is already an admin") return adm_ckey = new_ckey @@ -277,7 +278,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums to_chat(usr, "Error: Topic 'editrights': No valid ckey") return - var/datum/admins/D = admin_datums[adm_ckey] + var/datum/admins/D = GLOB.admin_datums[adm_ckey] switch(task) if("remove") @@ -288,7 +289,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums message_admins("[key_name_admin(usr)] attempted to remove [adm_ckey] from the admins list without sufficient rights.") log_admin("[key_name(usr)] attempted to remove [adm_ckey] from the admins list without sufficient rights.") return - admin_datums -= adm_ckey + GLOB.admin_datums -= adm_ckey D.disassociate() updateranktodb(adm_ckey, "player") @@ -300,7 +301,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums var/datum/admin_rank/R var/list/rank_names = list("*New Rank*") - for(R in admin_ranks) + for(R in GLOB.admin_ranks) rank_names[R.name] = R var/new_rank = input("Please select a rank", "New rank", null, null) as null|anything in rank_names @@ -325,7 +326,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums R = new(new_rank, D.rank.rights, D.rank.adds, D.rank.subs) //duplicate our previous admin_rank but with a new name else R = new(new_rank) //blank new admin_rank - admin_ranks += R + GLOB.admin_ranks += R if(D) //they were previously an admin D.disassociate() //existing admin needs to be disassociated @@ -333,7 +334,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums else D = new(R,adm_ckey) //new admin - var/client/C = directory[adm_ckey] //find the client with the specified ckey (if they are logged in) + var/client/C = GLOB.directory[adm_ckey] //find the client with the specified ckey (if they are logged in) D.associate(C) //link up with the client and add verbs updateranktodb(adm_ckey, new_rank) @@ -362,7 +363,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums D.rank.process_keyword(keyword) - var/client/C = directory[adm_ckey] //find the client with the specified ckey (if they are logged in) + var/client/C = GLOB.directory[adm_ckey] //find the client with the specified ckey (if they are logged in) D.associate(C) //link up with the client and add verbs message_admins("[key_name(usr)] added keyword [keyword] to permission of [adm_ckey]") @@ -372,10 +373,10 @@ var/list/admin_ranks = list() //list of all admin_rank datums edit_admin_permissions() /datum/admins/proc/updateranktodb(ckey,newrank) - if(!dbcon.Connect()) + if(!GLOB.dbcon.Connect()) return var/sql_ckey = sanitizeSQL(ckey) var/sql_admin_rank = sanitizeSQL(newrank) - var/DBQuery/query_admin_rank_update = dbcon.NewQuery("UPDATE [format_table_name("player")] SET lastadminrank = '[sql_admin_rank]' WHERE ckey = '[sql_ckey]'") + var/DBQuery/query_admin_rank_update = GLOB.dbcon.NewQuery("UPDATE [format_table_name("player")] SET lastadminrank = '[sql_admin_rank]' WHERE ckey = '[sql_ckey]'") query_admin_rank_update.Execute() diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index bc65121f4b..abd38f99cd 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -1,5 +1,8 @@ //admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless -var/list/admin_verbs_default = list( +GLOBAL_PROTECT(admin_verbs_default) +GLOBAL_LIST_INIT(admin_verbs_default, AVerbsDefault()) +/proc/AVerbsDefault() + return list( /client/proc/toggleadminhelpsound, /*toggles whether we hear a sound when adminhelps/PMs are used*/ /client/proc/toggleannouncelogin, /*toggles if an admin's login is announced during a round*/ /client/proc/deadmin, /*destroys our own admin datum so we can play as a regular player*/ @@ -20,10 +23,13 @@ var/list/admin_verbs_default = list( /client/proc/reestablish_db_connection,/*reattempt a connection to the database*/ /client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/ /client/proc/cmd_admin_pm_panel, /*admin-pm list*/ - /client/proc/stop_sounds, /client/proc/mentor_memo, /*mentor memo system. show/delete/write. +SERVER needed to delete mentor memos of others*/ + /client/proc/stop_sounds ) -var/list/admin_verbs_admin = list( +GLOBAL_PROTECT(admin_verbs_admin) +GLOBAL_LIST_INIT(admin_verbs_admin, AVerbsAdmin()) +/proc/AVerbsAdmin() + return list( /client/proc/player_panel_new, /*shows an interface for all players, with links to various panels*/ /client/proc/invisimin, /*allows our mob to go invisible/visible*/ // /datum/admins/proc/show_traitor_panel, /*interface which shows a mob's mind*/ -Removed due to rare practical use. Moved to debug verbs ~Errorage @@ -67,20 +73,16 @@ var/list/admin_verbs_admin = list( /client/proc/toggle_AI_interact, /*toggle admin ability to interact with machines as an AI*/ /client/proc/customiseSNPC, /* Customise any interactive crewmembers in the world */ /client/proc/resetSNPC, /* Resets any interactive crewmembers in the world */ - /client/proc/toggleSNPC, /* Toggles an npc's processing mode */ /client/proc/open_shuttle_manipulator /* Opens shuttle manipulator UI */ ) -var/list/admin_verbs_ban = list( - /client/proc/unban_panel, - /client/proc/DB_ban_panel, - /client/proc/stickybanpanel - ) -var/list/admin_verbs_sounds = list( - /client/proc/play_local_sound, - /client/proc/play_sound, - /client/proc/set_round_end_sound, - ) -var/list/admin_verbs_fun = list( +GLOBAL_PROTECT(admin_verbs_ban) +GLOBAL_LIST_INIT(admin_verbs_ban, list(/client/proc/unban_panel,/client/proc/DB_ban_panel,/client/proc/stickybanpanel)) +GLOBAL_PROTECT(admin_verbs_sounds) +GLOBAL_LIST_INIT(admin_verbs_sounds, list(/client/proc/play_local_sound,/client/proc/play_sound,/client/proc/set_round_end_sound)) +GLOBAL_PROTECT(admin_verbs_fun) +GLOBAL_LIST_INIT(admin_verbs_fun, AVerbsFun()) +/proc/AVerbsFun() + return list( /client/proc/cmd_admin_dress, /client/proc/cmd_admin_gib_self, /client/proc/drop_bomb, @@ -95,19 +97,20 @@ var/list/admin_verbs_fun = list( /client/proc/set_ooc, /client/proc/reset_ooc, /client/proc/forceEvent, - /client/proc/bluespace_artillery, /client/proc/admin_change_sec_level, /client/proc/toggle_nuke, /client/proc/mass_zombie_infection, /client/proc/mass_zombie_cure, /client/proc/polymorph_all, - /client/proc/show_tip + /client/proc/show_tip, + /client/proc/smite ) -var/list/admin_verbs_spawn = list( - /datum/admins/proc/spawn_atom, /*allows us to spawn instances*/ - /client/proc/respawn_character - ) -var/list/admin_verbs_server = list( +GLOBAL_PROTECT(admin_verbs_spawn) +GLOBAL_LIST_INIT(admin_verbs_spawn, list(/datum/admins/proc/spawn_atom,/client/proc/respawn_character)) +GLOBAL_PROTECT(admin_verbs_server) +GLOBAL_LIST_INIT(admin_verbs_server, AVerbsServer()) +/proc/AVerbsServer() + return list( /datum/admins/proc/startnow, /datum/admins/proc/restart, /datum/admins/proc/end_round, @@ -123,9 +126,11 @@ var/list/admin_verbs_server = list( /client/proc/adminchangemap, /client/proc/panicbunker, /client/proc/toggle_hub - ) -var/list/admin_verbs_debug = list( +GLOBAL_PROTECT(admin_verbs_debug) +GLOBAL_LIST_INIT(admin_verbs_debug, AVerbsDebug()) +/proc/AVerbsDebug() + return list( /client/proc/restart_controller, /client/proc/cmd_admin_list_open_jobs, /client/proc/Debug2, @@ -133,6 +138,7 @@ var/list/admin_verbs_debug = list( /client/proc/cmd_debug_mob_lists, /client/proc/cmd_admin_delete, /client/proc/cmd_debug_del_all, + /client/proc/restart_controller, /client/proc/enable_debug_verbs, /client/proc/callproc, /client/proc/callproc_datum, @@ -143,9 +149,6 @@ var/list/admin_verbs_debug = list( /client/proc/check_bomb_impacts, /proc/machine_upgrade, /client/proc/populate_world, - //citadel code - /client/proc/give_humans_genitals, - /client/proc/test_mammal_overlays, /client/proc/get_dynex_power, //*debug verbs for dynex explosions. /client/proc/get_dynex_range, //*debug verbs for dynex explosions. /client/proc/set_dynex_scale, @@ -159,22 +162,23 @@ var/list/admin_verbs_debug = list( /client/proc/clear_dynamic_transit, /client/proc/toggle_medal_disable, /client/proc/view_runtimes, + //citadel code + /client/proc/give_humans_genitals, + /client/proc/test_mammal_overlays, /client/proc/pump_random_event ) -var/list/admin_verbs_possess = list( - /proc/possess, - /proc/release - ) -var/list/admin_verbs_permissions = list( - /client/proc/edit_admin_permissions, - /client/proc/create_poll - ) -var/list/admin_verbs_rejuv = list( - /client/proc/respawn_character - ) +GLOBAL_PROTECT(admin_verbs_possess) +GLOBAL_LIST_INIT(admin_verbs_possess, list(/proc/possess,/proc/release)) +GLOBAL_PROTECT(admin_verbs_permissions) +GLOBAL_LIST_INIT(admin_verbs_permissions, list(/client/proc/edit_admin_permissions,/client/proc/create_poll)) +GLOBAL_PROTECT(admin_verbs_rejuv) +GLOBAL_LIST_INIT(admin_verbs_rejuv, list(/client/proc/respawn_character)) //verbs which can be hidden - needs work -var/list/admin_verbs_hideable = list( +GLOBAL_PROTECT(admin_verbs_hideable) +GLOBAL_LIST_INIT(admin_verbs_hideable, AVerbsHideable()) +/proc/AVerbsHideable() + return list( /client/proc/set_ooc, /client/proc/reset_ooc, /client/proc/deadmin, @@ -244,7 +248,6 @@ var/list/admin_verbs_hideable = list( /client/proc/debug_huds, /client/proc/customiseSNPC, /client/proc/resetSNPC, - /client/proc/toggleSNPC ) /client/proc/add_admin_verbs() @@ -252,32 +255,31 @@ var/list/admin_verbs_hideable = list( control_freak = CONTROL_FREAK_SKIN | CONTROL_FREAK_MACROS var/rights = holder.rank.rights - verbs += admin_verbs_default - verbs += /client/proc/cmd_mentor_say + verbs += GLOB.admin_verbs_default if(rights & R_BUILDMODE) verbs += /client/proc/togglebuildmodeself if(rights & R_ADMIN) - verbs += admin_verbs_admin + verbs += GLOB.admin_verbs_admin if(rights & R_BAN) - verbs += admin_verbs_ban + verbs += GLOB.admin_verbs_ban if(rights & R_FUN) - verbs += admin_verbs_fun + verbs += GLOB.admin_verbs_fun if(rights & R_SERVER) - verbs += admin_verbs_server + verbs += GLOB.admin_verbs_server if(rights & R_DEBUG) - verbs += admin_verbs_debug + verbs += GLOB.admin_verbs_debug if(rights & R_POSSESS) - verbs += admin_verbs_possess + verbs += GLOB.admin_verbs_possess if(rights & R_PERMISSIONS) - verbs += admin_verbs_permissions + verbs += GLOB.admin_verbs_permissions if(rights & R_STEALTH) verbs += /client/proc/stealth if(rights & R_REJUVINATE) - verbs += admin_verbs_rejuv + verbs += GLOB.admin_verbs_rejuv if(rights & R_SOUNDS) - verbs += admin_verbs_sounds + verbs += GLOB.admin_verbs_sounds if(rights & R_SPAWN) - verbs += admin_verbs_spawn + verbs += GLOB.admin_verbs_spawn for(var/path in holder.rank.adds) verbs += path @@ -286,19 +288,19 @@ var/list/admin_verbs_hideable = list( /client/proc/remove_admin_verbs() verbs.Remove( - admin_verbs_default, + GLOB.admin_verbs_default, /client/proc/togglebuildmodeself, - admin_verbs_admin, - admin_verbs_ban, - admin_verbs_fun, - admin_verbs_server, - admin_verbs_debug, - admin_verbs_possess, - admin_verbs_permissions, + GLOB.admin_verbs_admin, + GLOB.admin_verbs_ban, + GLOB.admin_verbs_fun, + GLOB.admin_verbs_server, + GLOB.admin_verbs_debug, + GLOB.admin_verbs_possess, + GLOB.admin_verbs_permissions, /client/proc/stealth, - admin_verbs_rejuv, - admin_verbs_sounds, - admin_verbs_spawn, + GLOB.admin_verbs_rejuv, + GLOB.admin_verbs_sounds, + GLOB.admin_verbs_spawn, /*Debug verbs added by "show debug verbs"*/ /client/proc/Cell, /client/proc/do_not_use_these, @@ -324,11 +326,11 @@ var/list/admin_verbs_hideable = list( set name = "Adminverbs - Hide Most" set category = "Admin" - verbs.Remove(/client/proc/hide_most_verbs, admin_verbs_hideable) + verbs.Remove(/client/proc/hide_most_verbs, GLOB.admin_verbs_hideable) verbs += /client/proc/show_verbs to_chat(src, "Most of your adminverbs have been hidden.") - feedback_add_details("admin_verb","HMV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Hide Most Adminverbs") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return /client/proc/hide_verbs() @@ -339,7 +341,7 @@ var/list/admin_verbs_hideable = list( verbs += /client/proc/show_verbs to_chat(src, "Almost all of your adminverbs have been hidden.") - feedback_add_details("admin_verb","TAVVH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Hide All Adminverbs") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return /client/proc/show_verbs() @@ -350,7 +352,7 @@ var/list/admin_verbs_hideable = list( add_admin_verbs() to_chat(src, "All of your adminverbs are now visible.") - feedback_add_details("admin_verb","TAVVS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Show Adminverbs") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -370,7 +372,7 @@ var/list/admin_verbs_hideable = list( message_admins("[key_name_admin(usr)] re-entered corpse") 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! + feedback_add_details("admin_verb","Admin Reenter") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! else if(isnewplayer(mob)) to_chat(src, "Error: Aghost: Can't admin-ghost whilst in the lobby. Join or Observe first.") else @@ -381,7 +383,7 @@ var/list/admin_verbs_hideable = list( body.ghostize(1) if(body && !body.key) body.key = "@[key]" //Haaaaaaaack. But the people have spoken. If it breaks; blame adminbus - feedback_add_details("admin_verb","O") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Admin Ghost") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/invisimin() @@ -401,8 +403,7 @@ var/list/admin_verbs_hideable = list( set category = "Admin" if(holder) holder.player_panel_new() - feedback_add_details("admin_verb","PPN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - return + feedback_add_details("admin_verb","Player Panel New") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/check_antagonists() set name = "Check Antagonists" @@ -412,8 +413,7 @@ var/list/admin_verbs_hideable = list( log_admin("[key_name(usr)] checked antagonists.") //for tsar~ if(!isobserver(usr)) message_admins("[key_name_admin(usr)] checked antagonists.") - feedback_add_details("admin_verb","CHA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - return + feedback_add_details("admin_verb","Check Antagonists") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/unban_panel() set name = "Unban Panel" @@ -423,32 +423,29 @@ var/list/admin_verbs_hideable = list( holder.unbanpanel() else holder.DB_ban_panel() - feedback_add_details("admin_verb","UBP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - return + feedback_add_details("admin_verb","Unban Panel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/game_panel() set name = "Game Panel" set category = "Admin" if(holder) holder.Game() - feedback_add_details("admin_verb","GP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - return + feedback_add_details("admin_verb","Game Panel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/secrets() set name = "Secrets" set category = "Admin" if (holder) holder.Secrets() - feedback_add_details("admin_verb","S") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - return + feedback_add_details("admin_verb","Secrets Panel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/findStealthKey(txt) if(txt) - for(var/P in stealthminID) - if(stealthminID[P] == txt) + for(var/P in GLOB.stealthminID) + if(GLOB.stealthminID[P] == txt) return P - txt = stealthminID[ckey] + txt = GLOB.stealthminID[ckey] return txt /client/proc/createStealthKey() @@ -456,11 +453,11 @@ var/list/admin_verbs_hideable = list( var/i = 0 while(i == 0) i = 1 - for(var/P in stealthminID) - if(num == stealthminID[P]) + for(var/P in GLOB.stealthminID) + if(num == GLOB.stealthminID[P]) num++ i = 0 - stealthminID["[ckey]"] = "@[num2text(num)]" + GLOB.stealthminID["[ckey]"] = "@[num2text(num)]" /client/proc/stealth() set category = "Admin" @@ -488,10 +485,10 @@ var/list/admin_verbs_hideable = list( mob.mouse_opacity = 0 log_admin("[key_name(usr)] has turned stealth mode [holder.fakekey ? "ON" : "OFF"]") message_admins("[key_name_admin(usr)] has turned stealth mode [holder.fakekey ? "ON" : "OFF"]") - feedback_add_details("admin_verb","SM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Stealth Mode") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/drop_bomb() - set category = "Dangerous" + set category = "Special Verbs" set name = "Drop Bomb" set desc = "Cause an explosion of varying strength at your location." @@ -509,7 +506,7 @@ var/list/admin_verbs_hideable = list( if("Big Bomb (3, 5, 7, 5)") explosion(epicenter, 3, 5, 7, 5, TRUE, TRUE) if("Maxcap") - explosion(epicenter, MAX_EX_DEVESTATION_RANGE, MAX_EX_HEAVY_RANGE, MAX_EX_LIGHT_RANGE, MAX_EX_FLASH_RANGE) + explosion(epicenter, GLOB.MAX_EX_DEVESTATION_RANGE, GLOB.MAX_EX_HEAVY_RANGE, GLOB.MAX_EX_LIGHT_RANGE, GLOB.MAX_EX_FLASH_RANGE) if("Custom Bomb") var/devastation_range = input("Devastation range (in tiles):") as null|num if(devastation_range == null) @@ -523,17 +520,17 @@ var/list/admin_verbs_hideable = list( var/flash_range = input("Flash range (in tiles):") as null|num if(flash_range == null) return - if(devastation_range > MAX_EX_DEVESTATION_RANGE || heavy_impact_range > MAX_EX_HEAVY_RANGE || light_impact_range > MAX_EX_LIGHT_RANGE || flash_range > MAX_EX_FLASH_RANGE) + if(devastation_range > GLOB.MAX_EX_DEVESTATION_RANGE || heavy_impact_range > GLOB.MAX_EX_HEAVY_RANGE || light_impact_range > GLOB.MAX_EX_LIGHT_RANGE || flash_range > GLOB.MAX_EX_FLASH_RANGE) if(alert("Bomb is bigger than the maxcap. Continue?",,"Yes","No") != "Yes") return epicenter = mob.loc //We need to reupdate as they may have moved again explosion(epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, TRUE, TRUE) message_admins("[ADMIN_LOOKUPFLW(usr)] creating an admin explosion at [epicenter.loc].") log_admin("[key_name(usr)] created an admin explosion at [epicenter.loc].") - feedback_add_details("admin_verb","DB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Drop Bomb") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/drop_dynex_bomb() - set category = "Dangerous" + set category = "Special Verbs" set name = "Drop DynEx Bomb" set desc = "Cause an explosion of varying strength at your location." @@ -543,7 +540,7 @@ var/list/admin_verbs_hideable = list( dyn_explosion(epicenter, ex_power) message_admins("[ADMIN_LOOKUPFLW(usr)] creating an admin explosion at [epicenter.loc].") log_admin("[key_name(usr)] created an admin explosion at [epicenter.loc].") - feedback_add_details("admin_verb","DDXB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Drop Dynamic Bomb") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/get_dynex_range() set category = "Debug" @@ -551,7 +548,7 @@ var/list/admin_verbs_hideable = list( set desc = "Get the estimated range of a bomb, using explosive power." var/ex_power = input("Explosive Power:") as null|num - var/range = round((2 * ex_power)**DYN_EX_SCALE) + var/range = round((2 * ex_power)**GLOB.DYN_EX_SCALE) to_chat(usr, "Estimated Explosive Range: (Devestation: [round(range*0.25)], Heavy: [round(range*0.5)], Light: [round(range)])") /client/proc/get_dynex_power() @@ -560,7 +557,7 @@ var/list/admin_verbs_hideable = list( set desc = "Get the estimated required power of a bomb, to reach a specific range." var/ex_range = input("Light Explosion Range:") as null|num - var/power = (0.5 * ex_range)**(1/DYN_EX_SCALE) + var/power = (0.5 * ex_range)**(1/GLOB.DYN_EX_SCALE) to_chat(usr, "Estimated Explosive Power: [power]") /client/proc/set_dynex_scale() @@ -571,24 +568,24 @@ var/list/admin_verbs_hideable = list( var/ex_scale = input("New DynEx Scale:") as null|num if(!ex_scale) return - DYN_EX_SCALE = ex_scale + GLOB.DYN_EX_SCALE = ex_scale log_admin("[key_name(usr)] has modified Dynamic Explosion Scale: [ex_scale]") message_admins("[key_name_admin(usr)] has modified Dynamic Explosion Scale: [ex_scale]") -/client/proc/give_spell(mob/T in mob_list) +/client/proc/give_spell(mob/T in GLOB.mob_list) set category = "Fun" set name = "Give Spell" set desc = "Gives a spell to a mob." var/list/spell_list = list() var/type_length = length("/obj/effect/proc_holder/spell") + 2 - for(var/A in spells) + for(var/A in GLOB.spells) spell_list[copytext("[A]", type_length)] = A var/obj/effect/proc_holder/spell/S = input("Choose the spell to give to that guy", "ABRAKADABRA") as null|anything in spell_list if(!S) return - feedback_add_details("admin_verb","GS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Give Spell") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! log_admin("[key_name(usr)] gave [key_name(T)] the spell [S].") message_admins("[key_name_admin(usr)] gave [key_name(T)] the spell [S].") @@ -599,7 +596,7 @@ var/list/admin_verbs_hideable = list( T.AddSpell(new S) message_admins("Spells given to mindless mobs will not be transferred in mindswap or cloning!") -/client/proc/remove_spell(mob/T in mob_list) +/client/proc/remove_spell(mob/T in GLOB.mob_list) set category = "Fun" set name = "Remove Spell" set desc = "Remove a spell from the selected mob." @@ -610,16 +607,16 @@ var/list/admin_verbs_hideable = list( T.mind.RemoveSpell(S) log_admin("[key_name(usr)] removed the spell [S] from [key_name(T)].") message_admins("[key_name_admin(usr)] removed the spell [S] from [key_name(T)].") - feedback_add_details("admin_verb","RS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Remove Spell") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/give_disease(mob/T in mob_list) +/client/proc/give_disease(mob/T in GLOB.mob_list) set category = "Fun" set name = "Give Disease" set desc = "Gives a Disease to a mob." - var/datum/disease/D = input("Choose the disease to give to that guy", "ACHOO") as null|anything in diseases + var/datum/disease/D = input("Choose the disease to give to that guy", "ACHOO") as null|anything in SSdisease.diseases if(!D) return T.ForceContractDisease(new D) - feedback_add_details("admin_verb","GD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Give Disease") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! log_admin("[key_name(usr)] gave [key_name(T)] the disease [D].") message_admins("[key_name_admin(usr)] gave [key_name(T)] the disease [D].") @@ -630,19 +627,16 @@ var/list/admin_verbs_hideable = list( var/message = input(usr, "What do you want the message to be?", "Make Sound") as text | null if(!message) return - var/templanguages = O.languages_spoken - O.languages_spoken |= ALL O.say(message) - O.languages_spoken = templanguages log_admin("[key_name(usr)] made [O] at [O.x], [O.y], [O.z] say \"[message]\"") message_admins("[key_name_admin(usr)] made [O] at [O.x], [O.y], [O.z]. say \"[message]\"") - feedback_add_details("admin_verb","OS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Object Say") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/togglebuildmodeself() set name = "Toggle Build Mode Self" set category = "Special Verbs" if(src.mob) togglebuildmode(src.mob) - feedback_add_details("admin_verb","TBMS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Toggle Build Mode") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/toggle_log_hrefs() set name = "Toggle href logging" @@ -671,17 +665,20 @@ var/list/admin_verbs_hideable = list( if(!holder) return + if(has_antag_hud()) + toggle_antag_hud() + holder.disassociate() qdel(holder) - deadmins += ckey - admin_datums -= ckey + GLOB.deadmins += ckey + GLOB.admin_datums -= ckey verbs += /client/proc/readmin to_chat(src, "You are now a normal player.") log_admin("[src] deadmined themself.") message_admins("[src] deadmined themself.") - feedback_add_details("admin_verb","DAS") + feedback_add_details("admin_verb","Deadmin") /client/proc/readmin() set name = "Readmin" @@ -693,13 +690,13 @@ var/list/admin_verbs_hideable = list( if(!holder) // Something went wrong... return - deadmins -= ckey + GLOB.deadmins -= ckey verbs -= /client/proc/readmin to_chat(src, "You are now an admin.") message_admins("[src] re-adminned themselves.") log_admin("[src] re-adminned themselves.") - feedback_add_details("admin_verb","RAS") + feedback_add_details("admin_verb","Readmin") /client/proc/populate_world(amount = 50 as num) set name = "Populate World" @@ -716,7 +713,7 @@ var/list/admin_verbs_hideable = list( j = 100 do - area = pick(the_station_areas) + area = pick(GLOB.the_station_areas) if (area) diff --git a/code/modules/admin/banjob.dm b/code/modules/admin/banjob.dm index 75525b93f8..5dfd8c23ff 100644 --- a/code/modules/admin/banjob.dm +++ b/code/modules/admin/banjob.dm @@ -4,7 +4,7 @@ return 0 if(!M.client) //no cache. fallback to a DBQuery - var/DBQuery/query_jobban_check_ban = dbcon.NewQuery("SELECT reason FROM [format_table_name("ban")] WHERE ckey = '[sanitizeSQL(M.ckey)]' AND (bantype = 'JOB_PERMABAN' OR (bantype = 'JOB_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned) AND job = '[sanitizeSQL(rank)]'") + var/DBQuery/query_jobban_check_ban = GLOB.dbcon.NewQuery("SELECT reason FROM [format_table_name("ban")] WHERE ckey = '[sanitizeSQL(M.ckey)]' AND (bantype = 'JOB_PERMABAN' OR (bantype = 'JOB_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned) AND job = '[sanitizeSQL(rank)]'") if(!query_jobban_check_ban.warn_execute()) return if(query_jobban_check_ban.NextRow()) @@ -24,7 +24,7 @@ /proc/jobban_buildcache(client/C) if(C && istype(C)) C.jobbancache = list() - var/DBQuery/query_jobban_build_cache = dbcon.NewQuery("SELECT job, reason FROM [format_table_name("ban")] WHERE ckey = '[sanitizeSQL(C.ckey)]' AND (bantype = 'JOB_PERMABAN' OR (bantype = 'JOB_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)") + var/DBQuery/query_jobban_build_cache = GLOB.dbcon.NewQuery("SELECT job, reason FROM [format_table_name("ban")] WHERE ckey = '[sanitizeSQL(C.ckey)]' AND (bantype = 'JOB_PERMABAN' OR (bantype = 'JOB_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)") if(!query_jobban_build_cache.warn_execute()) return while(query_jobban_build_cache.NextRow()) diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index a5451f7622..cf0d4be37f 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -1,5 +1,6 @@ -/var/create_mob_html = null + /datum/admins/proc/create_mob(mob/user) + var/static/create_mob_html if (!create_mob_html) var/mobjs = null mobjs = jointext(typesof(/mob), ";") diff --git a/code/modules/admin/create_object.dm b/code/modules/admin/create_object.dm index bc2da4da2b..7671fba2d9 100644 --- a/code/modules/admin/create_object.dm +++ b/code/modules/admin/create_object.dm @@ -1,10 +1,5 @@ -var/create_object_html = null -var/list/create_object_forms = list( - /obj, /obj/structure, /obj/machinery, /obj/effect, - /obj/item, /obj/item/clothing, /obj/item/stack, /obj/item/device, - /obj/item/weapon, /obj/item/weapon/reagent_containers, /obj/item/weapon/gun) - /datum/admins/proc/create_object(mob/user) + var/static/create_object_html = null if (!create_object_html) var/objectjs = null objectjs = jointext(typesof(/obj), ";") @@ -13,8 +8,12 @@ var/list/create_object_forms = list( user << browse(replacetext(create_object_html, "/* ref src */", "\ref[src]"), "window=create_object;size=425x475") - /datum/admins/proc/quick_create_object(mob/user) + var/static/list/create_object_forms = list( + /obj, /obj/structure, /obj/machinery, /obj/effect, + /obj/item, /obj/item/clothing, /obj/item/stack, /obj/item/device, + /obj/item/weapon, /obj/item/weapon/reagent_containers, /obj/item/weapon/gun) + var/path = input("Select the path of the object you wish to create.", "Path", /obj) in create_object_forms var/html_form = create_object_forms[path] diff --git a/code/modules/admin/create_poll.dm b/code/modules/admin/create_poll.dm index 8f71cb20df..325e68e347 100644 --- a/code/modules/admin/create_poll.dm +++ b/code/modules/admin/create_poll.dm @@ -3,16 +3,16 @@ set category = "Special Verbs" if(!check_rights(R_PERMISSIONS)) return - if(!dbcon.IsConnected()) + if(!GLOB.dbcon.IsConnected()) to_chat(src, "Failed to establish database connection.") return var/returned = create_poll_function() if(returned) - var/DBQuery/query_check_option = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_option")] WHERE pollid = [returned]") + var/DBQuery/query_check_option = GLOB.dbcon.NewQuery("SELECT id FROM [format_table_name("poll_option")] WHERE pollid = [returned]") if(!query_check_option.warn_execute()) return if(query_check_option.NextRow()) - var/DBQuery/query_log_get = dbcon.NewQuery("SELECT polltype, question, adminonly FROM [format_table_name("poll_question")] WHERE id = [returned]") + var/DBQuery/query_log_get = GLOB.dbcon.NewQuery("SELECT polltype, question, adminonly FROM [format_table_name("poll_question")] WHERE id = [returned]") if(!query_log_get.warn_execute()) return if(query_log_get.NextRow()) @@ -23,7 +23,7 @@ message_admins("[key_name_admin(usr)] has created a new server poll. Poll type: [polltype] - Admin Only: [adminonly ? "Yes" : "No"]
    Question: [question]") else to_chat(src, "Poll question created without any options, poll will be deleted.") - var/DBQuery/query_del_poll = dbcon.NewQuery("DELETE FROM [format_table_name("poll_question")] WHERE id = [returned]") + var/DBQuery/query_del_poll = GLOB.dbcon.NewQuery("DELETE FROM [format_table_name("poll_question")] WHERE id = [returned]") if(!query_del_poll.warn_execute()) return @@ -51,7 +51,7 @@ if(!endtime) return endtime = sanitizeSQL(endtime) - var/DBQuery/query_validate_time = dbcon.NewQuery("SELECT STR_TO_DATE('[endtime]','%Y-%c-%d %T')") + var/DBQuery/query_validate_time = GLOB.dbcon.NewQuery("SELECT STR_TO_DATE('[endtime]','%Y-%c-%d %T')") if(!query_validate_time.warn_execute()) return if(query_validate_time.NextRow()) @@ -59,7 +59,7 @@ if(!endtime) to_chat(src, "Datetime entered is invalid.") return - var/DBQuery/query_time_later = dbcon.NewQuery("SELECT TIMESTAMP('[endtime]') < NOW()") + var/DBQuery/query_time_later = GLOB.dbcon.NewQuery("SELECT TIMESTAMP('[endtime]') < NOW()") if(!query_time_later.warn_execute()) return if(query_time_later.NextRow()) @@ -88,7 +88,7 @@ if(!question) return question = sanitizeSQL(question) - var/DBQuery/query_polladd_question = dbcon.NewQuery("INSERT INTO [format_table_name("poll_question")] (polltype, starttime, endtime, question, adminonly, multiplechoiceoptions, createdby_ckey, createdby_ip, dontshow) VALUES ('[polltype]', '[starttime]', '[endtime]', '[question]', '[adminonly]', '[choice_amount]', '[sql_ckey]', INET_ATON('[address]'), '[dontshow]')") + var/DBQuery/query_polladd_question = GLOB.dbcon.NewQuery("INSERT INTO [format_table_name("poll_question")] (polltype, starttime, endtime, question, adminonly, multiplechoiceoptions, createdby_ckey, createdby_ip, dontshow) VALUES ('[polltype]', '[starttime]', '[endtime]', '[question]', '[adminonly]', '[choice_amount]', '[sql_ckey]', INET_ATON('[address]'), '[dontshow]')") if(!query_polladd_question.warn_execute()) return if(polltype == POLLTYPE_TEXT) @@ -96,7 +96,7 @@ message_admins("[key_name_admin(usr)] has created a new server poll. Poll type: [polltype] - Admin Only: [adminonly ? "Yes" : "No"]
    Question: [question]") return var/pollid = 0 - var/DBQuery/query_get_id = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_question")] WHERE question = '[question]' AND starttime = '[starttime]' AND endtime = '[endtime]' AND createdby_ckey = '[sql_ckey]' AND createdby_ip = INET_ATON('[address]')") + var/DBQuery/query_get_id = GLOB.dbcon.NewQuery("SELECT id FROM [format_table_name("poll_question")] WHERE question = '[question]' AND starttime = '[starttime]' AND endtime = '[endtime]' AND createdby_ckey = '[sql_ckey]' AND createdby_ip = INET_ATON('[address]')") if(!query_get_id.warn_execute()) return if(query_get_id.NextRow()) @@ -146,7 +146,7 @@ descmax = sanitizeSQL(descmax) else if(descmax == null) return pollid - var/DBQuery/query_polladd_option = dbcon.NewQuery("INSERT INTO [format_table_name("poll_option")] (pollid, text, percentagecalc, minval, maxval, descmin, descmid, descmax) VALUES ('[pollid]', '[option]', '[percentagecalc]', '[minval]', '[maxval]', '[descmin]', '[descmid]', '[descmax]')") + var/DBQuery/query_polladd_option = GLOB.dbcon.NewQuery("INSERT INTO [format_table_name("poll_option")] (pollid, text, percentagecalc, minval, maxval, descmin, descmid, descmax) VALUES ('[pollid]', '[option]', '[percentagecalc]', '[minval]', '[maxval]', '[descmin]', '[descmid]', '[descmax]')") if(!query_polladd_option.warn_execute()) return pollid switch(alert(" ",,"Add option","Finish", "Cancel")) diff --git a/code/modules/admin/create_turf.dm b/code/modules/admin/create_turf.dm index 15abae34b3..63e3b8cf69 100644 --- a/code/modules/admin/create_turf.dm +++ b/code/modules/admin/create_turf.dm @@ -1,5 +1,5 @@ -/var/create_turf_html = null /datum/admins/proc/create_turf(mob/user) + var/static/create_turf_html if (!create_turf_html) var/turfjs = null turfjs = jointext(typesof(/turf), ";") diff --git a/code/modules/admin/fun_balloon.dm b/code/modules/admin/fun_balloon.dm index 5ca3e50c57..b886232e00 100644 --- a/code/modules/admin/fun_balloon.dm +++ b/code/modules/admin/fun_balloon.dm @@ -159,7 +159,7 @@ /obj/effect/forcefield/arena_shuttle_entrance/Bumped(mob/M as mob|obj) if(!warp_points.len) - for(var/obj/effect/landmark/shuttle_arena_entrance/S in landmarks_list) + for(var/obj/effect/landmark/shuttle_arena_entrance/S in GLOB.landmarks_list) warp_points |= S if(!isliving(M)) return diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm index 992aef1eb6..3e0efe601e 100644 --- a/code/modules/admin/holder2.dm +++ b/code/modules/admin/holder2.dm @@ -1,4 +1,5 @@ -var/list/admin_datums = list() +GLOBAL_LIST_EMPTY(admin_datums) +GLOBAL_PROTECT(admin_datums) /datum/admins var/datum/admin_rank/rank @@ -27,7 +28,7 @@ var/list/admin_datums = list() return rank = R admin_signature = "Nanotrasen Officer #[rand(0,9)][rand(0,9)][rand(0,9)]" - admin_datums[ckey] = src + GLOB.admin_datums[ckey] = src /datum/admins/proc/associate(client/C) if(istype(C)) @@ -35,11 +36,11 @@ var/list/admin_datums = list() owner.holder = src owner.add_admin_verbs() //TODO owner.verbs -= /client/proc/readmin - admins |= C + GLOB.admins |= C /datum/admins/proc/disassociate() if(owner) - admins -= owner + GLOB.admins -= owner owner.remove_admin_verbs() owner.holder = null owner = null diff --git a/code/modules/admin/ipintel.dm b/code/modules/admin/ipintel.dm index d4e354db09..7d61e69624 100644 --- a/code/modules/admin/ipintel.dm +++ b/code/modules/admin/ipintel.dm @@ -33,8 +33,8 @@ cachedintel.cache = TRUE return cachedintel - if(dbcon.Connect()) - var/DBQuery/query_get_ip_intel = dbcon.NewQuery({" + if(GLOB.dbcon.Connect()) + var/DBQuery/query_get_ip_intel = GLOB.dbcon.NewQuery({" SELECT date, intel, TIMESTAMPDIFF(MINUTE,date,NOW()) FROM [format_table_name("ipintel")] WHERE @@ -62,8 +62,8 @@ res.intel = ip_intel_query(ip) if (updatecache && res.intel >= 0) SSipintel.cache[ip] = res - if(dbcon.Connect()) - var/DBQuery/query_add_ip_intel = dbcon.NewQuery("INSERT INTO [format_table_name("ipintel")] (ip, intel) VALUES (INET_ATON('[ip]'), [res.intel]) ON DUPLICATE KEY UPDATE intel = VALUES(intel), date = NOW()") + if(GLOB.dbcon.Connect()) + var/DBQuery/query_add_ip_intel = GLOB.dbcon.NewQuery("INSERT INTO [format_table_name("ipintel")] (ip, intel) VALUES (INET_ATON('[ip]'), [res.intel]) ON DUPLICATE KEY UPDATE intel = VALUES(intel), date = NOW()") query_add_ip_intel.Execute() diff --git a/code/modules/admin/permissionverbs/permissionedit.dm b/code/modules/admin/permissionverbs/permissionedit.dm index c79eb6541e..8c0b0120fa 100644 --- a/code/modules/admin/permissionverbs/permissionedit.dm +++ b/code/modules/admin/permissionverbs/permissionedit.dm @@ -27,8 +27,8 @@ "} - for(var/adm_ckey in admin_datums) - var/datum/admins/D = admin_datums[adm_ckey] + for(var/adm_ckey in GLOB.admin_datums) + var/datum/admins/D = GLOB.admin_datums[adm_ckey] if(!D) continue @@ -60,7 +60,7 @@ if (!check_rights(R_PERMISSIONS)) return - if(!dbcon.Connect()) + if(!GLOB.dbcon.Connect()) to_chat(usr, "Failed to establish database connection.") return @@ -75,7 +75,7 @@ if(!istext(adm_ckey) || !istext(new_rank)) return - var/DBQuery/query_get_admin = dbcon.NewQuery("SELECT id FROM [format_table_name("admin")] WHERE ckey = '[adm_ckey]'") + var/DBQuery/query_get_admin = GLOB.dbcon.NewQuery("SELECT id FROM [format_table_name("admin")] WHERE ckey = '[adm_ckey]'") if(!query_get_admin.warn_execute()) return @@ -86,19 +86,19 @@ admin_id = text2num(query_get_admin.item[1]) if(new_admin) - var/DBQuery/query_add_admin = dbcon.NewQuery("INSERT INTO `[format_table_name("admin")]` (`id`, `ckey`, `rank`, `level`, `flags`) VALUES (null, '[adm_ckey]', '[new_rank]', -1, 0)") + var/DBQuery/query_add_admin = GLOB.dbcon.NewQuery("INSERT INTO `[format_table_name("admin")]` (`id`, `ckey`, `rank`, `level`, `flags`) VALUES (null, '[adm_ckey]', '[new_rank]', -1, 0)") if(!query_add_admin.warn_execute()) return - var/DBQuery/query_add_admin_log = dbcon.NewQuery("INSERT INTO `[format_table_name("admin_log")]` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Added new admin [adm_ckey] to rank [new_rank]');") + var/DBQuery/query_add_admin_log = GLOB.dbcon.NewQuery("INSERT INTO `[format_table_name("admin_log")]` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Added new admin [adm_ckey] to rank [new_rank]');") if(!query_add_admin_log.warn_execute()) return to_chat(usr, "New admin added.") else if(!isnull(admin_id) && isnum(admin_id)) - var/DBQuery/query_change_admin = dbcon.NewQuery("UPDATE `[format_table_name("admin")]` SET rank = '[new_rank]' WHERE id = [admin_id]") + var/DBQuery/query_change_admin = GLOB.dbcon.NewQuery("UPDATE `[format_table_name("admin")]` SET rank = '[new_rank]' WHERE id = [admin_id]") if(!query_change_admin.warn_execute()) return - var/DBQuery/query_change_admin_log = dbcon.NewQuery("INSERT INTO `[format_table_name("admin_log")]` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Edited the rank of [adm_ckey] to [new_rank]');") + var/DBQuery/query_change_admin_log = GLOB.dbcon.NewQuery("INSERT INTO `[format_table_name("admin_log")]` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Edited the rank of [adm_ckey] to [new_rank]');") if(!query_change_admin_log.warn_execute()) return to_chat(usr, "Admin rank changed.") @@ -112,14 +112,14 @@ if(check_rights(R_PERMISSIONS)) return - if(!dbcon.Connect()) + if(!GLOB.dbcon.Connect()) to_chat(usr, "Failed to establish database connection.") return if(!adm_ckey || !istext(adm_ckey) || !isnum(new_permission)) return - var/DBQuery/query_get_perms = dbcon.NewQuery("SELECT id, flags FROM [format_table_name("admin")] WHERE ckey = '[adm_ckey]'") + var/DBQuery/query_get_perms = GLOB.dbcon.NewQuery("SELECT id, flags FROM [format_table_name("admin")] WHERE ckey = '[adm_ckey]'") if(!query_get_perms.warn_execute()) return @@ -130,8 +130,8 @@ if(!admin_id) return - var/DBQuery/query_change_perms = dbcon.NewQuery("UPDATE `[format_table_name("admin")]` SET flags = [new_permission] WHERE id = [admin_id]") + var/DBQuery/query_change_perms = GLOB.dbcon.NewQuery("UPDATE `[format_table_name("admin")]` SET flags = [new_permission] WHERE id = [admin_id]") if(!query_change_perms.warn_execute()) return - var/DBQuery/query_change_perms_log = dbcon.NewQuery("INSERT INTO `[format_table_name("admin_log")]` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Edit permission [rights2text(new_permission)] (flag = [new_permission]) to admin [adm_ckey]');") + var/DBQuery/query_change_perms_log = GLOB.dbcon.NewQuery("INSERT INTO `[format_table_name("admin_log")]` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Edit permission [rights2text(new_permission)] (flag = [new_permission]) to admin [adm_ckey]');") query_change_perms_log.warn_execute() diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index f4eb7be6f3..d2630b5f31 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -309,13 +309,13 @@ usr << browse(dat, "window=players;size=600x480") /datum/admins/proc/check_antagonists() - if (ticker && ticker.current_state >= GAME_STATE_PLAYING) + if (SSticker && SSticker.current_state >= GAME_STATE_PLAYING) var/dat = "Round Status

    Round Status

    " - if(ticker.mode.replacementmode) - dat += "Former Game Mode: [ticker.mode.name]
    " - dat += "Replacement Game Mode: [ticker.mode.replacementmode.name]
    " + if(SSticker.mode.replacementmode) + dat += "Former Game Mode: [SSticker.mode.name]
    " + dat += "Replacement Game Mode: [SSticker.mode.replacementmode.name]
    " else - dat += "Current Game Mode: [ticker.mode.name]
    " + dat += "Current Game Mode: [SSticker.mode.name]
    " dat += "Round Duration: [round(world.time / 36000)]:[add_zero("[world.time / 600 % 60]", 2)]:[world.time / 100 % 6][world.time / 100 % 10]
    " dat += "Emergency shuttle
    " if(EMERGENCY_IDLE_OR_RECALLED) @@ -328,18 +328,18 @@ else dat += "ETA: [(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]
    " dat += "Continuous Round Status
    " - dat += "[config.continuous[ticker.mode.config_tag] ? "Continue if antagonists die" : "End on antagonist death"]" - if(config.continuous[ticker.mode.config_tag]) - dat += ", [config.midround_antag[ticker.mode.config_tag] ? "creating replacement antagonists" : "not creating new antagonists"]
    " + dat += "[config.continuous[SSticker.mode.config_tag] ? "Continue if antagonists die" : "End on antagonist death"]" + if(config.continuous[SSticker.mode.config_tag]) + dat += ", [config.midround_antag[SSticker.mode.config_tag] ? "creating replacement antagonists" : "not creating new antagonists"]
    " else dat += "
    " - if(config.midround_antag[ticker.mode.config_tag]) + if(config.midround_antag[SSticker.mode.config_tag]) dat += "Time limit: [config.midround_antag_time_check] minutes into round
    " dat += "Living crew limit: [config.midround_antag_life_check * 100]% of crew alive
    " - dat += "If limits past: [ticker.mode.round_ends_with_antag_death ? "End The Round" : "Continue As Extended"]
    " + dat += "If limits past: [SSticker.mode.round_ends_with_antag_death ? "End The Round" : "Continue As Extended"]
    " dat += "End Round Now
    " - dat += "[ticker.delay_end ? "End Round Normally" : "Delay Round End"]" - var/connected_players = clients.len + dat += "[SSticker.delay_end ? "End Round Normally" : "Delay Round End"]" + var/connected_players = GLOB.clients.len var/lobby_players = 0 var/observers = 0 var/observers_connected = 0 @@ -350,7 +350,7 @@ var/other_players = 0 var/living_skipped = 0 var/drones = 0 - for(var/mob/M in mob_list) + for(var/mob/M in GLOB.mob_list) if(M.ckey) if(isnewplayer(M)) lobby_players++ @@ -383,9 +383,9 @@ dat += "
    [other_players] players in invalid state or the statistics code is bugged!" dat += "
    " - if(ticker.mode.syndicates.len) + if(SSticker.mode.syndicates.len) dat += "
    " - for(var/datum/mind/N in ticker.mode.syndicates) + for(var/datum/mind/N in SSticker.mode.syndicates) var/mob/M = N.current if(M) dat += "" @@ -395,7 +395,7 @@ dat += "" dat += "" dat += "
    Syndicates
    [M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]
    [N.name]([N.key]) Nuclear Operative Body destroyed!PM

    " - for(var/obj/item/weapon/disk/nuclear/N in poi_list) + for(var/obj/item/weapon/disk/nuclear/N in GLOB.poi_list) dat += "" dat += "
    Nuclear Disk(s)
    [N.name], " var/atom/disk_loc = N.loc while(!isturf(disk_loc)) @@ -409,9 +409,9 @@ dat += "in [disk_loc.loc] at ([disk_loc.x], [disk_loc.y], [disk_loc.z])
    " - if(ticker.mode.head_revolutionaries.len || ticker.mode.revolutionaries.len) + if(SSticker.mode.head_revolutionaries.len || SSticker.mode.revolutionaries.len) dat += "
    " - for(var/datum/mind/N in ticker.mode.head_revolutionaries) + for(var/datum/mind/N in SSticker.mode.head_revolutionaries) var/mob/M = N.current if(!M) dat += "" @@ -420,14 +420,14 @@ dat += "" dat += "" dat += "" - for(var/datum/mind/N in ticker.mode.revolutionaries) + for(var/datum/mind/N in SSticker.mode.revolutionaries) var/mob/M = N.current if(M) dat += "" dat += "" dat += "" dat += "
    Revolutionaries
    [N.name]([N.key])Head Revolutionary body destroyed!
    [M.real_name] (Leader)[M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]PMFLW
    [M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]PMFLW
    " - for(var/datum/mind/N in ticker.mode.get_living_heads()) + for(var/datum/mind/N in SSticker.mode.get_living_heads()) var/mob/M = N.current if(M) dat += "" @@ -440,8 +440,8 @@ dat += "" dat += "
    Target(s)Location
    [M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]PM
    " - for(var/datum/gang/G in ticker.mode.gangs) - dat += "
    " + for(var/datum/gang/G in SSticker.mode.gangs) + dat += "
    [G.name] Gang: [G.points] Influence | [round((G.territory.len/start_state.num_territories)*100, 1)]% Control
    " for(var/datum/mind/N in G.bosses) var/mob/M = N.current if(!M) @@ -458,9 +458,9 @@ dat += "" dat += "
    [G.name] Gang: [G.points] Influence | [round((G.territory.len/GLOB.start_state.num_territories)*100, 1)]% Control
    PM
    " - if(ticker.mode.changelings.len > 0) + if(SSticker.mode.changelings.len > 0) dat += "
    " - for(var/datum/mind/changeling in ticker.mode.changelings) + for(var/datum/mind/changeling in SSticker.mode.changelings) var/mob/M = changeling.current if(M) dat += "" @@ -472,9 +472,9 @@ dat += "" dat += "
    Changelings
    [M.mind.changeling.changelingID] as [M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]PM
    " - if(ticker.mode.wizards.len > 0) + if(SSticker.mode.wizards.len > 0) dat += "
    " - for(var/datum/mind/wizard in ticker.mode.wizards) + for(var/datum/mind/wizard in SSticker.mode.wizards) var/mob/M = wizard.current if(M) dat += "" @@ -486,9 +486,9 @@ dat += "" dat += "
    Wizards
    [M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]PM
    " - if(ticker.mode.apprentices.len > 0) + if(SSticker.mode.apprentices.len > 0) dat += "
    " - for(var/datum/mind/apprentice in ticker.mode.apprentices) + for(var/datum/mind/apprentice in SSticker.mode.apprentices) var/mob/M = apprentice.current if(M) dat += "" @@ -500,9 +500,9 @@ dat += "" dat += "
    Apprentice
    [M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]PM
    " - if(ticker.mode.cult.len) + if(SSticker.mode.cult.len) dat += "
    " - for(var/datum/mind/N in ticker.mode.cult) + for(var/datum/mind/N in SSticker.mode.cult) var/mob/M = N.current if(M) dat += "" @@ -510,9 +510,9 @@ dat += "" dat += "
    Cultists
    [M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]FLW
    " - if(ticker.mode.servants_of_ratvar.len) + if(SSticker.mode.servants_of_ratvar.len) dat += "
    " - for(var/datum/mind/N in ticker.mode.servants_of_ratvar) + for(var/datum/mind/N in SSticker.mode.servants_of_ratvar) var/mob/M = N.current if(M) dat += "" @@ -520,9 +520,9 @@ dat += "" dat += "
    Servants of Ratvar
    [M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]FLW
    " - if(ticker.mode.traitors.len > 0) + if(SSticker.mode.traitors.len > 0) dat += "
    " - for(var/datum/mind/traitor in ticker.mode.traitors) + for(var/datum/mind/traitor in SSticker.mode.traitors) var/mob/M = traitor.current if(M) dat += "" @@ -534,9 +534,9 @@ dat += "" dat += "
    Traitors
    [M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]PM
    " - if(ticker.mode.abductors.len) + if(SSticker.mode.abductors.len) dat += "
    " - for(var/datum/mind/abductor in ticker.mode.abductors) + for(var/datum/mind/abductor in SSticker.mode.abductors) var/mob/M = abductor.current if(M) dat += "" @@ -548,7 +548,7 @@ dat += "" dat += "
    Abductors
    [M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]PM
    " dat += "
    " - for(var/obj/machinery/abductor/experiment/E in machines) + for(var/obj/machinery/abductor/experiment/E in GLOB.machines) for(var/datum/mind/abductee in E.abductee_minds) var/mob/M = abductee.current if(M) @@ -561,9 +561,9 @@ dat += "" dat += "
    Abductees
    PM
    " - if(ticker.mode.devils.len) + if(SSticker.mode.devils.len) dat += "
    " - for(var/X in ticker.mode.devils) + for(var/X in SSticker.mode.devils) var/datum/mind/devil = X var/mob/M = devil.current if(M) @@ -576,9 +576,9 @@ dat += "" dat += "
    devils
    PM
    " - if(ticker.mode.sintouched.len) + if(SSticker.mode.sintouched.len) dat += "
    " - for(var/X in ticker.mode.sintouched) + for(var/X in SSticker.mode.sintouched) var/datum/mind/sintouched = X var/mob/M = sintouched.current if(M) @@ -591,15 +591,15 @@ dat += "
    sintouched
    " var/list/blob_minds = list() - for(var/mob/camera/blob/B in mob_list) + for(var/mob/camera/blob/B in GLOB.mob_list) blob_minds |= B.mind - if(istype(ticker.mode, /datum/game_mode/blob) || blob_minds.len) + if(istype(SSticker.mode, /datum/game_mode/blob) || blob_minds.len) dat += "
    " - if(istype(ticker.mode,/datum/game_mode/blob)) - var/datum/game_mode/blob/mode = ticker.mode + if(istype(SSticker.mode,/datum/game_mode/blob)) + var/datum/game_mode/blob/mode = SSticker.mode blob_minds |= mode.blob_overminds - dat += "" + dat += "" for(var/datum/mind/blob in blob_minds) var/mob/M = blob.current @@ -613,8 +613,8 @@ dat += "
    Blob
    Progress: [blobs_legit.len]/[mode.blobwincount]
    Progress: [GLOB.blobs_legit.len]/[mode.blobwincount]
    " - if(istype(ticker.mode, /datum/game_mode/monkey)) - var/datum/game_mode/monkey/mode = ticker.mode + if(istype(SSticker.mode, /datum/game_mode/monkey)) + var/datum/game_mode/monkey/mode = SSticker.mode dat += "
    " for(var/datum/mind/eek in mode.ape_infectees) diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index 57a20d8247..aa3ac3d3ca 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -19,8 +19,8 @@ Cure all diseases currently in existence
    Bombing List
    Show current traitors and objectives
    - Show last [length(lastsignalers)] signalers
    - Show last [length(lawchanges)] law changes
    + Show last [length(GLOB.lastsignalers)] signalers
    + Show last [length(GLOB.lawchanges)] law changes
    Show AI Laws
    Show Game Mode
    Show Crew Manifest
    @@ -96,9 +96,9 @@ switch(item) if("admin_log") var/dat = "Admin Log
    " - for(var/l in admin_log) + for(var/l in GLOB.admin_log) dat += "
  • [l]
  • " - if(!admin_log.len) + if(!GLOB.admin_log.len) dat += "No-one has done anything this round!" usr << browse(dat, "window=admin_log") @@ -116,9 +116,9 @@ if("show_admins") var/dat = "Current admins:
    " - if(admin_datums) - for(var/ckey in admin_datums) - var/datum/admins/D = admin_datums[ckey] + if(GLOB.admin_datums) + for(var/ckey in GLOB.admin_datums) + var/datum/admins/D = GLOB.admin_datums[ckey] dat += "[ckey] - [D.rank.name]
    " usr << browse(dat, "window=showadmins;size=600x500") @@ -174,23 +174,23 @@ if(!check_rights(R_ADMIN)) return var/dat = "Bombing List
    " - for(var/l in bombers) + for(var/l in GLOB.bombers) dat += text("[l]
    ") usr << browse(dat, "window=bombers") if("list_signalers") if(!check_rights(R_ADMIN)) return - var/dat = "Showing last [length(lastsignalers)] signalers.
    " - for(var/sig in lastsignalers) + var/dat = "Showing last [length(GLOB.lastsignalers)] signalers.
    " + for(var/sig in GLOB.lastsignalers) dat += "[sig]
    " usr << browse(dat, "window=lastsignalers;size=800x500") if("list_lawchanges") if(!check_rights(R_ADMIN)) return - var/dat = "Showing last [length(lawchanges)] law changes.
    " - for(var/sig in lawchanges) + var/dat = "Showing last [length(GLOB.lawchanges)] law changes.
    " + for(var/sig in GLOB.lawchanges) dat += "[sig]
    " usr << browse(dat, "window=lawchanges;size=800x500") @@ -241,17 +241,17 @@ if("showgm") if(!check_rights(R_ADMIN)) return - if(!ticker || !ticker.mode) + if(!SSticker || !SSticker.mode) alert("The game hasn't started yet!") - else if (ticker.mode) - alert("The game mode is [ticker.mode.name]") - else alert("For some reason there's a ticker, but not a game mode") + else if (SSticker.mode) + alert("The game mode is [SSticker.mode.name]") + else alert("For some reason there's a SSticker, but not a game mode") if("manifest") if(!check_rights(R_ADMIN)) return var/dat = "Showing Crew Manifest.
    " dat += "
    Monkey
    " - for(var/datum/data/record/t in data_core.general) + for(var/datum/data/record/t in GLOB.data_core.general) dat += "" dat += "
    NamePosition
    [t.fields["name"]][t.fields["rank"]]
    " usr << browse(dat, "window=manifest;size=440x410") @@ -260,7 +260,7 @@ return var/dat = "Showing DNA from blood.
    " dat += "" - for(var/mob/living/carbon/human/H in mob_list) + for(var/mob/living/carbon/human/H in GLOB.mob_list) if(H.ckey) dat += "" dat += "
    NameDNABlood Type
    [H][H.dna.unique_enzymes][H.dna.blood_type]
    " @@ -270,7 +270,7 @@ return var/dat = "Showing Fingerprints.
    " dat += "" - for(var/mob/living/carbon/human/H in mob_list) + for(var/mob/living/carbon/human/H in GLOB.mob_list) if(H.ckey) dat += "" dat += "
    NameFingerprints
    [H][md5(H.dna.uni_identity)]
    " @@ -281,7 +281,7 @@ return feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","M") - for(var/mob/living/carbon/human/H in mob_list) + for(var/mob/living/carbon/human/H in GLOB.mob_list) spawn(0) H.monkeyize() ok = 1 @@ -289,12 +289,12 @@ if("allspecies") if(!check_rights(R_FUN)) return - var/result = input(usr, "Please choose a new species","Species") as null|anything in species_list + var/result = input(usr, "Please choose a new species","Species") as null|anything in GLOB.species_list if(result) log_admin("[key_name(usr)] turned all humans into [result]", 1) message_admins("\blue [key_name_admin(usr)] turned all humans into [result]") - var/newtype = species_list[result] - for(var/mob/living/carbon/human/H in mob_list) + var/newtype = GLOB.species_list[result] + for(var/mob/living/carbon/human/H in GLOB.mob_list) H.set_species(newtype) if("corgi") @@ -302,7 +302,7 @@ return feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","M") - for(var/mob/living/carbon/human/H in mob_list) + for(var/mob/living/carbon/human/H in GLOB.mob_list) spawn(0) H.corgize() ok = 1 @@ -344,7 +344,7 @@ if("traitor_all") if(!check_rights(R_FUN)) return - if(!ticker || !ticker.mode) + if(!SSticker || !SSticker.mode) alert("The game hasn't started yet!") return var/objective = copytext(sanitize(input("Enter an objective")),1,MAX_MESSAGE_LEN) @@ -352,31 +352,31 @@ return feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","TA([objective])") - for(var/mob/living/carbon/human/H in player_list) + for(var/mob/living/carbon/human/H in GLOB.player_list) if(H.stat == 2 || !H.client || !H.mind) continue if(is_special_character(H)) continue //traitorize(H, objective, 0) - ticker.mode.traitors += H.mind + SSticker.mode.traitors += H.mind H.mind.special_role = "traitor" var/datum/objective/new_objective = new new_objective.owner = H new_objective.explanation_text = objective H.mind.objectives += new_objective - ticker.mode.greet_traitor(H.mind) - //ticker.mode.forge_traitor_objectives(H.mind) - ticker.mode.finalize_traitor(H.mind) - for(var/mob/living/silicon/A in player_list) + SSticker.mode.greet_traitor(H.mind) + //SSticker.mode.forge_traitor_objectives(H.mind) + SSticker.mode.finalize_traitor(H.mind) + for(var/mob/living/silicon/A in GLOB.player_list) if(A.stat == 2 || !A.client || !A.mind) continue if(ispAI(A)) continue else if(is_special_character(A)) continue - ticker.mode.traitors += A.mind + SSticker.mode.traitors += A.mind A.mind.special_role = "traitor" var/datum/objective/new_objective = new new_objective.owner = A new_objective.explanation_text = objective A.mind.objectives += new_objective - ticker.mode.greet_traitor(A.mind) - ticker.mode.finalize_traitor(A.mind) + SSticker.mode.greet_traitor(A.mind) + SSticker.mode.finalize_traitor(A.mind) message_admins("[key_name_admin(usr)] used everyone is a traitor secret. Objective is [objective]") log_admin("[key_name(usr)] used everyone is a traitor secret. Objective is [objective]") @@ -386,19 +386,19 @@ feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","BC") - var/newBombCap = input(usr,"What would you like the new bomb cap to be. (entered as the light damage range (the 3rd number in common (1,2,3) notation)) Must be above 4)", "New Bomb Cap", MAX_EX_LIGHT_RANGE) as num|null + var/newBombCap = input(usr,"What would you like the new bomb cap to be. (entered as the light damage range (the 3rd number in common (1,2,3) notation)) Must be above 4)", "New Bomb Cap", GLOB.MAX_EX_LIGHT_RANGE) as num|null if (newBombCap < 4) return - MAX_EX_DEVESTATION_RANGE = round(newBombCap/4) - MAX_EX_HEAVY_RANGE = round(newBombCap/2) - MAX_EX_LIGHT_RANGE = newBombCap + GLOB.MAX_EX_DEVESTATION_RANGE = round(newBombCap/4) + GLOB.MAX_EX_HEAVY_RANGE = round(newBombCap/2) + GLOB.MAX_EX_LIGHT_RANGE = newBombCap //I don't know why these are their own variables, but fuck it, they are. - MAX_EX_FLASH_RANGE = newBombCap - MAX_EX_FLAME_RANGE = newBombCap + GLOB.MAX_EX_FLASH_RANGE = newBombCap + GLOB.MAX_EX_FLAME_RANGE = newBombCap - message_admins("[key_name_admin(usr)] changed the bomb cap to [MAX_EX_DEVESTATION_RANGE], [MAX_EX_HEAVY_RANGE], [MAX_EX_LIGHT_RANGE]") - log_admin("[key_name(usr)] changed the bomb cap to [MAX_EX_DEVESTATION_RANGE], [MAX_EX_HEAVY_RANGE], [MAX_EX_LIGHT_RANGE]") + message_admins("[key_name_admin(usr)] changed the bomb cap to [GLOB.MAX_EX_DEVESTATION_RANGE], [GLOB.MAX_EX_HEAVY_RANGE], [GLOB.MAX_EX_LIGHT_RANGE]") + log_admin("[key_name(usr)] changed the bomb cap to [GLOB.MAX_EX_DEVESTATION_RANGE], [GLOB.MAX_EX_HEAVY_RANGE], [GLOB.MAX_EX_LIGHT_RANGE]") if("lightsout") @@ -415,32 +415,45 @@ feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","BO") message_admins("[key_name_admin(usr)] broke all lights") - for(var/obj/machinery/light/L in machines) + for(var/obj/machinery/light/L in GLOB.machines) L.break_light_tube() if("anime") if(!check_rights(R_FUN)) return + var/animetype = alert("Would you like to have the clothes be changed?",,"Yes","No","Cancel") + + var/droptype + if(animetype =="Yes") + droptype = alert("Make the uniforms Nodrop?",,"Yes","No","Cancel") + + if(animetype == "Cancel" || droptype == "Cancel") + return feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","CC") message_admins("[key_name_admin(usr)] made everything kawaii.") - for(var/mob/living/carbon/human/H in mob_list) + for(var/mob/living/carbon/human/H in GLOB.mob_list) H << sound('sound/AI/animes.ogg') if(H.dna.species.id == "human") if(H.dna.features["tail_human"] == "None" || H.dna.features["ears"] == "None") H.dna.features["tail_human"] = "Cat" H.dna.features["ears"] = "Cat" - var/seifuku = pick(typesof(/obj/item/clothing/under/schoolgirl)) - var/obj/item/clothing/under/schoolgirl/I = new seifuku var/list/honorifics = list("[MALE]" = list("kun"), "[FEMALE]" = list("chan","tan"), "[NEUTER]" = list("san")) //John Robust -> Robust-kun var/list/names = splittext(H.real_name," ") var/forename = names.len > 1 ? names[2] : names[1] var/newname = "[forename]-[pick(honorifics["[H.gender]"])]" H.fully_replace_character_name(H.real_name,newname) - H.temporarilyRemoveItemFromInventory(H.w_uniform, TRUE) - H.equip_to_slot_or_del(I, slot_w_uniform) - I.flags |= NODROP + H.update_mutant_bodyparts() + if(animetype == "Yes") + var/seifuku = pick(typesof(/obj/item/clothing/under/schoolgirl)) + var/obj/item/clothing/under/schoolgirl/I = new seifuku + var/olduniform = H.w_uniform + H.temporarilyRemoveItemFromInventory(H.w_uniform, TRUE, FALSE) + H.equip_to_slot_or_del(I, slot_w_uniform) + qdel(olduniform) + if(droptype == "Yes") + I.flags |= NODROP else to_chat(H, "You're not kawaii enough for this.") @@ -450,7 +463,7 @@ feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","WO") message_admins("[key_name_admin(usr)] fixed all lights") - for(var/obj/machinery/light/L in machines) + for(var/obj/machinery/light/L in GLOB.machines) L.fix() if("floorlava") @@ -477,7 +490,7 @@ return feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","RET") - for(var/mob/living/carbon/human/H in player_list) + for(var/mob/living/carbon/human/H in GLOB.player_list) to_chat(H, "You suddenly feel stupid.") H.setBrainLoss(60) message_admins("[key_name_admin(usr)] made everybody retarded") @@ -487,7 +500,7 @@ return feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","EgL") - for(var/obj/machinery/door/airlock/W in machines) + for(var/obj/machinery/door/airlock/W in GLOB.machines) if(W.z == ZLEVEL_STATION && !istype(get_area(W), /area/bridge) && !istype(get_area(W), /area/crew_quarters) && !istype(get_area(W), /area/security/prison)) W.req_access = list() message_admins("[key_name_admin(usr)] activated Egalitarian Station mode") @@ -524,7 +537,7 @@ if("events") if(!check_rights(R_FUN)) return - if(!SSevent.wizardmode) + if(!SSevents.wizardmode) if(alert("Do you want to toggle summon events on?",,"Yes","No") == "Yes") summonevents() feedback_inc("admin_secrets_fun_used",1) @@ -537,15 +550,15 @@ feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","SE") if("Turn Off Summon Events") - SSevent.toggleWizardmode() - SSevent.resetFrequency() + SSevents.toggleWizardmode() + SSevents.resetFrequency() if("dorf") if(!check_rights(R_FUN)) return feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","DF") - for(var/mob/living/carbon/human/B in mob_list) + for(var/mob/living/carbon/human/B in GLOB.mob_list) B.facial_hair_style = "Dward Beard" B.update_hair() message_admins("[key_name_admin(usr)] activated dorf mode") @@ -577,19 +590,19 @@ if("maint_access_brig") if(!check_rights(R_DEBUG)) return - for(var/obj/machinery/door/airlock/maintenance/M in machines) + for(var/obj/machinery/door/airlock/maintenance/M in GLOB.machines) M.check_access() - if (access_maint_tunnels in M.req_access) - M.req_access = list(access_brig) + if (GLOB.access_maint_tunnels in M.req_access) + M.req_access = list(GLOB.access_brig) message_admins("[key_name_admin(usr)] made all maint doors brig access-only.") if("maint_access_engiebrig") if(!check_rights(R_DEBUG)) return - for(var/obj/machinery/door/airlock/maintenance/M in machines) + for(var/obj/machinery/door/airlock/maintenance/M in GLOB.machines) M.check_access() - if (access_maint_tunnels in M.req_access) + if (GLOB.access_maint_tunnels in M.req_access) M.req_access = list() - M.req_one_access = list(access_brig,access_engine) + M.req_one_access = list(GLOB.access_brig,GLOB.access_engine) message_admins("[key_name_admin(usr)] made all maint doors engineering and brig access-only.") if("infinite_sec") if(!check_rights(R_DEBUG)) diff --git a/code/modules/admin/sql_message_system.dm b/code/modules/admin/sql_message_system.dm index 5e959f140e..bcb2013867 100644 --- a/code/modules/admin/sql_message_system.dm +++ b/code/modules/admin/sql_message_system.dm @@ -1,5 +1,5 @@ /proc/create_message(type, target_ckey, admin_ckey, text, timestamp, server, secret, logged = 1, browse) - if(!dbcon.IsConnected()) + if(!GLOB.dbcon.Connect()) to_chat(usr, "Failed to establish database connection.") return if(!type) @@ -9,7 +9,7 @@ if(!new_ckey) return new_ckey = sanitizeSQL(new_ckey) - var/DBQuery/query_find_ckey = dbcon.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE ckey = '[new_ckey]'") + var/DBQuery/query_find_ckey = GLOB.dbcon.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE ckey = '[new_ckey]'") if(!query_find_ckey.warn_execute()) return if(!query_find_ckey.NextRow()) @@ -44,7 +44,7 @@ secret = 0 else return - var/DBQuery/query_create_message = dbcon.NewQuery("INSERT INTO [format_table_name("messages")] (type, targetckey, adminckey, text, timestamp, server, secret) VALUES ('[type]', '[target_ckey]', '[admin_ckey]', '[text]', '[timestamp]', '[server]', '[secret]')") + var/DBQuery/query_create_message = GLOB.dbcon.NewQuery("INSERT INTO [format_table_name("messages")] (type, targetckey, adminckey, text, timestamp, server, secret) VALUES ('[type]', '[target_ckey]', '[admin_ckey]', '[text]', '[timestamp]', '[server]', '[secret]')") if(!query_create_message.warn_execute()) return if(logged) @@ -56,7 +56,7 @@ browse_messages(target_ckey = target_ckey) /proc/delete_message(message_id, logged = 1, browse) - if(!dbcon.IsConnected()) + if(!GLOB.dbcon.Connect()) to_chat(usr, "Failed to establish database connection.") return message_id = text2num(message_id) @@ -65,14 +65,14 @@ var/type var/target_ckey var/text - var/DBQuery/query_find_del_message = dbcon.NewQuery("SELECT type, targetckey, adminckey, text FROM [format_table_name("messages")] WHERE id = [message_id]") + var/DBQuery/query_find_del_message = GLOB.dbcon.NewQuery("SELECT type, targetckey, adminckey, text FROM [format_table_name("messages")] WHERE id = [message_id]") if(!query_find_del_message.warn_execute()) return if(query_find_del_message.NextRow()) type = query_find_del_message.item[1] target_ckey = query_find_del_message.item[2] text = query_find_del_message.item[4] - var/DBQuery/query_del_message = dbcon.NewQuery("DELETE FROM [format_table_name("messages")] WHERE id = [message_id]") + var/DBQuery/query_del_message = GLOB.dbcon.NewQuery("DELETE FROM [format_table_name("messages")] WHERE id = [message_id]") if(!query_del_message.warn_execute()) return if(logged) @@ -84,13 +84,13 @@ browse_messages(target_ckey = target_ckey) /proc/edit_message(message_id, browse) - if(!dbcon.IsConnected()) + if(!GLOB.dbcon.Connect()) to_chat(usr, "Failed to establish database connection.") return message_id = text2num(message_id) if(!message_id) return - var/DBQuery/query_find_edit_message = dbcon.NewQuery("SELECT type, targetckey, adminckey, text FROM [format_table_name("messages")] WHERE id = [message_id]") + var/DBQuery/query_find_edit_message = GLOB.dbcon.NewQuery("SELECT type, targetckey, adminckey, text FROM [format_table_name("messages")] WHERE id = [message_id]") if(!query_find_edit_message.warn_execute()) return if(query_find_edit_message.NextRow()) @@ -104,7 +104,7 @@ return new_text = sanitizeSQL(new_text) var/edit_text = sanitizeSQL("Edited by [editor_ckey] on [SQLtime()] from
    [old_text]
    to
    [new_text]
    ") - var/DBQuery/query_edit_message = dbcon.NewQuery("UPDATE [format_table_name("messages")] SET text = '[new_text]', lasteditor = '[editor_ckey]', edits = CONCAT(IFNULL(edits,''),'[edit_text]') WHERE id = [message_id]") + var/DBQuery/query_edit_message = GLOB.dbcon.NewQuery("UPDATE [format_table_name("messages")] SET text = '[new_text]', lasteditor = '[editor_ckey]', edits = CONCAT(IFNULL(edits,''),'[edit_text]') WHERE id = [message_id]") if(!query_edit_message.warn_execute()) return log_admin_private("[key_name(usr)] has edited a [type] [(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""] made by [admin_ckey] from [old_text] to [new_text]") @@ -115,13 +115,13 @@ browse_messages(target_ckey = target_ckey) /proc/toggle_message_secrecy(message_id) - if(!dbcon.IsConnected()) + if(!GLOB.dbcon.Connect()) to_chat(usr, "Failed to establish database connection.") return message_id = text2num(message_id) if(!message_id) return - var/DBQuery/query_find_message_secret = dbcon.NewQuery("SELECT type, targetckey, adminckey, secret FROM [format_table_name("messages")] WHERE id = [message_id]") + var/DBQuery/query_find_message_secret = GLOB.dbcon.NewQuery("SELECT type, targetckey, adminckey, secret FROM [format_table_name("messages")] WHERE id = [message_id]") if(!query_find_message_secret.warn_execute()) return if(query_find_message_secret.NextRow()) @@ -131,7 +131,7 @@ var/secret = text2num(query_find_message_secret.item[4]) var/editor_ckey = sanitizeSQL(usr.ckey) var/edit_text = "Made [secret ? "not secret" : "secret"] by [editor_ckey] on [SQLtime()]
    " - var/DBQuery/query_message_secret = dbcon.NewQuery("UPDATE [format_table_name("messages")] SET secret = NOT secret, lasteditor = '[editor_ckey]', edits = CONCAT(IFNULL(edits,''),'[edit_text]') WHERE id = [message_id]") + var/DBQuery/query_message_secret = GLOB.dbcon.NewQuery("UPDATE [format_table_name("messages")] SET secret = NOT secret, lasteditor = '[editor_ckey]', edits = CONCAT(IFNULL(edits,''),'[edit_text]') WHERE id = [message_id]") if(!query_message_secret.warn_execute()) return log_admin_private("[key_name(usr)] has toggled [target_ckey]'s [type] made by [admin_ckey] to [secret ? "not secret" : "secret"]") @@ -139,13 +139,13 @@ browse_messages(target_ckey = target_ckey) /proc/browse_messages(type, target_ckey, index, linkless = 0, filter) - if(!dbcon.IsConnected()) + if(!GLOB.dbcon.Connect()) to_chat(usr, "Failed to establish database connection.") return var/output var/ruler = "
    " var/navbar = "\[All\]|\[#\]" - for(var/letter in alphabet) + for(var/letter in GLOB.alphabet) navbar += "|\[[letter]\]" navbar += "|\[Memos\]|\[Watchlist\]" navbar += "
    \ @@ -166,13 +166,13 @@ else output += "|\[Filter offline clients\]
    " output += ruler - var/DBQuery/query_get_type_messages = dbcon.NewQuery("SELECT id, targetckey, adminckey, text, timestamp, server, lasteditor FROM [format_table_name("messages")] WHERE type = '[type]'") + var/DBQuery/query_get_type_messages = GLOB.dbcon.NewQuery("SELECT id, targetckey, adminckey, text, timestamp, server, lasteditor FROM [format_table_name("messages")] WHERE type = '[type]'") if(!query_get_type_messages.warn_execute()) return while(query_get_type_messages.NextRow()) var/id = query_get_type_messages.item[1] var/t_ckey = query_get_type_messages.item[2] - if(type == "watchlist entry" && filter && !(t_ckey in directory)) + if(type == "watchlist entry" && filter && !(t_ckey in GLOB.directory)) continue var/admin_ckey = query_get_type_messages.item[3] var/text = query_get_type_messages.item[4] @@ -190,7 +190,7 @@ output += "
    [text]
    " if(target_ckey) target_ckey = sanitizeSQL(target_ckey) - var/DBQuery/query_get_messages = dbcon.NewQuery("SELECT type, secret, id, adminckey, text, timestamp, server, lasteditor FROM [format_table_name("messages")] WHERE type <> 'memo' AND targetckey = '[target_ckey]' ORDER BY timestamp DESC") + var/DBQuery/query_get_messages = GLOB.dbcon.NewQuery("SELECT type, secret, id, adminckey, text, timestamp, server, lasteditor FROM [format_table_name("messages")] WHERE type <> 'memo' AND targetckey = '[target_ckey]' ORDER BY timestamp DESC") if(!query_get_messages.warn_execute()) return var/messagedata @@ -265,7 +265,7 @@ search = "^\[^\[:alpha:\]\]" else search = "^[index]" - var/DBQuery/query_list_messages = dbcon.NewQuery("SELECT DISTINCT targetckey FROM [format_table_name("messages")] WHERE type <> 'memo' AND targetckey REGEXP '[search]' ORDER BY targetckey") + var/DBQuery/query_list_messages = GLOB.dbcon.NewQuery("SELECT DISTINCT targetckey FROM [format_table_name("messages")] WHERE type <> 'memo' AND targetckey REGEXP '[search]' ORDER BY targetckey") if(!query_list_messages.warn_execute()) return while(query_list_messages.NextRow()) @@ -277,7 +277,7 @@ usr << browse(output, "window=browse_messages;size=900x500") proc/get_message_output(type, target_ckey) - if(!dbcon.IsConnected()) + if(!GLOB.dbcon.Connect()) to_chat(usr, "Failed to establish database connection.") return if(!type) @@ -288,7 +288,7 @@ proc/get_message_output(type, target_ckey) var/query = "SELECT id, adminckey, text, timestamp, lasteditor FROM [format_table_name("messages")] WHERE type = '[type]'" if(type == "message" || type == "watchlist entry") query += " AND targetckey = '[target_ckey]'" - var/DBQuery/query_get_message_output = dbcon.NewQuery(query) + var/DBQuery/query_get_message_output = GLOB.dbcon.NewQuery(query) if(!query_get_message_output.warn_execute()) return while(query_get_message_output.NextRow()) @@ -301,7 +301,7 @@ proc/get_message_output(type, target_ckey) if("message") output += "Admin message left by [admin_ckey] on [timestamp]" output += "
    [text]
    " - var/DBQuery/query_message_read = dbcon.NewQuery("UPDATE [format_table_name("messages")] SET type = 'message sent' WHERE id = [message_id]") + var/DBQuery/query_message_read = GLOB.dbcon.NewQuery("UPDATE [format_table_name("messages")] SET type = 'message sent' WHERE id = [message_id]") if(!query_message_read.warn_execute()) return if("watchlist entry") @@ -333,7 +333,7 @@ proc/get_message_output(type, target_ckey) var/timestamp = note.group[1] notetext = note.group[2] var/admin_ckey = note.group[3] - var/DBQuery/query_convert_time = dbcon.NewQuery("SELECT ADDTIME(STR_TO_DATE('[timestamp]','%d-%b-%Y'), '0')") + var/DBQuery/query_convert_time = GLOB.dbcon.NewQuery("SELECT ADDTIME(STR_TO_DATE('[timestamp]','%d-%b-%Y'), '0')") if(!query_convert_time.Execute()) return if(query_convert_time.NextRow()) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 5d701d0384..ef24d1df1a 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -11,7 +11,7 @@ return if(!check_rights(R_ADMIN)) return - var/client/C = locate(href_list["rejectadminhelp"]) in clients + var/client/C = locate(href_list["rejectadminhelp"]) in GLOB.clients if(!C) return if (deltimer(C.adminhelptimerid)) @@ -31,7 +31,7 @@ if(world.time && spamcooldown > world.time) to_chat(usr, "Please wait [max(round((spamcooldown - world.time)*0.1, 0.1), 0)] seconds.") return - var/client/C = locate(href_list["icissue"]) in clients + var/client/C = locate(href_list["icissue"]) in GLOB.clients if(!C) return @@ -49,7 +49,7 @@ if(world.time && spamcooldown > world.time) to_chat(usr, "Please wait [max(round((spamcooldown - world.time)*0.1, 0.1), 0)] seconds.") return - var/client/C = locate(href_list["markedread"]) in clients + var/client/C = locate(href_list["markedread"]) in GLOB.clients if(!C) return @@ -64,7 +64,7 @@ stickyban(href_list["stickyban"],href_list) else if(href_list["makeAntag"]) - if (!ticker.mode) + if (!SSticker.mode) to_chat(usr, "Not until the round starts!") return switch(href_list["makeAntag"]) @@ -176,7 +176,7 @@ else if(href_list["forceevent"]) if(!check_rights(R_FUN)) return - var/datum/round_event_control/E = locate(href_list["forceevent"]) in SSevent.control + var/datum/round_event_control/E = locate(href_list["forceevent"]) in SSevents.control if(E) var/datum/round_event/event = E.runEvent() if(event.announceWhen>0) @@ -257,7 +257,7 @@ var/mob/playermob - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) if(M.ckey == banckey) playermob = M break @@ -327,24 +327,24 @@ if(!check_rights(R_ADMIN)) return - if(!config.continuous[ticker.mode.config_tag]) - config.continuous[ticker.mode.config_tag] = 1 + if(!config.continuous[SSticker.mode.config_tag]) + config.continuous[SSticker.mode.config_tag] = 1 else - config.continuous[ticker.mode.config_tag] = 0 + config.continuous[SSticker.mode.config_tag] = 0 - message_admins("[key_name_admin(usr)] toggled the round to [config.continuous[ticker.mode.config_tag] ? "continue if all antagonists die" : "end with the antagonists"].") + message_admins("[key_name_admin(usr)] toggled the round to [config.continuous[SSticker.mode.config_tag] ? "continue if all antagonists die" : "end with the antagonists"].") check_antagonists() else if(href_list["toggle_midround_antag"]) if(!check_rights(R_ADMIN)) return - if(!config.midround_antag[ticker.mode.config_tag]) - config.midround_antag[ticker.mode.config_tag] = 1 + if(!config.midround_antag[SSticker.mode.config_tag]) + config.midround_antag[SSticker.mode.config_tag] = 1 else - config.midround_antag[ticker.mode.config_tag] = 0 + config.midround_antag[SSticker.mode.config_tag] = 0 - message_admins("[key_name_admin(usr)] toggled the round to [config.midround_antag[ticker.mode.config_tag] ? "use" : "skip"] the midround antag system.") + message_admins("[key_name_admin(usr)] toggled the round to [config.midround_antag[SSticker.mode.config_tag] ? "use" : "skip"] the midround antag system.") check_antagonists() else if(href_list["alter_midround_time_limit"]) @@ -373,21 +373,21 @@ if(!check_rights(R_ADMIN)) return - if(!ticker.mode.round_ends_with_antag_death) - ticker.mode.round_ends_with_antag_death = 1 + if(!SSticker.mode.round_ends_with_antag_death) + SSticker.mode.round_ends_with_antag_death = 1 else - ticker.mode.round_ends_with_antag_death = 0 + SSticker.mode.round_ends_with_antag_death = 0 - message_admins("[key_name_admin(usr)] edited the midround antagonist system to [ticker.mode.round_ends_with_antag_death ? "end the round" : "continue as extended"] upon failure.") + message_admins("[key_name_admin(usr)] edited the midround antagonist system to [SSticker.mode.round_ends_with_antag_death ? "end the round" : "continue as extended"] upon failure.") check_antagonists() else if(href_list["delay_round_end"]) if(!check_rights(R_SERVER)) return - ticker.delay_end = !ticker.delay_end - log_admin("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].") - message_admins("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].") + SSticker.delay_end = !SSticker.delay_end + log_admin("[key_name(usr)] [SSticker.delay_end ? "delayed the round end" : "has made the round end normally"].") + message_admins("[key_name(usr)] [SSticker.delay_end ? "delayed the round end" : "has made the round end normally"].") href_list["secrets"] = "check_antagonist" else if(href_list["end_round"]) @@ -398,7 +398,7 @@ if(alert(usr, "This will end the round, are you SURE you want to do this?", "Confirmation", "Yes", "No") == "Yes") if(alert(usr, "Final Confirmation: End the round NOW?", "Confirmation", "Yes", "No") == "Yes") message_admins("[key_name_admin(usr)] has ended the round.") - ticker.force_ending = 1 //Yeah there we go APC destroyed mission accomplished + SSticker.force_ending = 1 //Yeah there we go APC destroyed mission accomplished return else message_admins("[key_name_admin(usr)] decided against ending the round.") @@ -481,8 +481,8 @@ return var/banfolder = href_list["unbanf"] - Banlist.cd = "/base/[banfolder]" - var/key = Banlist["key"] + GLOB.Banlist.cd = "/base/[banfolder]" + var/key = GLOB.Banlist["key"] if(alert(usr, "Are you sure you want to unban [key]?", "Confirmation", "Yes", "No") == "Yes") if(RemoveBan(banfolder)) unbanpanel() @@ -498,14 +498,14 @@ var/reason var/banfolder = href_list["unbane"] - Banlist.cd = "/base/[banfolder]" - var/reason2 = Banlist["reason"] - var/temp = Banlist["temp"] + GLOB.Banlist.cd = "/base/[banfolder]" + var/reason2 = GLOB.Banlist["reason"] + var/temp = GLOB.Banlist["temp"] - var/minutes = Banlist["minutes"] + var/minutes = GLOB.Banlist["minutes"] - var/banned_key = Banlist["key"] - Banlist.cd = "/base" + var/banned_key = GLOB.Banlist["key"] + GLOB.Banlist.cd = "/base" var/duration @@ -513,12 +513,12 @@ if("Yes") temp = 1 var/mins = 0 - if(minutes > CMinutes) - mins = minutes - CMinutes + if(minutes > GLOB.CMinutes) + mins = minutes - GLOB.CMinutes mins = input(usr,"How long (in minutes)? (Default: 1440)","Ban time",mins ? mins : 1440) as num|null if(!mins) return - minutes = CMinutes + mins + minutes = GLOB.CMinutes + mins duration = GetExp(minutes) reason = input(usr,"Please State Reason.","Reason",reason2) as message|null if(!reason) @@ -533,12 +533,12 @@ log_admin_private("[key_name(usr)] edited [banned_key]'s ban. Reason: [reason] Duration: [duration]") ban_unban_log_save("[key_name(usr)] edited [banned_key]'s ban. Reason: [reason] Duration: [duration]") message_admins("[key_name_admin(usr)] edited [banned_key]'s ban. Reason: [reason] Duration: [duration]") - Banlist.cd = "/base/[banfolder]" - Banlist["reason"] << reason - Banlist["temp"] << temp - Banlist["minutes"] << minutes - Banlist["bannedby"] << usr.ckey - Banlist.cd = "/base" + GLOB.Banlist.cd = "/base/[banfolder]" + GLOB.Banlist["reason"] << reason + GLOB.Banlist["temp"] << temp + GLOB.Banlist["minutes"] << minutes + GLOB.Banlist["bannedby"] << usr.ckey + GLOB.Banlist.cd = "/base" feedback_inc("ban_edit",1) unbanpanel() @@ -614,8 +614,8 @@ //Regular jobs //Command (Blue) dat += "" - dat += "" - for(var/jobPos in command_positions) + dat += "" + for(var/jobPos in GLOB.command_positions) if(!jobPos) continue if(jobban_isbanned(M, jobPos)) @@ -633,8 +633,8 @@ //Security (Red) counter = 0 dat += "
    Command Positions
    Command Positions
    " - dat += "" - for(var/jobPos in security_positions) + dat += "" + for(var/jobPos in GLOB.security_positions) if(!jobPos) continue if(jobban_isbanned(M, jobPos)) @@ -652,8 +652,8 @@ //Engineering (Yellow) counter = 0 dat += "
    Security Positions
    Security Positions
    " - dat += "" - for(var/jobPos in engineering_positions) + dat += "" + for(var/jobPos in GLOB.engineering_positions) if(!jobPos) continue if(jobban_isbanned(M, jobPos)) @@ -671,8 +671,8 @@ //Medical (White) counter = 0 dat += "
    Engineering Positions
    Engineering Positions
    " - dat += "" - for(var/jobPos in medical_positions) + dat += "" + for(var/jobPos in GLOB.medical_positions) if(!jobPos) continue if(jobban_isbanned(M, jobPos)) @@ -690,8 +690,8 @@ //Science (Purple) counter = 0 dat += "
    Medical Positions
    Medical Positions
    " - dat += "" - for(var/jobPos in science_positions) + dat += "" + for(var/jobPos in GLOB.science_positions) if(!jobPos) continue if(jobban_isbanned(M, jobPos)) @@ -709,8 +709,8 @@ //Supply (Brown) counter = 0 dat += "
    Science Positions
    Science Positions
    " - dat += "" - for(var/jobPos in supply_positions) + dat += "" + for(var/jobPos in GLOB.supply_positions) if(!jobPos) continue if(jobban_isbanned(M, jobPos)) @@ -728,8 +728,8 @@ //Civilian (Grey) counter = 0 dat += "
    Supply Positions
    Supply Positions
    " - dat += "" - for(var/jobPos in civilian_positions) + dat += "" + for(var/jobPos in GLOB.civilian_positions) if(!jobPos) continue if(jobban_isbanned(M, jobPos)) @@ -747,8 +747,8 @@ //Non-Human (Green) counter = 0 dat += "
    Civilian Positions
    Civilian Positions
    " - dat += "" - for(var/jobPos in nonhuman_positions) + dat += "" + for(var/jobPos in GLOB.nonhuman_positions) if(!jobPos) continue if(jobban_isbanned(M, jobPos)) @@ -895,42 +895,42 @@ var/list/joblist = list() switch(href_list["jobban3"]) if("commanddept") - for(var/jobPos in command_positions) + for(var/jobPos in GLOB.command_positions) if(!jobPos) continue joblist += jobPos if("securitydept") - for(var/jobPos in security_positions) + for(var/jobPos in GLOB.security_positions) if(!jobPos) continue joblist += jobPos if("engineeringdept") - for(var/jobPos in engineering_positions) + for(var/jobPos in GLOB.engineering_positions) if(!jobPos) continue joblist += jobPos if("medicaldept") - for(var/jobPos in medical_positions) + for(var/jobPos in GLOB.medical_positions) if(!jobPos) continue joblist += jobPos if("sciencedept") - for(var/jobPos in science_positions) + for(var/jobPos in GLOB.science_positions) if(!jobPos) continue joblist += jobPos if("supplydept") - for(var/jobPos in supply_positions) + for(var/jobPos in GLOB.supply_positions) if(!jobPos) continue joblist += jobPos if("civiliandept") - for(var/jobPos in civilian_positions) + for(var/jobPos in GLOB.civilian_positions) if(!jobPos) continue joblist += jobPos if("nonhumandept") - for(var/jobPos in nonhuman_positions) + for(var/jobPos in GLOB.nonhuman_positions) if(!jobPos) continue joblist += jobPos @@ -1124,7 +1124,7 @@ else if(href_list["messageedits"]) var/message_id = sanitizeSQL("[href_list["messageedits"]]") - var/DBQuery/query_get_message_edits = dbcon.NewQuery("SELECT edits FROM [format_table_name("messages")] WHERE id = '[message_id]'") + var/DBQuery/query_get_message_edits = GLOB.dbcon.NewQuery("SELECT edits FROM [format_table_name("messages")] WHERE id = '[message_id]'") if(!query_get_message_edits.warn_execute()) return if(query_get_message_edits.NextRow()) @@ -1204,56 +1204,56 @@ if(!check_rights(R_ADMIN)) return - if(ticker && ticker.mode) + if(SSticker && SSticker.mode) return alert(usr, "The game has already started.", null, null, null, null) var/dat = {"What mode do you wish to play?
    "} for(var/mode in config.modes) dat += {"[config.mode_names[mode]]
    "} dat += {"Secret
    "} dat += {"Random
    "} - dat += {"Now: [master_mode]"} + dat += {"Now: [GLOB.master_mode]"} usr << browse(dat, "window=c_mode") else if(href_list["f_secret"]) if(!check_rights(R_ADMIN)) return - if(ticker && ticker.mode) + if(SSticker && SSticker.mode) return alert(usr, "The game has already started.", null, null, null, null) - if(master_mode != "secret") + if(GLOB.master_mode != "secret") return alert(usr, "The game mode has to be secret!", null, null, null, null) var/dat = {"What game mode do you want to force secret to be? Use this if you want to change the game mode, but want the players to believe it's secret. This will only work if the current game mode is secret.
    "} for(var/mode in config.modes) dat += {"[config.mode_names[mode]]
    "} dat += {"Random (default)
    "} - dat += {"Now: [secret_force_mode]"} + dat += {"Now: [GLOB.secret_force_mode]"} usr << browse(dat, "window=f_secret") else if(href_list["c_mode2"]) if(!check_rights(R_ADMIN|R_SERVER)) return - if (ticker && ticker.mode) + if (SSticker && SSticker.mode) return alert(usr, "The game has already started.", null, null, null, null) - master_mode = href_list["c_mode2"] - log_admin("[key_name(usr)] set the mode as [master_mode].") - message_admins("[key_name_admin(usr)] set the mode as [master_mode].") - to_chat(world, "The mode is now: [master_mode]") + GLOB.master_mode = href_list["c_mode2"] + log_admin("[key_name(usr)] set the mode as [GLOB.master_mode].") + message_admins("[key_name_admin(usr)] set the mode as [GLOB.master_mode].") + to_chat(world, "The mode is now: [GLOB.master_mode]") Game() // updates the main game menu - world.save_mode(master_mode) + world.save_mode(GLOB.master_mode) .(href, list("c_mode"=1)) else if(href_list["f_secret2"]) if(!check_rights(R_ADMIN|R_SERVER)) return - if(ticker && ticker.mode) + if(SSticker && SSticker.mode) return alert(usr, "The game has already started.", null, null, null, null) - if(master_mode != "secret") + if(GLOB.master_mode != "secret") return alert(usr, "The game mode has to be secret!", null, null, null, null) - secret_force_mode = href_list["f_secret2"] - log_admin("[key_name(usr)] set the forced secret mode as [secret_force_mode].") - message_admins("[key_name_admin(usr)] set the forced secret mode as [secret_force_mode].") + GLOB.secret_force_mode = href_list["f_secret2"] + log_admin("[key_name(usr)] set the forced secret mode as [GLOB.secret_force_mode].") + message_admins("[key_name_admin(usr)] set the forced secret mode as [GLOB.secret_force_mode].") Game() // updates the main game menu .(href, list("f_secret"=1)) @@ -1328,7 +1328,7 @@ if(alert(usr, "Send [key_name(M)] to Prison?", "Message", "Yes", "No") != "Yes") return - M.loc = pick(prisonwarp) + M.loc = pick(GLOB.prisonwarp) to_chat(M, "You have been sent to Prison!") log_admin("[key_name(usr)] has sent [key_name(M)] to Prison!") @@ -1378,7 +1378,7 @@ M.Paralyse(5) sleep(5) - M.loc = pick(tdome1) + M.loc = pick(GLOB.tdome1) spawn(50) to_chat(M, "You have been sent to the Thunderdome.") log_admin("[key_name(usr)] has sent [key_name(M)] to the thunderdome. (Team 1)") @@ -1404,7 +1404,7 @@ M.Paralyse(5) sleep(5) - M.loc = pick(tdome2) + M.loc = pick(GLOB.tdome2) spawn(50) to_chat(M, "You have been sent to the Thunderdome.") log_admin("[key_name(usr)] has sent [key_name(M)] to the thunderdome. (Team 2)") @@ -1427,7 +1427,7 @@ M.Paralyse(5) sleep(5) - M.loc = pick(tdomeadmin) + M.loc = pick(GLOB.tdomeadmin) spawn(50) to_chat(M, "You have been sent to the Thunderdome.") log_admin("[key_name(usr)] has sent [key_name(M)] to the thunderdome. (Admin.)") @@ -1457,7 +1457,7 @@ observer.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(observer), slot_shoes) M.Paralyse(5) sleep(5) - M.loc = pick(tdomeobserve) + M.loc = pick(GLOB.tdomeobserve) spawn(50) to_chat(M, "You have been sent to the Thunderdome.") log_admin("[key_name(usr)] has sent [key_name(M)] to the thunderdome. (Observer.)") @@ -1546,7 +1546,7 @@ usr.client.cmd_admin_animalize(M) else if(href_list["gangpoints"]) - var/datum/gang/G = locate(href_list["gangpoints"]) in ticker.mode.gangs + var/datum/gang/G = locate(href_list["gangpoints"]) in SSticker.mode.gangs if(G) var/newpoints = input("Set [G.name ] Gang's influence.","Set Influence",G.points) as null|num if(!newpoints) @@ -1594,7 +1594,7 @@ output_devil_info(M) else if(href_list["adminmoreinfo"]) - var/mob/M = locate(href_list["adminmoreinfo"]) + var/mob/M = locate(href_list["adminmoreinfo"]) in GLOB.mob_list if(!ismob(M)) to_chat(usr, "This can only be used on instances of type /mob.") return @@ -1646,7 +1646,7 @@ to_chat(src.owner, "Name = [M.name]; Real_name = [M.real_name]; Mind_name = [M.mind?"[M.mind.name]":""]; Key = [M.key];") to_chat(src.owner, "Location = [location_description];") to_chat(src.owner, "[special_role_description]") - to_chat(src.owner, "(PM) (PP) (VV) (SM) (FLW) (CA)") + to_chat(src.owner, ADMIN_FULLMONTY_NONAME(M)) else if(href_list["addjobslot"]) if(!check_rights(R_ADMIN)) @@ -1729,38 +1729,15 @@ if(!check_rights(R_ADMIN|R_FUN)) return - var/mob/living/carbon/human/H = locate(href_list["adminsmite"]) in mob_list + var/mob/living/carbon/human/H = locate(href_list["adminsmite"]) in GLOB.mob_list if(!H || !istype(H)) + to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") return - var/list/punishment_list = list(ADMIN_PUNISHMENT_LIGHTNING, ADMIN_PUNISHMENT_BRAINDAMAGE, ADMIN_PUNISHMENT_GIB) - - var/punishment = input("Choose a punishment", "DIVINE SMITING") as null|anything in punishment_list - - if(QDELETED(H) || !punishment) - return - - switch(punishment) - if(ADMIN_PUNISHMENT_LIGHTNING) - var/turf/T = get_step(get_step(H, NORTH), NORTH) - T.Beam(H, icon_state="lightning[rand(1,12)]", time = 5) - H.adjustFireLoss(75) - H.electrocution_animation(40) - to_chat(H, "The gods have punished you for your sins!") - if(ADMIN_PUNISHMENT_BRAINDAMAGE) - H.adjustBrainLoss(75) - if(ADMIN_PUNISHMENT_GIB) - H.gib(FALSE) - - message_admins("[key_name_admin(usr)] punished [key_name_admin(H)] with [punishment].") - log_admin("[key_name(usr)] punished [key_name(H)] with [punishment].") - - else if(href_list["BlueSpaceArtillery"]) - var/mob/living/M = locate(href_list["BlueSpaceArtillery"]) in mob_list - usr.client.bluespace_artillery(M) + usr.client.smite(H) else if(href_list["CentcommReply"]) - var/mob/living/carbon/human/H = locate(href_list["CentcommReply"]) in mob_list + var/mob/living/carbon/human/H = locate(href_list["CentcommReply"]) in GLOB.mob_list if(!istype(H)) to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") return @@ -1846,18 +1823,28 @@ if(!check_rights(R_ADMIN)) return - var/mob/M = locate(href_list["individuallog"]) in mob_list + var/mob/M = locate(href_list["individuallog"]) in GLOB.mob_list if(!ismob(M)) to_chat(usr, "This can only be used on instances of type /mob.") return show_individual_logging_panel(M, href_list["log_type"]) + else if(href_list["languagemenu"]) + if(!check_rights(R_ADMIN)) + return + + var/mob/living/L = locate(href_list["languagemenu"]) in GLOB.mob_list + if(!isliving(L)) + to_chat(usr, "This can only be used on instances of type /mob/living.") + return + + L.open_language_menu(usr) else if(href_list["traitor"]) if(!check_rights(R_ADMIN)) return - if(!ticker || !ticker.mode) + if(!SSticker || !SSticker.mode) alert("The game hasn't started yet!") return @@ -2024,7 +2011,7 @@ else if(href_list["ac_submit_new_channel"]) var/check = 0 - for(var/datum/newscaster/feed_channel/FC in news_network.network_channels) + for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels) if(FC.channel_name == src.admincaster_feed_channel.channel_name) check = 1 break @@ -2033,7 +2020,7 @@ else var/choice = alert("Please confirm Feed channel creation.","Network Channel Handler","Confirm","Cancel") if(choice=="Confirm") - news_network.CreateFeedChannel(src.admincaster_feed_channel.channel_name, src.admin_signature, src.admincaster_feed_channel.locked, 1) + GLOB.news_network.CreateFeedChannel(src.admincaster_feed_channel.channel_name, src.admin_signature, src.admincaster_feed_channel.locked, 1) feedback_inc("newscaster_channels",1) log_admin("[key_name(usr)] created command feed channel: [src.admincaster_feed_channel.channel_name]!") src.admincaster_screen=5 @@ -2041,7 +2028,7 @@ else if(href_list["ac_set_channel_receiving"]) var/list/available_channels = list() - for(var/datum/newscaster/feed_channel/F in news_network.network_channels) + for(var/datum/newscaster/feed_channel/F in GLOB.news_network.network_channels) available_channels += F.channel_name src.admincaster_feed_channel.channel_name = adminscrub(input(usr, "Choose receiving Feed Channel.", "Network Channel Handler") in available_channels ) src.access_news_network() @@ -2056,11 +2043,11 @@ if(src.admincaster_feed_message.returnBody(-1) =="" || src.admincaster_feed_message.returnBody(-1) =="\[REDACTED\]" || src.admincaster_feed_channel.channel_name == "" ) src.admincaster_screen = 6 else - news_network.SubmitArticle(src.admincaster_feed_message.returnBody(-1), src.admin_signature, src.admincaster_feed_channel.channel_name, null, 1) + GLOB.news_network.SubmitArticle(src.admincaster_feed_message.returnBody(-1), src.admin_signature, src.admincaster_feed_channel.channel_name, null, 1) feedback_inc("newscaster_stories",1) src.admincaster_screen=4 - for(var/obj/machinery/newscaster/NEWSCASTER in allCasters) + for(var/obj/machinery/newscaster/NEWSCASTER in GLOB.allCasters) NEWSCASTER.newsAlert(src.admincaster_feed_channel.channel_name) log_admin("[key_name(usr)] submitted a feed story to channel: [src.admincaster_feed_channel.channel_name]!") @@ -2084,12 +2071,12 @@ else if(href_list["ac_menu_wanted"]) var/already_wanted = 0 - if(news_network.wanted_issue.active) + if(GLOB.news_network.wanted_issue.active) already_wanted = 1 if(already_wanted) - src.admincaster_wanted_message.criminal = news_network.wanted_issue.criminal - src.admincaster_wanted_message.body = news_network.wanted_issue.body + src.admincaster_wanted_message.criminal = GLOB.news_network.wanted_issue.criminal + src.admincaster_wanted_message.body = GLOB.news_network.wanted_issue.body src.admincaster_screen = 14 src.access_news_network() @@ -2113,10 +2100,10 @@ var/choice = alert("Please confirm Wanted Issue [(input_param==1) ? ("creation.") : ("edit.")]","Network Security Handler","Confirm","Cancel") if(choice=="Confirm") if(input_param==1) //If input_param == 1 we're submitting a new wanted issue. At 2 we're just editing an existing one. See the else below - news_network.submitWanted(admincaster_wanted_message.criminal, admincaster_wanted_message.body, admin_signature, null, 1, 1) + GLOB.news_network.submitWanted(admincaster_wanted_message.criminal, admincaster_wanted_message.body, admin_signature, null, 1, 1) src.admincaster_screen = 15 else - news_network.submitWanted(admincaster_wanted_message.criminal, admincaster_wanted_message.body, admin_signature) + GLOB.news_network.submitWanted(admincaster_wanted_message.criminal, admincaster_wanted_message.body, admin_signature) src.admincaster_screen = 19 log_admin("[key_name(usr)] issued a Station-wide Wanted Notification for [src.admincaster_wanted_message.criminal]!") src.access_news_network() @@ -2124,7 +2111,7 @@ else if(href_list["ac_cancel_wanted"]) var/choice = alert("Please confirm Wanted Issue removal.","Network Security Handler","Confirm","Cancel") if(choice=="Confirm") - news_network.deleteWanted() + GLOB.news_network.deleteWanted() src.admincaster_screen=17 src.access_news_network() @@ -2208,7 +2195,7 @@ else if(href_list["kick_all_from_lobby"]) if(!check_rights(R_ADMIN)) return - if(ticker && ticker.current_state == GAME_STATE_PLAYING) + if(SSticker && SSticker.current_state == GAME_STATE_PLAYING) var/afkonly = text2num(href_list["afkonly"]) if(alert("Are you sure you want to kick all [afkonly ? "AFK" : ""] clients from the lobby??","Message","Yes","Cancel") != "Yes") to_chat(usr, "Kick clients from lobby aborted") @@ -2247,14 +2234,14 @@ O.belt = text2path(href_list["outfit_belt"]) O.ears = text2path(href_list["outfit_ears"]) - custom_outfits.Add(O) + GLOB.custom_outfits.Add(O) message_admins("[key_name(usr)] created \"[O.name]\" outfit!") else if(href_list["set_selfdestruct_code"]) if(!check_rights(R_ADMIN)) return var/code = random_nukecode() - for(var/obj/machinery/nuclearbomb/selfdestruct/SD in nuke_list) + for(var/obj/machinery/nuclearbomb/selfdestruct/SD in GLOB.nuke_list) SD.r_code = code message_admins("[key_name_admin(usr)] has set the self-destruct \ code to \"[code]\".") @@ -2277,7 +2264,7 @@ return G.report_message = description message_admins("[key_name(usr)] created \"[G.name]\" station goal.") - ticker.mode.station_goals += G + SSticker.mode.station_goals += G modify_goals() else if(href_list["viewruntime"]) @@ -2290,58 +2277,3 @@ error_viewer.show_to(owner, locate(href_list["viewruntime_backto"]), href_list["viewruntime_linear"]) else error_viewer.show_to(owner, null, href_list["viewruntime_linear"]) - else if(href_list["mentor"]) - - if(!check_rights(R_ADMIN)) return - - var/mob/M = locate(href_list["mentor"]) - if(!ismob(M)) - to_chat(usr, "this can be only used on instances of type /mob") - return - - if(!M.client) - to_chat(usr, "no client") - return - - log_admin("[key_name(usr)] has granted [key_name(M)] mentor access") - message_admins("\blue [key_name_admin(usr)] has granted [key_name_admin(M)] mentor access", 1) - - var/DBQuery/query = dbcon.NewQuery("INSERT INTO [format_table_name("mentor")] (ckey) VALUES ('[M.client.ckey]')") - if(!query.Execute()) - var/err = query.ErrorMsg() - log_game("SQL ERROR during adding new mentor. Error : \[[err]\]\n") - load_mentors() - M.verbs += /client/proc/cmd_mentor_say - M.verbs += /client/proc/show_mentor_memo - to_chat(M, "\blue You've been granted mentor access! Help people who send mentor-pms") - - else if(href_list["removementor"]) - if(!check_rights(R_ADMIN)) return - - var/mob/living/carbon/human/M = locate(href_list["removementor"]) - if(!ismob(M)) - usr << "this can be only used on instances of type /mob" - return - - log_admin("[key_name(usr)] has removed mentor access from [key_name(M)]") - message_admins("\blue [key_name_admin(usr)] has removed mentor access from [key_name_admin(M)]", 1) - - var/DBQuery/query = dbcon.NewQuery("DELETE FROM [format_table_name("mentor")] WHERE ckey = '[M.client.ckey]'") - if(!query.Execute()) - var/err = query.ErrorMsg() - log_game("SQL ERROR during removing mentor. Error : \[[err]\]\n") - load_mentors() - to_chat(M, "\blue Your mentor access has been removed") - M.verbs -= /client/proc/cmd_mentor_say - M.verbs -= /client/proc/show_mentor_memo - - else if(href_list["mentormemoeditlist"]) - var/sql_key = sanitizeSQL("[href_list["memoeditlist"]]") - var/DBQuery/query_memoedits = dbcon.NewQuery("SELECT edits FROM [format_table_name("mentor_memo")] WHERE (ckey = '[sql_key]')") - if(!query_memoedits.Execute()) - var/err = query_memoedits.ErrorMsg() - log_game("SQL ERROR obtaining edits from memo table. Error : \[[err]\]\n") - return - if(query_memoedits.NextRow()) - var/edit_log = query_memoedits.item[1] - usr << browse(edit_log,"window=mentormemoeditlist") \ No newline at end of file diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index b666467c7a..3e3db4172c 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -30,6 +30,12 @@ query_log = "[usr.ckey]([usr]) [query_log]" log_game(query_log) NOTICE(query_log) + var/list/runtime_tracker = list() + var/runtimes_list = "" + var/runtimes = 0 + var/objs_all = 0 + var/objs_eligible = 0 + var/start_time = REALTIMEOFDAY if(!query_text || length(query_text) < 1) return @@ -43,82 +49,100 @@ var/list/querys = SDQL_parse(query_list) + if(!querys || querys.len < 1) return - try + for(var/list/query_tree in querys) + var/list/from_objs = list() + var/list/select_types = list() - for(var/list/query_tree in querys) - var/list/from_objs = list() - var/list/select_types = list() + switch(query_tree[1]) + if("explain") + SDQL_testout(query_tree["explain"]) + return - switch(query_tree[1]) - if("explain") - SDQL_testout(query_tree["explain"]) + if("call") + if("on" in query_tree) + select_types = query_tree["on"] + else return - if("call") - if("on" in query_tree) - select_types = query_tree["on"] - else - return + if("select", "delete", "update") + select_types = query_tree[query_tree[1]] - if("select", "delete", "update") - select_types = query_tree[query_tree[1]] + from_objs = SDQL_from_objs(query_tree["from"]) - from_objs = SDQL_from_objs(query_tree["from"]) + var/list/objs = list() - var/list/objs = list() - - for(var/type in select_types) + for(var/type in select_types) + try objs += SDQL_get_all(type, from_objs) - CHECK_TICK + catch(var/exception/e) + runtime_tracker += SDQL_parse_exception(e) + runtimes++ + CHECK_TICK + objs_all = objs.len - if("where" in query_tree) - var/objs_temp = objs - objs = list() - for(var/datum/d in objs_temp) + if("where" in query_tree) + var/objs_temp = objs + objs = list() + for(var/datum/d in objs_temp) + try if(SDQL_expression(d, query_tree["where"])) objs += d + objs_eligible++ + catch(var/exception/e) + runtime_tracker += SDQL_parse_exception(e) + runtimes++ + CHECK_TICK + + switch(query_tree[1]) + if("call") + for(var/datum/d in objs) + try + SDQL_var(d, query_tree["call"][1], source = d) + catch(var/exception/e) + runtime_tracker += SDQL_parse_exception(e) + runtimes++ CHECK_TICK - switch(query_tree[1]) - if("call") - for(var/datum/d in objs) - SDQL_var(d, query_tree["call"][1], source = d) - CHECK_TICK - - if("delete") - for(var/datum/d in objs) + if("delete") + for(var/datum/d in objs) + try qdel(d) - CHECK_TICK + catch(var/exception/e) + runtime_tracker += SDQL_parse_exception(e) + runtimes++ + CHECK_TICK - if("select") - var/text = "" - for(var/datum/t in objs) + if("select") + var/text = "" + for(var/datum/t in objs) + try text += "\ref[t]" if(istype(t, /atom)) var/atom/a = t - if(a.x) text += ": [t] at ([a.x], [a.y], [a.z])
    " else if(a.loc && a.loc.x) text += ": [t] in [a.loc] at ([a.loc.x], [a.loc.y], [a.loc.z])
    " - else text += ": [t]
    " - else text += ": [t]
    " - CHECK_TICK + catch(var/exception/e) + runtime_tracker += SDQL_parse_exception(e) + runtimes++ + CHECK_TICK + usr << browse(text, "window=SDQL-result") - usr << browse(text, "window=SDQL-result") - - if("update") - if("set" in query_tree) - var/list/set_list = query_tree["set"] - for(var/datum/d in objs) + if("update") + if("set" in query_tree) + var/list/set_list = query_tree["set"] + for(var/datum/d in objs) + try for(var/list/sets in set_list) var/datum/temp = d var/i = 0 @@ -130,13 +154,28 @@ temp = temp.vars[v] else break - CHECK_TICK + catch(var/exception/e) + runtime_tracker += SDQL_parse_exception(e) + runtimes++ + CHECK_TICK - catch(var/exception/e) - to_chat(usr, "A runtime error has occured in your SDQL2-query.") - to_chat(usr, "\[NAME\][e.name]") - to_chat(usr, "\[FILE\][e.file]") - to_chat(usr, "\[LINE\][e.line]") + var/end_time = REALTIMEOFDAY + end_time -= start_time + to_chat(usr, "SDQL query results: [query_text]") + to_chat(usr, "SDQL query completed: [objs_all] objects selected by path, and [objs_eligible] objects executed on after WHERE filtering if applicable.") + to_chat(usr, "SDQL query took [end_time/10] seconds to complete.") + if(runtimes) + to_chat(usr, "SDQL query encountered [runtimes] runtimes!") + to_chat(usr, "Opening runtime tracking window.") + runtimes_list = runtime_tracker.Join() + usr << browse(runtimes_list, "window=SDQL-runtimes") + +/proc/SDQL_parse_exception(exception/E) + var/list/returning = list() + returning += "Runtime Error: [E.name]
    " + returning += "Occured at line [E.line] file [E.file]
    " + returning += "Description: [E.desc]
    " + return returning /proc/SDQL_callproc_global(procname,args_list) set waitfor = FALSE @@ -180,7 +219,6 @@ pos++ qdel(parser) - return querys @@ -381,10 +419,9 @@ /proc/SDQL_var(datum/object, list/expression, start = 1, source) var/v - var/static/list/exclude = list("usr", "src", "marked", "global") var/long = start < expression.len if(object == world && long && expression[start + 1] == ".") - to_chat(usr, "Sorry, but global variables are not supported at the moment.") + to_chat(usr, "Sorry, but world variables are not supported at the moment.") return null else if(expression [start] == "{" && long) if(lowertext(copytext(expression[start + 1], 1, 3)) != "0x") @@ -396,7 +433,10 @@ return null start++ else if((!long || expression[start + 1] == ".") && (expression[start] in object.vars)) - v = object.vars[expression[start]] + if(object.can_vv_get(expression[start])) + v = object.vars[expression[start]] + else + v = "SECRET" else if(long && expression[start + 1] == ":" && hascall(object, expression[start])) v = expression[start] else if(!long || expression[start + 1] == ".") @@ -410,8 +450,10 @@ v = usr.client.holder.marked_datum else return null - if("global") + if("world") v = world + if("global") + v = GLOB else return null else if(object == world) // Shitty ass hack kill me. diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 57349209de..93d034cc32 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -11,7 +11,7 @@ var/list/forenames = list() var/list/ckeys = list() var/founds = "" - for(var/mob/M in mob_list) + for(var/mob/M in GLOB.mob_list) var/list/indexing = list(M.real_name, M.name) if(M.mind) indexing += M.mind.name @@ -76,11 +76,11 @@ src.verbs |= /client/verb/adminhelp adminhelptimerid = 0 -/client/verb/adminhelp(msg as message) +/client/verb/adminhelp(msg as text) set category = "Admin" set name = "Adminhelp" - if(say_disabled) //This is here to try to identify lag problems + if(GLOB.say_disabled) //This is here to try to identify lag problems to_chat(usr, "Speech is currently admin-disabled.") return @@ -94,8 +94,7 @@ //clean the input msg if(!msg) return - var/list/replace_chars = list("\n"=" ","\t"=" ") - msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN),replace_chars) + msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN)) if(!msg) return var/original_msg = msg @@ -108,11 +107,12 @@ if(!mob) return //this doesn't happen - msg = "HELP: [key_name(src)] [ADMIN_QUE(mob)] [ADMIN_PP(mob)] [ADMIN_VV(mob)] [ADMIN_SM(mob)] [ADMIN_FLW(mob)] [ADMIN_TP(mob)] [ADMIN_SMITE(mob)] [ADMIN_REJECT(src)] [ADMIN_IC(src)] [ADMIN_MARKREAD(src)]: [msg]" + var/ref_client = "\ref[src]" + msg = "HELP: [key_name(src)] [ADMIN_FULLMONTY_NONAME(mob)] [ADMIN_SMITE(mob)] (REJT) (IC): [msg]" //send this msg to all admins - for(var/client/X in admins) + for(var/client/X in GLOB.admins) if(X.prefs.toggles & SOUND_ADMINHELP) X << 'sound/effects/adminhelp.ogg' window_flash(X, ignorepref = TRUE) @@ -127,12 +127,12 @@ log_admin_private("HELP: [key_name(src)]: [original_msg] - heard by [admin_number_present] non-AFK admins who have +BAN.") if(admin_number_present <= 0) to_chat(src, "No active admins are online, your adminhelp was sent to the admin irc.") - feedback_add_details("admin_verb","AH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Adminhelp") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return /proc/get_admin_counts(requiredflags = R_BAN) . = list("total" = list(), "noflags" = list(), "afk" = list(), "stealth" = list(), "present" = list()) - for(var/client/X in admins) + for(var/client/X in GLOB.admins) .["total"] += X if(requiredflags != 0 && !check_rights_for(X, requiredflags)) .["noflags"] += X @@ -172,7 +172,7 @@ message["message_sender"] = source message["message"] = msg message["source"] = "([config.cross_name])" - message["key"] = global.comms_key + message["key"] = GLOB.comms_key message["crossmessage"] = type world.Export("[config.cross_address]?[list2params(message)]") @@ -181,7 +181,7 @@ /proc/ircadminwho() var/list/message = list("Admins: ") var/list/admin_keys = list() - for(var/adm in admins) + for(var/adm in GLOB.admins) var/client/C = adm admin_keys += "[C][C.holder.fakekey ? "(Stealth)" : ""][C.is_afk() ? "(AFK)" : ""]" diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm index ad93c4d35c..943e8d53e0 100644 --- a/code/modules/admin/verbs/adminjump.dm +++ b/code/modules/admin/verbs/adminjump.dm @@ -1,4 +1,4 @@ -/client/proc/jumptoarea(area/A in sortedAreas) +/client/proc/jumptoarea(area/A in GLOB.sortedAreas) set name = "Jump to Area" set desc = "Area to jump to" set category = "Admin" @@ -23,7 +23,7 @@ usr.forceMove(T) log_admin("[key_name(usr)] jumped to [A]") message_admins("[key_name_admin(usr)] jumped to [A]") - feedback_add_details("admin_verb","JA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Jump To Area") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/jumptoturf(turf/T in world) set name = "Jump to Turf" @@ -35,10 +35,10 @@ log_admin("[key_name(usr)] jumped to [T.x],[T.y],[T.z] in [T.loc]") message_admins("[key_name_admin(usr)] jumped to [T.x],[T.y],[T.z] in [T.loc]") usr.loc = T - feedback_add_details("admin_verb","JT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Jump To Turf") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return -/client/proc/jumptomob(mob/M in mob_list) +/client/proc/jumptomob(mob/M in GLOB.mob_list) set category = "Admin" set name = "Jump to Mob" @@ -52,7 +52,7 @@ var/mob/A = src.mob var/turf/T = get_turf(M) if(T && isturf(T)) - feedback_add_details("admin_verb","JM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Jump To Mob") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! A.forceMove(M.loc) else to_chat(A, "This mob is not located in the game world.") @@ -70,7 +70,7 @@ A.x = tx A.y = ty A.z = tz - feedback_add_details("admin_verb","JC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Jump To Coordiate") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! message_admins("[key_name_admin(usr)] jumped to coordinates [tx], [ty], [tz]") /client/proc/jumptokey() @@ -82,7 +82,7 @@ return var/list/keys = list() - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) keys += M.client var/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in sortKey(keys) if(!selection) @@ -94,9 +94,9 @@ usr.forceMove(M.loc) - feedback_add_details("admin_verb","JK") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Jump To Key") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/Getmob(mob/M in mob_list) +/client/proc/Getmob(mob/M in GLOB.mob_list) set category = "Admin" set name = "Get Mob" set desc = "Mob to teleport" @@ -107,7 +107,7 @@ log_admin("[key_name(usr)] teleported [key_name(M)]") message_admins("[key_name_admin(usr)] teleported [key_name_admin(M)]") M.forceMove(get_turf(usr)) - feedback_add_details("admin_verb","GM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Get Mob") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/Getkey() set category = "Admin" @@ -119,7 +119,7 @@ return var/list/keys = list() - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) keys += M.client var/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in sortKey(keys) if(!selection) @@ -133,7 +133,7 @@ if(M) M.forceMove(get_turf(usr)) usr.loc = M.loc - feedback_add_details("admin_verb","GK") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Get Key") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/sendmob(mob/M in sortmobs()) set category = "Admin" @@ -141,7 +141,7 @@ if(!src.holder) to_chat(src, "Only administrators may use this command.") return - var/area/A = input(usr, "Pick an area.", "Pick an area") in sortedAreas|null + var/area/A = input(usr, "Pick an area.", "Pick an area") in GLOB.sortedAreas|null if(A && istype(A)) if(M.forceMove(safepick(get_area_turfs(A)))) @@ -149,4 +149,4 @@ message_admins("[key_name_admin(usr)] teleported [key_name_admin(M)] to [A]") else to_chat(src, "Failed to move mob to a valid location.") - feedback_add_details("admin_verb","SMOB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Send Mob") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index b1a609d51f..d93a34fa09 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -2,7 +2,7 @@ //allows right clicking mobs to send an admin PM to their client, forwards the selected mob's client to cmd_admin_pm -/client/proc/cmd_admin_pm_context(mob/M in mob_list) +/client/proc/cmd_admin_pm_context(mob/M in GLOB.mob_list) set category = null set name = "Admin PM Mob" if(!holder) @@ -11,7 +11,7 @@ if( !ismob(M) || !M.client ) return cmd_admin_pm(M.client,null) - feedback_add_details("admin_verb","APMM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Admin PM Mob") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! //shows a list of clients we could send PMs to, then forwards our choice to cmd_admin_pm /client/proc/cmd_admin_pm_panel() @@ -33,7 +33,7 @@ targets["(No Mob) - [T]"] = T var/target = input(src,"To whom shall we send a message?","Admin PM",null) as null|anything in sortList(targets) cmd_admin_pm(targets[target],null) - feedback_add_details("admin_verb","APM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Admin PM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_ahelp_reply(whom) if(prefs.muted & MUTE_ADMINHELP) @@ -43,7 +43,7 @@ if(istext(whom)) if(cmptext(copytext(whom,1,2),"@")) whom = findStealthKey(whom) - C = directory[whom] + C = GLOB.directory[whom] else if(istype(whom,/client)) C = whom if(!C) @@ -73,7 +73,7 @@ if(whom == "IRCKEY") irc = 1 else - C = directory[whom] + C = GLOB.directory[whom] else if(istype(whom,/client)) C = whom if(irc) @@ -178,13 +178,13 @@ if(irc) log_admin_private("PM: [key_name(src)]->IRC: [rawmsg]") - for(var/client/X in admins) + for(var/client/X in GLOB.admins) to_chat(X, "PM: [key_name(src, X, 0)]->IRC: \blue [keywordparsedmsg]" ) else window_flash(C, ignorepref = TRUE) log_admin_private("PM: [key_name(src)]->[key_name(C)]: [rawmsg]") //we don't use message_admins here because the sender/receiver might get it too - for(var/client/X in admins) + for(var/client/X in GLOB.admins) if(X.key!=key && X.key!=C.key) //check client/X is an admin and isn't the sender or recipient to_chat(X, "PM: [key_name(src, X, 0)]->[key_name(C, X, 0)]: \blue [keywordparsedmsg]" ) @@ -193,7 +193,7 @@ /proc/IrcPm(target,msg,sender) - var/client/C = directory[target] + var/client/C = GLOB.directory[target] var/static/stealthkey var/adminname = config.showircname ? "[sender](IRC)" : "Administrator" @@ -230,12 +230,12 @@ var/i = 0 while(i == 0) i = 1 - for(var/P in stealthminID) - if(num == stealthminID[P]) + for(var/P in GLOB.stealthminID) + if(num == GLOB.stealthminID[P]) num++ i = 0 var/stealth = "@[num2text(num)]" - stealthminID["IRCKEY"] = stealth + GLOB.stealthminID["IRCKEY"] = stealth return stealth #undef IRCREPLYCOUNT diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm index 70e9badb10..fff294e800 100644 --- a/code/modules/admin/verbs/adminsay.dm +++ b/code/modules/admin/verbs/adminsay.dm @@ -13,10 +13,10 @@ msg = keywords_lookup(msg) if(check_rights(R_ADMIN,0)) msg = "ADMIN: [key_name(usr, 1)] (FLW): [msg]" - to_chat(admins, msg) + to_chat(GLOB.admins, msg) else msg = "ADMIN: [key_name(usr, 1)]: [msg]" - to_chat(admins, msg) + to_chat(GLOB.admins, msg) - feedback_add_details("admin_verb","M") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Asay") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/atmosdebug.dm b/code/modules/admin/verbs/atmosdebug.dm index 2f25fa5b1a..03017f494e 100644 --- a/code/modules/admin/verbs/atmosdebug.dm +++ b/code/modules/admin/verbs/atmosdebug.dm @@ -4,20 +4,20 @@ if(!src.holder) to_chat(src, "Only administrators may use this command.") return - feedback_add_details("admin_verb","CP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Check Plumbing") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! //all plumbing - yes, some things might get stated twice, doesn't matter. - for (var/obj/machinery/atmospherics/plumbing in machines) + for (var/obj/machinery/atmospherics/plumbing in GLOB.machines) if (plumbing.nodealert) to_chat(usr, "Unconnected [plumbing.name] located at [plumbing.x],[plumbing.y],[plumbing.z] ([get_area(plumbing.loc)])") //Manifolds - for (var/obj/machinery/atmospherics/pipe/manifold/pipe in machines) + for (var/obj/machinery/atmospherics/pipe/manifold/pipe in GLOB.machines) if (!pipe.NODE1 || !pipe.NODE2 || !pipe.NODE3) to_chat(usr, "Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])") //Pipes - for (var/obj/machinery/atmospherics/pipe/simple/pipe in machines) + for (var/obj/machinery/atmospherics/pipe/simple/pipe in GLOB.machines) if (!pipe.NODE1 || !pipe.NODE2) to_chat(usr, "Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])") @@ -27,9 +27,9 @@ if(!src.holder) to_chat(src, "Only administrators may use this command.") return - feedback_add_details("admin_verb","CPOW") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Check Power") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - for (var/datum/powernet/PN in powernets) + for (var/datum/powernet/PN in GLOB.powernets) if (!PN.nodes || !PN.nodes.len) if(PN.cables && (PN.cables.len > 1)) var/obj/structure/cable/C = PN.cables[1] diff --git a/code/modules/admin/verbs/bluespacearty.dm b/code/modules/admin/verbs/bluespacearty.dm index 3353986ac3..a09dd4b527 100644 --- a/code/modules/admin/verbs/bluespacearty.dm +++ b/code/modules/admin/verbs/bluespacearty.dm @@ -1,7 +1,4 @@ -/client/proc/bluespace_artillery(mob/M in mob_list) - set name = "Bluespace Artillery" - set category = "Fun" - +/client/proc/bluespace_artillery(mob/M in GLOB.mob_list) if(!holder || !check_rights(R_FUN)) return @@ -11,9 +8,6 @@ to_chat(usr, "This can only be used on instances of type /mob/living") return - if(alert(usr, "Are you sure you wish to hit [key_name(target)] with Blue Space Artillery?", "Confirm Firing?" , "Yes" , "No") != "Yes") - return - explosion(target.loc, 0, 0, 0, 0) var/turf/open/floor/T = get_turf(target) @@ -23,10 +17,6 @@ else T.break_tile() - to_chat(target, "You're hit by bluespace artillery!") - log_admin("[key_name(target)] has been hit by Bluespace Artillery fired by [key_name(usr)]") - message_admins("[ADMIN_LOOKUPFLW(target)] has been hit by Bluespace Artillery fired by [ADMIN_LOOKUPFLW(usr)]") - if(target.health <= 1) target.gib(1, 1) else diff --git a/code/modules/admin/verbs/buildmode.dm b/code/modules/admin/verbs/buildmode.dm index affda973a0..968c03cac1 100644 --- a/code/modules/admin/verbs/buildmode.dm +++ b/code/modules/admin/verbs/buildmode.dm @@ -185,7 +185,7 @@ if("number") valueholder = input(user,"Enter variable value:" ,"Value", 123) as num if("mob-reference") - valueholder = input(user,"Enter variable value:" ,"Value") as mob in mob_list + valueholder = input(user,"Enter variable value:" ,"Value") as mob in GLOB.mob_list if("obj-reference") valueholder = input(user,"Enter variable value:" ,"Value") as obj in world if("turf-reference") @@ -218,7 +218,7 @@ cornerA = null cornerB = null -/proc/togglebuildmode(mob/M in player_list) +/proc/togglebuildmode(mob/M in GLOB.player_list) set name = "Toggle Build Mode" set category = "Special Verbs" if(M.client) @@ -305,14 +305,18 @@ if(VAR_BUILDMODE) if(left_click) //I cant believe this shit actually compiles. if(object.vars.Find(varholder)) - log_admin("Build Mode: [key_name(user)] modified [object.name]'s [varholder] to [valueholder]") - object.vars[varholder] = valueholder + if(object.vv_edit_var(varholder, valueholder)) + log_admin("Build Mode: [key_name(user)] modified [object.name]'s [varholder] to [valueholder]") + else + to_chat(user, "Varedit rejected") else to_chat(user, "[initial(object.name)] does not have a var called '[varholder]'") if(right_click) if(object.vars.Find(varholder)) - log_admin("Build Mode: [key_name(user)] modified [object.name]'s [varholder] to [valueholder]") - object.vars[varholder] = initial(object.vars[varholder]) + if(object.vv_edit_var(varholder, initial(object.vars[varholder]))) + log_admin("Build Mode: [key_name(user)] modified [object.name]'s [varholder] to [valueholder]") + else + to_chat(user, "Varedit rejected") else to_chat(user, "[initial(object.name)] does not have a var called '[varholder]'") diff --git a/code/modules/admin/verbs/cinematic.dm b/code/modules/admin/verbs/cinematic.dm index 69db1e4325..186eee2195 100644 --- a/code/modules/admin/verbs/cinematic.dm +++ b/code/modules/admin/verbs/cinematic.dm @@ -3,7 +3,7 @@ set category = "Fun" set desc = "Shows a cinematic." // Intended for testing but I thought it might be nice for events on the rare occasion Feel free to comment it out if it's not wanted. set hidden = 1 - if(!ticker) + if(!SSticker) return switch(cinematic) if("explosion") @@ -14,5 +14,5 @@ override = input(src,"mode = ?","Enter Parameter",null) as anything in list("nuclear emergency","gang war","fake","no override") if(0) override = input(src,"mode = ?","Enter Parameter",null) as anything in list("blob","nuclear emergency","AI malfunction","no override") - ticker.station_explosion_cinematic(parameter,override) + SSticker.station_explosion_cinematic(parameter,override) return \ No newline at end of file diff --git a/code/modules/admin/verbs/deadsay.dm b/code/modules/admin/verbs/deadsay.dm index 7f4c9efc52..a4ccfa9c48 100644 --- a/code/modules/admin/verbs/deadsay.dm +++ b/code/modules/admin/verbs/deadsay.dm @@ -23,10 +23,10 @@ var/rendered = "DEAD: ADMIN([src.holder.fakekey ? pick(nicknames) : src.key]) says, \"[msg]\"" - for (var/mob/M in player_list) + for (var/mob/M in GLOB.player_list) if(isnewplayer(M)) continue if (M.stat == DEAD || (M.client && M.client.holder && (M.client.prefs.chat_toggles & CHAT_DEAD))) //admins can toggle deadchat on and off. This is a proc in admin.dm and is only give to Administrators and above M.show_message(rendered, 2) - feedback_add_details("admin_verb","D") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! \ No newline at end of file + feedback_add_details("admin_verb","Dsay") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! \ No newline at end of file diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index c8dd86a57b..55fc078cf1 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -4,16 +4,16 @@ if(!check_rights(R_DEBUG)) return - if(Debug2) - Debug2 = 0 + if(GLOB.Debug2) + GLOB.Debug2 = 0 message_admins("[key_name(src)] toggled debugging off.") log_admin("[key_name(src)] toggled debugging off.") else - Debug2 = 1 + GLOB.Debug2 = 1 message_admins("[key_name(src)] toggled debugging on.") log_admin("[key_name(src)] toggled debugging on.") - feedback_add_details("admin_verb","DG2") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Toggle Debug Two") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -79,7 +79,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that . = get_callproc_returnval(returnval, procname) if(.) to_chat(usr, .) - feedback_add_details("admin_verb","APC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Advanced ProcCall") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/callproc_datum(datum/A as null|area|mob|obj|turf) set category = "Debug" @@ -104,7 +104,7 @@ 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"].") - feedback_add_details("admin_verb","DPC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Atom ProcCall") //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 . = get_callproc_returnval(returnval,procname) @@ -171,17 +171,17 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that var/t = "" for(var/id in env_gases) - if(id in hardcoded_gases || env_gases[id][MOLES]) + if(id in GLOB.hardcoded_gases || env_gases[id][MOLES]) t+= "[env_gases[id][GAS_META][META_GAS_NAME]] : [env_gases[id][MOLES]]\n" to_chat(usr, t) - feedback_add_details("admin_verb","ASL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Air Status In Location") //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) +/client/proc/cmd_admin_robotize(mob/M in GLOB.mob_list) set category = "Fun" set name = "Make Robot" - if(!ticker || !ticker.mode) + if(!SSticker || !SSticker.mode) alert("Wait until the game starts") return if(ishuman(M)) @@ -193,11 +193,11 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that else alert("Invalid mob") -/client/proc/cmd_admin_blobize(mob/M in mob_list) +/client/proc/cmd_admin_blobize(mob/M in GLOB.mob_list) set category = "Fun" set name = "Make Blob" - if(!ticker || !ticker.mode) + if(!SSticker || !SSticker.mode) alert("Wait until the game starts") return if(ishuman(M)) @@ -211,11 +211,11 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that alert("Invalid mob") -/client/proc/cmd_admin_animalize(mob/M in mob_list) +/client/proc/cmd_admin_animalize(mob/M in GLOB.mob_list) set category = "Fun" set name = "Make Simple Animal" - if(!ticker || !ticker.mode) + if(!SSticker || !SSticker.mode) alert("Wait until the game starts") return @@ -232,13 +232,13 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.Animalize() -/client/proc/makepAI(turf/T in mob_list) +/client/proc/makepAI(turf/T in GLOB.mob_list) set category = "Fun" set name = "Make pAI" set desc = "Specify a location to spawn a pAI device, then specify a key to play that pAI" var/list/available = list() - for(var/mob/C in mob_list) + for(var/mob/C in GLOB.mob_list) if(C.key) available.Add(C) var/mob/choice = input("Choose a player to play the pAI", "Spawn pAI") in available @@ -257,76 +257,75 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that for(var/datum/paiCandidate/candidate in SSpai.candidates) if(candidate.key == choice.key) SSpai.candidates.Remove(candidate) - feedback_add_details("admin_verb","MPAI") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Make pAI") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/cmd_admin_alienize(mob/M in mob_list) +/client/proc/cmd_admin_alienize(mob/M in GLOB.mob_list) set category = "Fun" set name = "Make Alien" - if(!ticker || !ticker.mode) + if(!SSticker || !SSticker.mode) alert("Wait until the game starts") return if(ishuman(M)) log_admin("[key_name(src)] has alienized [M.key].") 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! + feedback_add_details("admin_verb","Make Alien") //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.") message_admins("[key_name_admin(usr)] made [key_name(M)] into an alien.") else alert("Invalid mob") -/client/proc/cmd_admin_slimeize(mob/M in mob_list) +/client/proc/cmd_admin_slimeize(mob/M in GLOB.mob_list) set category = "Fun" set name = "Make slime" - if(!ticker || !ticker.mode) + if(!SSticker || !SSticker.mode) alert("Wait until the game starts") return if(ishuman(M)) log_admin("[key_name(src)] has slimeized [M.key].") 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! + feedback_add_details("admin_verb","Make Slime") //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.") message_admins("[key_name_admin(usr)] made [key_name(M)] into a slime.") else alert("Invalid mob") -var/list/TYPES_SHORTCUTS = list( - /obj/effect/decal/cleanable = "CLEANABLE", - /obj/item/device/radio/headset = "HEADSET", - /obj/item/clothing/head/helmet/space = "SPESSHELMET", - /obj/item/weapon/book/manual = "MANUAL", - /obj/item/weapon/reagent_containers/food/drinks = "DRINK", //longest paths comes first - /obj/item/weapon/reagent_containers/food = "FOOD", - /obj/item/weapon/reagent_containers = "REAGENT_CONTAINERS", - /obj/item/weapon = "WEAPON", - /obj/machinery/atmospherics = "ATMOS_MECH", - /obj/machinery/portable_atmospherics = "PORT_ATMOS", - /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack = "MECHA_MISSILE_RACK", - /obj/item/mecha_parts/mecha_equipment = "MECHA_EQUIP", - /obj/item/organ = "ORGAN", - /obj/item = "ITEM", - /obj/machinery = "MACHINERY", - /obj/effect = "EFFECT", - /obj = "O", - /datum = "D", - /turf/open = "OPEN", - /turf/closed = "CLOSED", - /turf = "T", - /mob/living/carbon = "CARBON", - /mob/living/simple_animal = "SIMPLE", - /mob/living = "LIVING", - /mob = "M" -) - /proc/make_types_fancy(var/list/types) if (ispath(types)) types = list(types) . = list() for(var/type in types) var/typename = "[type]" + var/static/list/TYPES_SHORTCUTS = list( + /obj/effect/decal/cleanable = "CLEANABLE", + /obj/item/device/radio/headset = "HEADSET", + /obj/item/clothing/head/helmet/space = "SPESSHELMET", + /obj/item/weapon/book/manual = "MANUAL", + /obj/item/weapon/reagent_containers/food/drinks = "DRINK", //longest paths comes first + /obj/item/weapon/reagent_containers/food = "FOOD", + /obj/item/weapon/reagent_containers = "REAGENT_CONTAINERS", + /obj/item/weapon = "WEAPON", + /obj/machinery/atmospherics = "ATMOS_MECH", + /obj/machinery/portable_atmospherics = "PORT_ATMOS", + /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack = "MECHA_MISSILE_RACK", + /obj/item/mecha_parts/mecha_equipment = "MECHA_EQUIP", + /obj/item/organ = "ORGAN", + /obj/item = "ITEM", + /obj/machinery = "MACHINERY", + /obj/effect = "EFFECT", + /obj = "O", + /datum = "D", + /turf/open = "OPEN", + /turf/closed = "CLOSED", + /turf = "T", + /mob/living/carbon = "CARBON", + /mob/living/simple_animal = "SIMPLE", + /mob/living = "LIVING", + /mob = "M" + ) for (var/tn in TYPES_SHORTCUTS) if (copytext(typename,1, length("[tn]/")+1)=="[tn]/" /*findtextEx(typename,"[tn]/",1,2)*/ ) typename = TYPES_SHORTCUTS[tn]+copytext(typename,length("[tn]/")) @@ -377,22 +376,22 @@ var/list/TYPES_SHORTCUTS = list( CHECK_TICK log_admin("[key_name(src)] has deleted all ([counter]) instances of [hsbitem].") message_admins("[key_name_admin(src)] has deleted all ([counter]) instances of [hsbitem].", 0) - feedback_add_details("admin_verb","DELA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Delete All") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_debug_make_powernets() set category = "Debug" set name = "Make Powernets" - SSmachine.makepowernets() + SSmachines.makepowernets() log_admin("[key_name(src)] has remade the powernet. makepowernets() called.") message_admins("[key_name_admin(src)] has remade the powernets. makepowernets() called.", 0) - feedback_add_details("admin_verb","MPWN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Make Powernets") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/cmd_admin_grantfullaccess(mob/M in mob_list) +/client/proc/cmd_admin_grantfullaccess(mob/M in GLOB.mob_list) set category = "Admin" set name = "Grant Full Access" - if(!ticker || !ticker.mode) + if(!SSticker || !SSticker.mode) alert("Wait until the game starts") return if(ishuman(M)) @@ -424,11 +423,11 @@ var/list/TYPES_SHORTCUTS = list( else alert("Invalid mob") - feedback_add_details("admin_verb","GFA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Grant Full Access") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! log_admin("[key_name(src)] has granted [M.key] full access.") message_admins("[key_name_admin(usr)] has granted [M.key] full access.") -/client/proc/cmd_assume_direct_control(mob/M in mob_list) +/client/proc/cmd_assume_direct_control(mob/M in GLOB.mob_list) set category = "Admin" set name = "Assume direct control" set desc = "Direct intervention" @@ -445,7 +444,7 @@ var/list/TYPES_SHORTCUTS = list( M.ckey = src.ckey if( isobserver(adminmob) ) qdel(adminmob) - feedback_add_details("admin_verb","ADC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Assume Direct Control") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_areatest() set category = "Mapping" @@ -464,37 +463,37 @@ var/list/TYPES_SHORTCUTS = list( if(!(A.type in areas_all)) areas_all.Add(A.type) - for(var/obj/machinery/power/apc/APC in apcs_list) + for(var/obj/machinery/power/apc/APC in GLOB.apcs_list) var/area/A = get_area(APC) if(!(A.type in areas_with_APC)) areas_with_APC.Add(A.type) - for(var/obj/machinery/airalarm/AA in machines) + for(var/obj/machinery/airalarm/AA in GLOB.machines) var/area/A = get_area(AA) if(!(A.type in areas_with_air_alarm)) areas_with_air_alarm.Add(A.type) - for(var/obj/machinery/requests_console/RC in machines) + for(var/obj/machinery/requests_console/RC in GLOB.machines) var/area/A = get_area(RC) if(!(A.type in areas_with_RC)) areas_with_RC.Add(A.type) - for(var/obj/machinery/light/L in machines) + for(var/obj/machinery/light/L in GLOB.machines) var/area/A = get_area(L) if(!(A.type in areas_with_light)) areas_with_light.Add(A.type) - for(var/obj/machinery/light_switch/LS in machines) + for(var/obj/machinery/light_switch/LS in GLOB.machines) var/area/A = get_area(LS) if(!(A.type in areas_with_LS)) areas_with_LS.Add(A.type) - for(var/obj/item/device/radio/intercom/I in machines) + for(var/obj/item/device/radio/intercom/I in GLOB.machines) var/area/A = get_area(I) if(!(A.type in areas_with_intercom)) areas_with_intercom.Add(A.type) - for(var/obj/machinery/camera/C in machines) + for(var/obj/machinery/camera/C in GLOB.machines) var/area/A = get_area(C) if(!(A.type in areas_with_camera)) areas_with_camera.Add(A.type) @@ -535,7 +534,7 @@ var/list/TYPES_SHORTCUTS = list( for(var/areatype in areas_without_camera) to_chat(world, "* [areatype]") -/client/proc/cmd_admin_dress(mob/living/carbon/human/M in mob_list) +/client/proc/cmd_admin_dress(mob/living/carbon/human/M in GLOB.mob_list) set category = "Fun" set name = "Select equipment" if(!ishuman(M)) @@ -573,14 +572,14 @@ var/list/TYPES_SHORTCUTS = list( var/datum/outfit/custom = null if (dresscode == "Custom") var/list/custom_names = list() - for(var/datum/outfit/D in custom_outfits) + for(var/datum/outfit/D in GLOB.custom_outfits) custom_names[D.name] = D var/selected_name = input("Select outfit", "Robust quick dress shop") as null|anything in custom_names custom = custom_names[selected_name] if(isnull(custom)) return - feedback_add_details("admin_verb","SEQ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Select Equipment") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! for (var/obj/item/I in M.get_equipped_items()) qdel(I) switch(dresscode) @@ -607,11 +606,11 @@ var/list/TYPES_SHORTCUTS = list( if(alert("Are you sure? This will start up the engine. Should only be used during debug!",,"Yes","No") != "Yes") return - for(var/obj/machinery/power/emitter/E in machines) + for(var/obj/machinery/power/emitter/E in GLOB.machines) if(E.anchored) E.active = 1 - for(var/obj/machinery/field/generator/F in machines) + for(var/obj/machinery/field/generator/F in GLOB.machines) if(F.active == 0) F.active = 1 F.state = 2 @@ -622,7 +621,7 @@ var/list/TYPES_SHORTCUTS = list( F.update_icon() spawn(30) - for(var/obj/machinery/the_singularitygen/G in machines) + for(var/obj/machinery/the_singularitygen/G in GLOB.machines) if(G.anchored) var/obj/singularity/S = new /obj/singularity(get_turf(G), 50) // qdel(G) @@ -639,7 +638,7 @@ var/list/TYPES_SHORTCUTS = list( //S.dissipate_track = 0 //S.dissipate_strength = 10 - for(var/obj/machinery/power/rad_collector/Rad in machines) + for(var/obj/machinery/power/rad_collector/Rad in GLOB.machines) if(Rad.anchored) if(!Rad.loaded_tank) var/obj/item/weapon/tank/internals/plasma/Plasma = new/obj/item/weapon/tank/internals/plasma(Rad) @@ -652,7 +651,7 @@ var/list/TYPES_SHORTCUTS = list( if(!Rad.active) Rad.toggle_power() - for(var/obj/machinery/power/smes/SMES in machines) + for(var/obj/machinery/power/smes/SMES in GLOB.machines) if(SMES.anchored) SMES.input_attempt = 1 @@ -663,19 +662,19 @@ var/list/TYPES_SHORTCUTS = list( switch(input("Which list?") in list("Players","Admins","Mobs","Living Mobs","Dead Mobs","Clients","Joined Clients")) if("Players") - to_chat(usr, jointext(player_list,",")) + to_chat(usr, jointext(GLOB.player_list,",")) if("Admins") - to_chat(usr, jointext(admins,",")) + to_chat(usr, jointext(GLOB.admins,",")) if("Mobs") - to_chat(usr, jointext(mob_list,",")) + to_chat(usr, jointext(GLOB.mob_list,",")) if("Living Mobs") - to_chat(usr, jointext(living_mob_list,",")) + to_chat(usr, jointext(GLOB.living_mob_list,",")) if("Dead Mobs") - to_chat(usr, jointext(dead_mob_list,",")) + to_chat(usr, jointext(GLOB.dead_mob_list,",")) if("Clients") - to_chat(usr, jointext(clients,",")) + to_chat(usr, jointext(GLOB.clients,",")) if("Joined Clients") - to_chat(usr, jointext(joined_player_list,",")) + to_chat(usr, jointext(GLOB.joined_player_list,",")) /client/proc/cmd_display_del_log() set category = "Debug" @@ -703,7 +702,7 @@ var/list/TYPES_SHORTCUTS = list( if(!holder) return - debug_variables(huds[i]) + debug_variables(GLOB.huds[i]) /client/proc/jump_to_ruin() set category = "Debug" @@ -712,7 +711,7 @@ var/list/TYPES_SHORTCUTS = list( if(!holder) return var/list/names = list() - for(var/i in ruin_landmarks) + for(var/i in GLOB.ruin_landmarks) var/obj/effect/landmark/ruin/ruin_landmark = i var/datum/map_template/ruin/template = ruin_landmark.ruin_template @@ -740,13 +739,12 @@ var/list/TYPES_SHORTCUTS = list( /client/proc/clear_dynamic_transit() set category = "Debug" set name = "Clear Dynamic Transit" - set desc = "Deallocates all transit space, restoring it to round start \ - conditions." + set desc = "Deallocates all transit space, restoring it to round start conditions." if(!holder) return SSshuttle.clear_transit = TRUE message_admins("[key_name_admin(src)] cleared dynamic transit space.") - feedback_add_details("admin_verb","CDT") // If... + feedback_add_details("admin_verb","Clear Dynamic Transit") // If... log_admin("[key_name(src)] cleared dynamic transit space.") @@ -757,11 +755,11 @@ var/list/TYPES_SHORTCUTS = list( if(!holder) return - global.medals_enabled = !global.medals_enabled + GLOB.medals_enabled = !GLOB.medals_enabled - message_admins("[key_name_admin(src)] [global.medals_enabled ? "disabled" : "enabled"] the medal hub lockout.") - feedback_add_details("admin_verb","TMH") // If... - log_admin("[key_name(src)] [global.medals_enabled ? "disabled" : "enabled"] the medal hub lockout.") + message_admins("[key_name_admin(src)] [GLOB.medals_enabled ? "disabled" : "enabled"] the medal hub lockout.") + feedback_add_details("admin_verb","Toggle Medal Disable") // If... + log_admin("[key_name(src)] [GLOB.medals_enabled ? "disabled" : "enabled"] the medal hub lockout.") /client/proc/view_runtimes() set category = "Debug" @@ -771,7 +769,7 @@ var/list/TYPES_SHORTCUTS = list( if(!holder) return - error_cache.show_to(src) + GLOB.error_cache.show_to(src) /client/proc/pump_random_event() set category = "Debug" @@ -780,8 +778,8 @@ var/list/TYPES_SHORTCUTS = list( if(!holder) return - SSevent.scheduled = world.time + SSevents.scheduled = world.time message_admins("[key_name_admin(src)] pumped a random event.") - feedback_add_details("admin_verb","PRE") - log_admin("[key_name(src)] pumped a random event.") \ No newline at end of file + feedback_add_details("admin_verb","Pump Random Event") + log_admin("[key_name(src)] pumped a random event.") diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index 8cc400891f..26bfe6883b 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -16,7 +16,7 @@ to_chat(usr, "@[target.x],[target.y]: [GM.temperature] Kelvin, [GM.return_pressure()] kPa [(burning)?("\red BURNING"):(null)]") for(var/id in GM_gases) to_chat(usr, "[GM_gases[id][GAS_META][META_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! + feedback_add_details("admin_verb","Show Air Status") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/fix_next_move() set category = "Debug" @@ -46,7 +46,7 @@ message_admins("[key_name_admin(largest_move_mob)] had the largest move delay with [largest_move_time] frames / [largest_move_time/10] seconds!") message_admins("[key_name_admin(largest_click_mob)] had the largest click delay with [largest_click_time] frames / [largest_click_time/10] seconds!") message_admins("world.time = [world.time]") - feedback_add_details("admin_verb","UFE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Unfreeze Everyone") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return /client/proc/radio_report() @@ -54,12 +54,12 @@ set name = "Radio report" var/filters = list( - "1" = "RADIO_TO_AIRALARM", - "2" = "RADIO_FROM_AIRALARM", - "3" = "RADIO_CHAT", - "4" = "RADIO_ATMOSIA", - "5" = "RADIO_NAVBEACONS", - "6" = "RADIO_AIRLOCK", + "1" = "GLOB.RADIO_TO_AIRALARM", + "2" = "GLOB.RADIO_FROM_AIRALARM", + "3" = "GLOB.RADIO_CHAT", + "4" = "GLOB.RADIO_ATMOSIA", + "5" = "GLOB.RADIO_NAVBEACONS", + "6" = "GLOB.RADIO_AIRLOCK", "7" = "RADIO_SECBOT", "8" = "RADIO_MULEBOT", "_default" = "NO_FILTER" @@ -84,7 +84,7 @@ output += "    [device]
    " usr << browse(output,"window=radioreport") - feedback_add_details("admin_verb","RR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Show Radio Report") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/reload_admins() set name = "Reload Admins" @@ -98,5 +98,5 @@ return load_admins() - feedback_add_details("admin_verb","RLDA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Reload All Admins") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! message_admins("[key_name_admin(usr)] manually reloaded admins") diff --git a/code/modules/admin/verbs/fps.dm b/code/modules/admin/verbs/fps.dm index e669001e8f..7ec0569807 100644 --- a/code/modules/admin/verbs/fps.dm +++ b/code/modules/admin/verbs/fps.dm @@ -19,6 +19,6 @@ var/msg = "[key_name(src)] has modified world.fps to [new_fps]" log_admin(msg, 0) message_admins(msg, 0) - feedback_add_details("admin_verb","TICKLAG") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_toggle","Set Server FPS|[new_fps]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! world.fps = new_fps diff --git a/code/modules/admin/verbs/getlogs.dm b/code/modules/admin/verbs/getlogs.dm index bba9b79003..c4db5305d4 100644 --- a/code/modules/admin/verbs/getlogs.dm +++ b/code/modules/admin/verbs/getlogs.dm @@ -27,7 +27,7 @@ to_chat(src, "Only Admins may use this command.") return - var/client/target = input(src,"Choose somebody to grant access to the server's runtime logs (permissions expire at the end of each round):","Grant Permissions",null) as null|anything in clients + var/client/target = input(src,"Choose somebody to grant access to the server's runtime logs (permissions expire at the end of each round):","Grant Permissions",null) as null|anything in GLOB.clients if(!istype(target,/client)) to_chat(src, "Error: giveruntimelog(): Client not found.") return @@ -85,12 +85,12 @@ set name = "Show Server Log" set desc = "Shows today's server log." - if(fexists("[diary]")) - src << ftp(diary) + if(fexists("[GLOB.diary]")) + src << ftp(GLOB.diary) else to_chat(src, "Server log not found, try using .getserverlog.") return - feedback_add_details("admin_verb","VTL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Show Server Log") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return //Shows today's attack log @@ -99,10 +99,10 @@ set name = "Show Server Attack Log" set desc = "Shows today's server attack log." - if(fexists("[diaryofmeanpeople]")) - src << ftp(diaryofmeanpeople) + if(fexists("[GLOB.diaryofmeanpeople]")) + src << ftp(GLOB.diaryofmeanpeople) else to_chat(src, "Server attack log not found, try using .getserverlog.") return - feedback_add_details("admin_verb","SSAL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Show Server Attack log") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return diff --git a/code/modules/admin/verbs/individual_logging.dm b/code/modules/admin/verbs/individual_logging.dm index 8130f84ff0..cef424d4b2 100644 --- a/code/modules/admin/verbs/individual_logging.dm +++ b/code/modules/admin/verbs/individual_logging.dm @@ -11,17 +11,21 @@ dat += "
    " - if(type == INDIVIDUAL_SHOW_ALL_LOG) dat += "
    Displaying all logs of [key_name(M)]


    " for(var/log_type in M.logging) + var/list/reversed = M.logging[log_type] + reversed = reverseRange(reversed.Copy()) dat += "
    [log_type]

    " - for(var/entry in M.logging[log_type]) - dat += "[entry]: [M.logging[log_type][entry]]
    " + for(var/entry in reversed) + dat += "[entry]: [reversed[entry]]
    " dat += "
    " else dat += "
    [type] of [key_name(M)]

    " - for(var/entry in M.logging[type]) - dat += "[entry]: [M.logging[type][entry]]
    " + var/list/reversed = M.logging[type] + if(reversed) + reversed = reverseRange(reversed.Copy()) + for(var/entry in reversed) + dat += "[entry]: [reversed[entry]]
    " usr << browse(dat, "window=invidual_logging;size=600x480") \ No newline at end of file diff --git a/code/modules/admin/verbs/machine_upgrade.dm b/code/modules/admin/verbs/machine_upgrade.dm index 9f2039fdd0..340130bb75 100644 --- a/code/modules/admin/verbs/machine_upgrade.dm +++ b/code/modules/admin/verbs/machine_upgrade.dm @@ -7,4 +7,4 @@ P.rating = new_rating M.RefreshParts() - feedback_add_details("admin_verb","MU") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_toggle","Machine Upgrade|[new_rating]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/manipulate_organs.dm b/code/modules/admin/verbs/manipulate_organs.dm index 055905a92a..114d145cf4 100644 --- a/code/modules/admin/verbs/manipulate_organs.dm +++ b/code/modules/admin/verbs/manipulate_organs.dm @@ -47,7 +47,7 @@ I = organ I.removed(C) - organ.loc = get_turf(C) + organ.forceMove(get_turf(C)) if(operation == "remove organ/implant") qdel(organ) @@ -55,4 +55,4 @@ var/obj/item/weapon/implantcase/case = new(get_turf(C)) case.imp = I I.loc = case - case.update_icon() \ No newline at end of file + case.update_icon() diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index 5b470e236f..9b8948cd13 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -18,9 +18,9 @@ //- Check for any misplaced or stacked piece of wire //- Identify how hard it is to break into the area and where the weak points are //- Check if the area has too much empty space. If so, make it smaller and replace the rest with maintenance tunnels. -var/intercom_range_display_status = 0 -var/list/admin_verbs_debug_mapping = list( +GLOBAL_PROTECT(admin_verbs_debug_mapping) +GLOBAL_LIST_INIT(admin_verbs_debug_mapping, list( /client/proc/do_not_use_these, //-errorage /client/proc/camera_view, //-errorage /client/proc/sec_camera_report, //-errorage @@ -43,7 +43,7 @@ var/list/admin_verbs_debug_mapping = list( /client/proc/cmd_show_at_list, /client/proc/cmd_show_at_list, /client/proc/manipulate_organs -) +)) /obj/effect/debugging/mapfix_marker name = "map fix marker" @@ -76,12 +76,12 @@ var/list/admin_verbs_debug_mapping = list( if(!on) var/list/seen = list() - for(var/obj/machinery/camera/C in cameranet.cameras) + for(var/obj/machinery/camera/C in GLOB.cameranet.cameras) for(var/turf/T in C.can_see()) seen[T]++ for(var/turf/T in seen) T.maptext = "[seen[T]]" - feedback_add_details("admin_verb","mCRD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Show Camera Range") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -95,7 +95,7 @@ var/list/admin_verbs_debug_mapping = list( var/list/obj/machinery/camera/CL = list() - for(var/obj/machinery/camera/C in cameranet.cameras) + for(var/obj/machinery/camera/C in GLOB.cameranet.cameras) CL += C var/output = {"CAMERA ANNOMALITIES REPORT
    @@ -123,12 +123,13 @@ var/list/admin_verbs_debug_mapping = list( output += "" usr << browse(output,"window=airreport;size=1000x500") - feedback_add_details("admin_verb","mCRP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Show Camera Report") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/intercom_view() set category = "Mapping" set name = "Intercom Range Display" + var/static/intercom_range_display_status = 0 if(intercom_range_display_status) intercom_range_display_status = 0 else @@ -143,7 +144,7 @@ var/list/admin_verbs_debug_mapping = list( var/obj/effect/debugging/marker/F = new/obj/effect/debugging/marker(T) if (!(F in view(7,I.loc))) qdel(F) - feedback_add_details("admin_verb","mIRD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Show Intercom Range") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_show_at_list() set category = "Mapping" @@ -153,13 +154,13 @@ var/list/admin_verbs_debug_mapping = list( var/dat = {"Coordinate list of Active Turfs at Roundstart
    Real-time Active Turfs list you can see in Air Subsystem at active_turfs var
    "} - for(var/i=1; i<=active_turfs_startlist.len; i++) - dat += active_turfs_startlist[i] + for(var/i=1; i<=GLOB.active_turfs_startlist.len; i++) + dat += GLOB.active_turfs_startlist[i] dat += "
    " usr << browse(dat, "window=at_list") - feedback_add_details("admin_verb","mATL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Show Roundstart Active Turfs") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/enable_debug_verbs() set category = "Debug" @@ -167,15 +168,15 @@ var/list/admin_verbs_debug_mapping = list( if(!check_rights(R_DEBUG)) return verbs -= /client/proc/enable_debug_verbs - verbs.Add(/client/proc/disable_debug_verbs, admin_verbs_debug_mapping) - feedback_add_details("admin_verb","mDVE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + verbs.Add(/client/proc/disable_debug_verbs, GLOB.admin_verbs_debug_mapping) + feedback_add_details("admin_verb","Enable Debug Verbs") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/disable_debug_verbs() set category = "Debug" set name = "Debug verbs - Disable" - verbs.Remove(/client/proc/disable_debug_verbs, admin_verbs_debug_mapping) + verbs.Remove(/client/proc/disable_debug_verbs, GLOB.admin_verbs_debug_mapping) verbs += /client/proc/enable_debug_verbs - feedback_add_details("admin_verb", "mDVD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb", "Disable Debug Verbs") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/count_objects_on_z_level() set category = "Mapping" @@ -218,7 +219,7 @@ var/list/admin_verbs_debug_mapping = list( to_chat(world, line)*/ to_chat(world, "There are [count] objects of type [type_path] on z-level [num_level]") - feedback_add_details("admin_verb","mOBJZ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Count Objects Zlevel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/count_objects_all() set category = "Mapping" @@ -245,17 +246,17 @@ var/list/admin_verbs_debug_mapping = list( to_chat(world, line)*/ to_chat(world, "There are [count] objects of type [type_path] in the game world") - feedback_add_details("admin_verb","mOBJ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Count Objects All") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! //This proc is intended to detect lag problems relating to communication procs -var/global/say_disabled = 0 +GLOBAL_VAR_INIT(say_disabled, FALSE) /client/proc/disable_communication() set category = "Mapping" set name = "Disable all communication verbs" - say_disabled = !say_disabled - if(say_disabled) + GLOB.say_disabled = !GLOB.say_disabled + if(GLOB.say_disabled) message_admins("[src.ckey] used 'Disable all communication verbs', killing all communication methods.") else message_admins("[src.ckey] used 'Disable all communication verbs', restoring all communication methods.") diff --git a/code/modules/admin/verbs/maprotation.dm b/code/modules/admin/verbs/maprotation.dm index 5af1fe90af..ed9d23a84d 100644 --- a/code/modules/admin/verbs/maprotation.dm +++ b/code/modules/admin/verbs/maprotation.dm @@ -6,7 +6,7 @@ return message_admins("[key_name_admin(usr)] is forcing a random map rotation.") log_admin("[key_name(usr)] is forcing a random map rotation.") - ticker.maprotatechecked = 1 + SSticker.maprotatechecked = 1 SSmapping.maprotate() /client/proc/adminchangemap() @@ -36,7 +36,7 @@ var/chosenmap = input("Choose a map to change to", "Change Map") as null|anything in maprotatechoices if (!chosenmap) return - ticker.maprotatechecked = 1 + SSticker.maprotatechecked = 1 var/datum/map_config/VM = maprotatechoices[chosenmap] message_admins("[key_name_admin(usr)] is changing the map to [VM.map_name]") log_admin("[key_name(usr)] is changing the map to [VM.map_name]") diff --git a/code/modules/admin/verbs/massmodvar.dm b/code/modules/admin/verbs/massmodvar.dm index 764838b011..3423f9ebd9 100644 --- a/code/modules/admin/verbs/massmodvar.dm +++ b/code/modules/admin/verbs/massmodvar.dm @@ -12,7 +12,7 @@ method = vv_subtype_prompt(A.type) src.massmodify_variables(A, var_name, method) - feedback_add_details("admin_verb","MEV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Mass Edit Variables") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/massmodify_variables(datum/O, var_name = "", method = 0) if(!check_rights(R_VAREDIT)) @@ -32,21 +32,21 @@ else variable = var_name - if(!variable) + if(!variable || !O.can_vv_get(variable)) return var/default var/var_value = O.vars[variable] - if(variable in VVckey_edit) + if(variable in GLOB.VVckey_edit) to_chat(src, "It's forbidden to mass-modify ckeys. It'll crash everyone's client you dummy.") return - if(variable in VVlocked) + if(variable in GLOB.VVlocked) if(!check_rights(R_DEBUG)) return - if(variable in VVicon_edit_lock) + if(variable in GLOB.VVicon_edit_lock) if(!check_rights(R_FUN|R_DEBUG)) return - if(variable in VVpixelmovement) + if(variable in GLOB.VVpixelmovement) if(!check_rights(R_DEBUG)) return var/prompt = alert(src, "Editing this var may irreparably break tile gliding for the rest of the round. THIS CAN'T BE UNDONE", "DANGER", "ABORT ", "Continue", " ABORT") @@ -205,19 +205,19 @@ typecache = typecacheof(typecache) . = list() if (ispath(T, /mob)) - for(var/mob/thing in mob_list) + for(var/mob/thing in GLOB.mob_list) if (typecache[thing.type]) . += thing CHECK_TICK else if (ispath(T, /obj/machinery/door)) - for(var/obj/machinery/door/thing in airlocks) + for(var/obj/machinery/door/thing in GLOB.airlocks) if (typecache[thing.type]) . += thing CHECK_TICK else if (ispath(T, /obj/machinery)) - for(var/obj/machinery/thing in machines) + for(var/obj/machinery/thing in GLOB.machines) if (typecache[thing.type]) . += thing CHECK_TICK @@ -247,7 +247,7 @@ CHECK_TICK else if (ispath(T, /client)) - for(var/client/thing in clients) + for(var/client/thing in GLOB.clients) if (typecache[thing.type]) . += thing CHECK_TICK diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm index d5ec71b3d3..193ff49e89 100644 --- a/code/modules/admin/verbs/modifyvariables.dm +++ b/code/modules/admin/verbs/modifyvariables.dm @@ -1,7 +1,11 @@ -var/list/VVlocked = list("vars", "var_edited", "client", "virus", "viruses", "cuffed", "last_eaten", "unlock_content", "force_ending") -var/list/VVicon_edit_lock = list("icon", "icon_state", "overlays", "underlays", "resize") -var/list/VVckey_edit = list("key", "ckey") -var/list/VVpixelmovement = list("step_x", "step_y", "bound_height", "bound_width", "bound_x", "bound_y") +GLOBAL_LIST_INIT(VVlocked, list("vars", "var_edited", "client", "virus", "viruses", "cuffed", "last_eaten", "unlock_content", "force_ending")) +GLOBAL_PROTECT(VVlocked) +GLOBAL_LIST_INIT(VVicon_edit_lock, list("icon", "icon_state", "overlays", "underlays", "resize")) +GLOBAL_PROTECT(VVicon_edit_lock) +GLOBAL_LIST_INIT(VVckey_edit, list("key", "ckey")) +GLOBAL_PROTECT(VVckey_edit) +GLOBAL_LIST_INIT(VVpixelmovement, list("step_x", "step_y", "bound_height", "bound_width", "bound_x", "bound_y")) +GLOBAL_PROTECT(VVpixelmovement) /client/proc/vv_get_class(var/var_value) @@ -176,7 +180,7 @@ var/list/VVpixelmovement = list("step_x", "step_y", "bound_height", "bound_width if (VV_CLIENT) - .["value"] = input("Select reference:", "Reference", current_value) as null|anything in clients + .["value"] = input("Select reference:", "Reference", current_value) as null|anything in GLOB.clients if (.["value"] == null) .["class"] = null return @@ -524,19 +528,22 @@ var/list/VVpixelmovement = list("step_x", "step_y", "bound_height", "bound_width variable = input("Which var?","Var") as null|anything in names if(!variable) return + + if(!O.can_vv_get(variable)) + return var_value = O.vars[variable] - if(variable in VVlocked) + if(variable in GLOB.VVlocked) if(!check_rights(R_DEBUG)) return - if(variable in VVckey_edit) + if(variable in GLOB.VVckey_edit) if(!check_rights(R_SPAWN|R_DEBUG)) return - if(variable in VVicon_edit_lock) + if(variable in GLOB.VVicon_edit_lock) if(!check_rights(R_FUN|R_DEBUG)) return - if(variable in VVpixelmovement) + if(variable in GLOB.VVpixelmovement) if(!check_rights(R_DEBUG)) return var/prompt = alert(src, "Editing this var may irreparably break tile gliding for the rest of the round. THIS CAN'T BE UNDONE", "DANGER", "ABORT ", "Continue", " ABORT") diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index c7aa3982b8..0f2ce94d31 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -41,7 +41,7 @@ var/list/mob/living/carbon/human/candidates = list() var/mob/living/carbon/human/H = null - for(var/mob/living/carbon/human/applicant in player_list) + for(var/mob/living/carbon/human/applicant in GLOB.player_list) if(ROLE_TRAITOR in applicant.client.prefs.be_special) if(!applicant.stat) if(applicant.mind) @@ -77,7 +77,7 @@ var/list/mob/living/carbon/human/candidates = list() var/mob/living/carbon/human/H = null - for(var/mob/living/carbon/human/applicant in player_list) + for(var/mob/living/carbon/human/applicant in GLOB.player_list) if(ROLE_CHANGELING in applicant.client.prefs.be_special) var/turf/T = get_turf(applicant) if(applicant.stat == CONSCIOUS && applicant.mind && !applicant.mind.special_role && T.z == ZLEVEL_STATION) @@ -110,7 +110,7 @@ var/list/mob/living/carbon/human/candidates = list() var/mob/living/carbon/human/H = null - for(var/mob/living/carbon/human/applicant in player_list) + for(var/mob/living/carbon/human/applicant in GLOB.player_list) if(ROLE_REV in applicant.client.prefs.be_special) var/turf/T = get_turf(applicant) if(applicant.stat == CONSCIOUS && applicant.mind && !applicant.mind.special_role && T.z == ZLEVEL_STATION) @@ -152,7 +152,7 @@ var/list/mob/living/carbon/human/candidates = list() var/mob/living/carbon/human/H = null - for(var/mob/living/carbon/human/applicant in player_list) + for(var/mob/living/carbon/human/applicant in GLOB.player_list) if(ROLE_CULTIST in applicant.client.prefs.be_special) var/turf/T = get_turf(applicant) if(applicant.stat == CONSCIOUS && applicant.mind && !applicant.mind.special_role && T.z == ZLEVEL_STATION) @@ -185,7 +185,7 @@ var/list/mob/living/carbon/human/candidates = list() var/mob/living/carbon/human/H = null - for(var/mob/living/carbon/human/applicant in player_list) + for(var/mob/living/carbon/human/applicant in GLOB.player_list) if(ROLE_SERVANT_OF_RATVAR in applicant.client.prefs.be_special) var/turf/T = get_turf(applicant) if(applicant.stat == CONSCIOUS && applicant.mind && !applicant.mind.special_role && T.z == ZLEVEL_STATION) @@ -203,7 +203,7 @@ you see the truth. Ratvar, the Clockwork Justiciar, lies derelict and forgotten in an unseen realm, and he has selected you as one of his harbringers. You are now a servant of \ Ratvar, and you will bring him back.") add_servant_of_ratvar(H, TRUE) - ticker.mode.equip_servant(H) + SSticker.mode.equip_servant(H) candidates.Remove(H) return 1 @@ -241,13 +241,13 @@ var/nuke_code = random_nukecode() - var/obj/machinery/nuclearbomb/nuke = locate("syndienuke") in nuke_list + var/obj/machinery/nuclearbomb/nuke = locate("syndienuke") in GLOB.nuke_list if(nuke) nuke.r_code = nuke_code //Let's find the spawn locations var/list/turf/synd_spawn = list() - for(var/obj/effect/landmark/A in landmarks_list) + for(var/obj/effect/landmark/A in GLOB.landmarks_list) if(A.name == "Syndicate-Spawn") synd_spawn += get_turf(A) continue @@ -294,7 +294,7 @@ if(candidates.len >= 2) //Minimum 2 to be considered a squad //Pick the lucky players var/numagents = min(5,candidates.len) //How many commandos to spawn - var/list/spawnpoints = emergencyresponseteamspawn + var/list/spawnpoints = GLOB.emergencyresponseteamspawn while(numagents && candidates.len) if (numagents > spawnpoints.len) numagents-- @@ -309,20 +309,20 @@ var/mob/living/carbon/human/Commando = new(spawnloc) chosen_candidate.client.prefs.copy_to(Commando) if(numagents == 1) //If Squad Leader - Commando.real_name = "Officer [pick(commando_names)]" + Commando.real_name = "Officer [pick(GLOB.commando_names)]" Commando.equipOutfit(/datum/outfit/death_commando/officer) else - Commando.real_name = "Trooper [pick(commando_names)]" + Commando.real_name = "Trooper [pick(GLOB.commando_names)]" Commando.equipOutfit(/datum/outfit/death_commando) Commando.dna.update_dna_identity() Commando.key = chosen_candidate.key Commando.mind.assigned_role = "Death Commando" - for(var/obj/machinery/door/poddoor/ert/door in airlocks) + for(var/obj/machinery/door/poddoor/ert/door in GLOB.airlocks) spawn(0) door.open() //Assign antag status and the mission - ticker.mode.traitors += Commando.mind + SSticker.mode.traitors += Commando.mind Commando.mind.special_role = "deathsquad" var/datum/objective/missionobj = new missionobj.owner = Commando.mind @@ -370,7 +370,7 @@ var/list/mob/living/carbon/human/candidates = list() var/mob/living/carbon/human/H = null - for(var/mob/living/carbon/human/applicant in player_list) + for(var/mob/living/carbon/human/applicant in GLOB.player_list) if(ROLE_GANG in applicant.client.prefs.be_special) var/turf/T = get_turf(applicant) if(applicant.stat == CONSCIOUS && applicant.mind && !applicant.mind.special_role && T.z == ZLEVEL_STATION) @@ -382,9 +382,9 @@ if(candidates.len >= 2) for(var/needs_assigned=2,needs_assigned>0,needs_assigned--) H = pick(candidates) - if(gang_colors_pool.len) + if(GLOB.gang_colors_pool.len) var/datum/gang/newgang = new() - ticker.mode.gangs += newgang + SSticker.mode.gangs += newgang H.mind.make_Gang(newgang) candidates.Remove(H) else if(needs_assigned == 2) @@ -402,7 +402,7 @@ var/mob/dead/observer/chosen_candidate = pick(candidates) //Create the official - var/mob/living/carbon/human/newmob = new (pick(emergencyresponseteamspawn)) + var/mob/living/carbon/human/newmob = new (pick(GLOB.emergencyresponseteamspawn)) chosen_candidate.client.prefs.copy_to(newmob) newmob.real_name = newmob.dna.species.random_name(newmob.gender,1) newmob.dna.update_dna_identity() @@ -411,7 +411,7 @@ newmob.equipOutfit(/datum/outfit/centcom_official) //Assign antag status and the mission - ticker.mode.traitors += newmob.mind + SSticker.mode.traitors += newmob.mind newmob.mind.special_role = "official" var/datum/objective/missionobj = new missionobj.owner = newmob.mind @@ -450,8 +450,13 @@ alert = "Blue" if("Green: Centcom Official") return makeOfficial() - var/teamsize = min(7,input("Maximum size of team? (7 max)", "Select Team Size",4) as null|num) - var/mission = input("Assign a mission to the Emergency Response Team", "Assign Mission", "Assist the station.") + var/teamcheck = input("Maximum size of team? (7 max)", "Select Team Size",4) as null|num + if(isnull(teamcheck)) + return + var/teamsize = min(7,teamcheck) + var/mission = input("Assign a mission to the Emergency Response Team", "Assign Mission", "Assist the station.") as null|text + if(!mission) + return var/list/mob/dead/observer/candidates = pollCandidates("Do you wish to be considered for a Code [alert] Nanotrasen Emergency Response Team?", "deathsquad", null) var/teamSpawned = 0 @@ -462,7 +467,7 @@ if (alert == "Red") numagents = min(teamsize,candidates.len) redalert = 1 - var/list/spawnpoints = emergencyresponseteamspawn + var/list/spawnpoints = GLOB.emergencyresponseteamspawn while(numagents && candidates.len) if (numagents > spawnpoints.len) numagents-- @@ -475,7 +480,7 @@ //Spawn and equip the officer var/mob/living/carbon/human/ERTOperative = new(spawnloc) - var/list/lastname = last_names + var/list/lastname = GLOB.last_names chosen_candidate.client.prefs.copy_to(ERTOperative) var/ertname = pick(lastname) switch(numagents) @@ -506,12 +511,12 @@ //Open the Armory doors if(alert != "Blue") - for(var/obj/machinery/door/poddoor/ert/door in airlocks) + for(var/obj/machinery/door/poddoor/ert/door in GLOB.airlocks) spawn(0) door.open() //Assign antag status and the mission - ticker.mode.traitors += ERTOperative.mind + SSticker.mode.traitors += ERTOperative.mind ERTOperative.mind.special_role = "ERT" var/datum/objective/missionobj = new missionobj.owner = ERTOperative.mind diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm index 6b1c432c78..dd56f2a6a0 100644 --- a/code/modules/admin/verbs/onlyone.dm +++ b/code/modules/admin/verbs/onlyone.dm @@ -1,16 +1,16 @@ -var/highlander = FALSE +GLOBAL_VAR_INIT(highlander, FALSE) /client/proc/only_one() //Gives everyone kilts, berets, claymores, and pinpointers, with the objective to hijack the emergency shuttle. - if(!ticker || !ticker.mode) + if(!SSticker || !SSticker.mode) alert("The game hasn't started yet!") return - highlander = TRUE + GLOB.highlander = TRUE send_to_playing_players("THERE CAN BE ONLY ONE") - for(var/obj/item/weapon/disk/nuclear/N in poi_list) + for(var/obj/item/weapon/disk/nuclear/N in GLOB.poi_list) N.relocate() //Gets it out of bags and such - for(var/mob/living/carbon/human/H in player_list) + for(var/mob/living/carbon/human/H in GLOB.player_list) if(H.stat == DEAD || !(H.client)) continue H.make_scottish() @@ -26,7 +26,7 @@ var/highlander = FALSE addtimer(CALLBACK(src, .proc/only_one), 420) /mob/living/carbon/human/proc/make_scottish() - ticker.mode.traitors += mind + SSticker.mode.traitors += mind mind.special_role = "highlander" dna.species.species_traits |= NOGUNS //nice try jackass @@ -64,7 +64,7 @@ var/highlander = FALSE equip_to_slot_or_del(W, slot_wear_id) var/obj/item/weapon/claymore/highlander/H1 = new(src) - if(!highlander) + if(!GLOB.highlander) H1.admin_spawned = TRUE //To prevent announcing put_in_hands(H1) H1.pickup(src) //For the stun shielding @@ -79,15 +79,15 @@ var/highlander = FALSE Activate it in your hand, and it will lead to the nearest target. Attack the nuclear authentication disk with it, and you will store it.") /proc/only_me() - if(!ticker || !ticker.mode) + if(!SSticker || !SSticker.mode) alert("The game hasn't started yet!") return - for(var/mob/living/carbon/human/H in player_list) + for(var/mob/living/carbon/human/H in GLOB.player_list) if(H.stat == 2 || !(H.client)) continue if(is_special_character(H)) continue - ticker.mode.traitors += H.mind + SSticker.mode.traitors += H.mind H.mind.special_role = "[H.real_name] Prime" var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone @@ -98,7 +98,7 @@ var/highlander = FALSE H.mind.announce_objectives() var/datum/gang/multiverse/G = new(src, "[H.real_name]") - ticker.mode.gangs += G + SSticker.mode.gangs += G G.bosses += H.mind G.add_gang_hud(H.mind) H.mind.gang_datum = G diff --git a/code/modules/admin/verbs/panicbunker.dm b/code/modules/admin/verbs/panicbunker.dm index ac31c26071..cd0a4c50ba 100644 --- a/code/modules/admin/verbs/panicbunker.dm +++ b/code/modules/admin/verbs/panicbunker.dm @@ -9,7 +9,7 @@ log_admin("[key_name(usr)] has toggled the Panic Bunker, it is now [(config.panic_bunker?"on":"off")]") message_admins("[key_name_admin(usr)] has toggled the Panic Bunker, it is now [(config.panic_bunker?"enabled":"disabled")].") - if (config.panic_bunker && (!dbcon || !dbcon.IsConnected())) + if (config.panic_bunker && (!GLOB.dbcon || !GLOB.dbcon.IsConnected())) message_admins("The Database is not connected! Panic bunker will not work until the connection is reestablished.") - feedback_add_details("admin_verb","PANIC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_toggle","Toggle Panic Bunker|[config.panic_bunker]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm index 0841b9cc3b..cb2d0553b1 100644 --- a/code/modules/admin/verbs/playsound.dm +++ b/code/modules/admin/verbs/playsound.dm @@ -1,6 +1,3 @@ -#define SOUND_CHANNEL_ADMIN 777 -var/sound/admin_sound - /client/proc/play_sound(S as sound) set category = "Fun" set name = "Play Global Sound" @@ -11,24 +8,24 @@ var/sound/admin_sound message_admins("[key_name_admin(src)] played sound [S]") var/freq = 1 - if(SSevent.holidays && SSevent.holidays[APRIL_FOOLS]) + if(SSevents.holidays && SSevents.holidays[APRIL_FOOLS]) freq = pick(0.5, 0.7, 0.8, 0.85, 0.9, 0.95, 1.1, 1.2, 1.4, 1.6, 2.0, 2.5) to_chat(src, "You feel the Honkmother messing with your song...") var/sound/admin_sound = new() admin_sound.file = S admin_sound.priority = 250 - admin_sound.channel = SOUND_CHANNEL_ADMIN + admin_sound.channel = CHANNEL_ADMIN admin_sound.frequency = freq admin_sound.wait = 1 admin_sound.repeat = 0 admin_sound.status = SOUND_STREAM - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) if(M.client.prefs.toggles & SOUND_MIDI) M << admin_sound - feedback_add_details("admin_verb","PGS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Play Global Sound") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/play_local_sound(S as sound) @@ -40,7 +37,7 @@ var/sound/admin_sound log_admin("[key_name(src)] played a local sound [S]") message_admins("[key_name_admin(src)] played a local sound [S]") playsound(get_turf(src.mob), S, 50, 0, 0) - feedback_add_details("admin_verb","PLS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Play Local Sound") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/set_round_end_sound(S as sound) set category = "Fun" @@ -48,14 +45,14 @@ var/sound/admin_sound if(!check_rights(R_SOUNDS)) return - if(ticker) - ticker.round_end_sound = fcopy_rsc(S) + if(SSticker) + SSticker.round_end_sound = fcopy_rsc(S) else return log_admin("[key_name(src)] set the round end sound to [S]") message_admins("[key_name_admin(src)] set the round end sound to [S]") - feedback_add_details("admin_verb","SRES") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Set Round End Sound") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/stop_sounds() set category = "Debug" @@ -65,9 +62,7 @@ var/sound/admin_sound log_admin("[key_name(src)] stopped all currently playing sounds.") message_admins("[key_name_admin(src)] stopped all currently playing sounds.") - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) if(M.client) M << sound(null) - feedback_add_details("admin_verb","SS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -#undef SOUND_CHANNEL_ADMIN + feedback_add_details("admin_verb","Stop All Playing Sounds") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/possess.dm b/code/modules/admin/verbs/possess.dm index ed677ef8e8..a7039512f7 100644 --- a/code/modules/admin/verbs/possess.dm +++ b/code/modules/admin/verbs/possess.dm @@ -2,10 +2,9 @@ set name = "Possess Obj" set category = "Object" - if(istype(O,/obj/singularity)) - if(config.forbid_singulo_possession) - to_chat(usr, "It is forbidden to possess singularities.") - return + if(O.dangerous_possession && config.forbid_singulo_possession) + to_chat(usr, "[O] is too powerful for you to possess.") + return var/turf/T = get_turf(O) @@ -24,7 +23,7 @@ usr.name = O.name usr.client.eye = O usr.control_object = O - feedback_add_details("admin_verb","PO") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Possess Object") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /proc/release(obj/O in world) set name = "Release Obj" @@ -42,12 +41,12 @@ usr.loc = O.loc usr.client.eye = usr usr.control_object = null - feedback_add_details("admin_verb","RO") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Release Object") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/proc/givetestverbs(mob/M in mob_list) +/proc/givetestverbs(mob/M in GLOB.mob_list) set desc = "Give this guy possess/release verbs" set category = "Debug" set name = "Give Possessing Verbs" M.verbs += /proc/possess M.verbs += /proc/release - feedback_add_details("admin_verb","GPV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! \ No newline at end of file + feedback_add_details("admin_verb","Give Possessing Verbs") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index eb772f5174..77271dbc08 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -2,7 +2,7 @@ set category = "IC" set name = "Pray" - if(say_disabled) //This is here to try to identify lag problems + if(GLOB.say_disabled) //This is here to try to identify lag problems to_chat(usr, "Speech is currently admin-disabled.") return @@ -25,8 +25,8 @@ cross = image('icons/obj/storage.dmi',"kingyellow") font_color = "blue" prayer_type = "CHAPLAIN PRAYER" - if(SSreligion.Bible_deity_name) - deity = SSreligion.Bible_deity_name + if(SSreligion.deity) + deity = SSreligion.deity else if(iscultist(usr)) cross = image('icons/obj/storage.dmi',"tome") font_color = "red" @@ -35,7 +35,7 @@ msg = "\icon[cross][prayer_type][deity ? " (to [deity])" : ""]: [ADMIN_FULLMONTY(src)] [ADMIN_SC(src)] [ADMIN_SMITE(src)]: [msg]" - for(var/client/C in admins) + for(var/client/C in GLOB.admins) if(C.prefs.chat_toggles & CHAT_PRAYER) to_chat(C, msg) if(C.prefs.toggles & SOUND_PRAYERS) @@ -43,39 +43,26 @@ C << 'sound/effects/pray.ogg' to_chat(usr, "Your prayers have been received by the gods.") - feedback_add_details("admin_verb","PR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Prayer") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! //log_admin("HELP: [key_name(src)]: [msg]") /proc/Centcomm_announce(text , mob/Sender) var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN) - msg = "\ - CENTCOM:\ - [ADMIN_FULLMONTY(Sender)] [ADMIN_BSA(Sender)] \ - [ADMIN_CENTCOM_REPLY(Sender)]: \ - [msg]" - to_chat(admins, msg) - for(var/obj/machinery/computer/communications/C in machines) + msg = "CENTCOM:[ADMIN_FULLMONTY(Sender)] [ADMIN_SMITE(Sender)] [ADMIN_CENTCOM_REPLY(Sender)]: [msg]" + to_chat(GLOB.admins, msg) + for(var/obj/machinery/computer/communications/C in GLOB.machines) C.overrideCooldown() /proc/Syndicate_announce(text , mob/Sender) var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN) - msg = "\ - SYNDICATE:\ - [ADMIN_FULLMONTY(Sender)] [ADMIN_BSA(Sender)] \ - [ADMIN_SYNDICATE_REPLY(Sender)]: \ - [msg]" - to_chat(admins, msg) - for(var/obj/machinery/computer/communications/C in machines) + msg = "SYNDICATE:[ADMIN_FULLMONTY(Sender)] [ADMIN_SMITE(Sender)] [ADMIN_SYNDICATE_REPLY(Sender)]: [msg]" + to_chat(GLOB.admins, msg) + for(var/obj/machinery/computer/communications/C in GLOB.machines) C.overrideCooldown() /proc/Nuke_request(text , mob/Sender) var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN) - msg = "\ - NUKE CODE REQUEST:\ - [ADMIN_FULLMONTY(Sender)] [ADMIN_BSA(Sender)] \ - [ADMIN_CENTCOM_REPLY(Sender)] \ - [ADMIN_SET_SD_CODE]: \ - [msg]" - to_chat(admins, msg) - for(var/obj/machinery/computer/communications/C in machines) + msg = "NUKE CODE REQUEST:[ADMIN_FULLMONTY(Sender)] [ADMIN_SMITE(Sender)] [ADMIN_CENTCOM_REPLY(Sender)] [ADMIN_SET_SD_CODE]: [msg]" + to_chat(GLOB.admins, msg) + for(var/obj/machinery/computer/communications/C in GLOB.machines) C.overrideCooldown() diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 73df3e3a71..361d48817a 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -1,4 +1,4 @@ -/client/proc/cmd_admin_drop_everything(mob/M in mob_list) +/client/proc/cmd_admin_drop_everything(mob/M in GLOB.mob_list) set category = null set name = "Drop Everything" if(!holder) @@ -16,10 +16,10 @@ log_admin("[key_name(usr)] made [key_name(M)] drop everything!") message_admins("[key_name_admin(usr)] made [key_name_admin(M)] drop everything!") - feedback_add_details("admin_verb","DEVR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Drop Everything") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/cmd_admin_subtle_message(mob/M in mob_list) +/client/proc/cmd_admin_subtle_message(mob/M in GLOB.mob_list) set category = "Special Verbs" set name = "Subtle Message" @@ -42,7 +42,7 @@ log_admin("SubtlePM: [key_name(usr)] -> [key_name(M)] : [msg]") message_admins(" SubtleMessage: [key_name_admin(usr)] -> [key_name_admin(M)] : [msg]") - feedback_add_details("admin_verb","SMS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Subtle Message") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_world_narrate() set category = "Special Verbs" @@ -59,7 +59,7 @@ to_chat(world, "[msg]") log_admin("GlobalNarrate: [key_name(usr)] : [msg]") message_admins("[key_name_admin(usr)] Sent a global narrate") - feedback_add_details("admin_verb","GLN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Global Narrate") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_direct_narrate(mob/M) set category = "Special Verbs" @@ -70,7 +70,7 @@ return if(!M) - M = input("Direct narrate to whom?", "Active Players") as null|anything in player_list + M = input("Direct narrate to whom?", "Active Players") as null|anything in GLOB.player_list if(!M) return @@ -83,7 +83,7 @@ to_chat(M, msg) log_admin("DirectNarrate: [key_name(usr)] to ([M.name]/[M.key]): [msg]") message_admins(" DirectNarrate: [key_name(usr)] to ([M.name]/[M.key]): [msg]
    ") - feedback_add_details("admin_verb","DIRN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Direct Narrate") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_local_narrate(atom/A) set category = "Special Verbs" @@ -105,9 +105,9 @@ log_admin("LocalNarrate: [key_name(usr)] at ([get_area(A)]): [msg]") message_admins(" LocalNarrate: [key_name_admin(usr)] at ([get_area(A)]): [msg]
    ") - feedback_add_details("admin_verb","LN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Local Narrate") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/cmd_admin_godmode(mob/M in mob_list) +/client/proc/cmd_admin_godmode(mob/M in GLOB.mob_list) set category = "Special Verbs" set name = "Godmode" if(!holder) @@ -118,7 +118,7 @@ log_admin("[key_name(usr)] has toggled [key_name(M)]'s nodamage to [(M.status_flags & GODMODE) ? "On" : "Off"]") message_admins("[key_name_admin(usr)] has toggled [key_name_admin(M)]'s nodamage to [(M.status_flags & GODMODE) ? "On" : "Off"]") - feedback_add_details("admin_verb","GOD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_toggle","Godmode|[M.status_flags & GODMODE]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /proc/cmd_admin_mute(whom, mute_type, automute = 0) @@ -127,19 +127,26 @@ var/muteunmute var/mute_string + var/feedback_string switch(mute_type) if(MUTE_IC) mute_string = "IC (say and emote)" + feedback_string = "IC" if(MUTE_OOC) mute_string = "OOC" + feedback_string = "OOC" if(MUTE_PRAY) mute_string = "pray" + feedback_string = "Pray" if(MUTE_ADMINHELP) mute_string = "adminhelp, admin PM and ASAY" + feedback_string = "Adminhelp" if(MUTE_DEADCHAT) mute_string = "deadchat and DSAY" + feedback_string = "Deadchat" if(MUTE_ALL) mute_string = "everything" + feedback_string = "Everything" else return @@ -147,7 +154,7 @@ if(istype(whom, /client)) C = whom else if(istext(whom)) - C = directory[whom] + C = GLOB.directory[whom] else return @@ -155,7 +162,7 @@ if(C) P = C.prefs else - P = preferences_datums[whom] + P = GLOB.preferences_datums[whom] if(!P) return @@ -173,7 +180,7 @@ message_admins("SPAM AUTOMUTE: [muteunmute] [key_name_admin(whom)] from [mute_string].") if(C) to_chat(C, "You have been [muteunmute] from [mute_string] by the SPAM AUTOMUTE system. Contact an admin.") - feedback_add_details("admin_verb","AUTOMUTE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_toggle","Auto Mute [feedback_string]|1") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return if(P.muted & mute_type) @@ -187,14 +194,14 @@ message_admins("[key_name_admin(usr)] has [muteunmute] [key_name_admin(whom)] from [mute_string].") if(C) to_chat(C, "You have been [muteunmute] from [mute_string] by [key_name(usr, include_name = FALSE)].") - feedback_add_details("admin_verb","MUTE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_toggle","Mute [feedback_string]|[P.muted & mute_type]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! //I use this proc for respawn character too. /N /proc/create_xeno(ckey) if(!ckey) var/list/candidates = list() - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) if(M.stat != DEAD) continue //we are not dead! if(!(ROLE_ALIEN in M.client.prefs.be_special)) @@ -212,7 +219,7 @@ return 0 var/alien_caste = input(usr, "Please choose which caste to spawn.","Pick a caste",null) as null|anything in list("Queen","Praetorian","Hunter","Sentinel","Drone","Larva") - var/obj/effect/landmark/spawn_here = xeno_spawn.len ? pick(xeno_spawn) : pick(latejoin) + var/obj/effect/landmark/spawn_here = GLOB.xeno_spawn.len ? pick(GLOB.xeno_spawn) : pick(GLOB.latejoin) var/mob/living/carbon/alien/new_xeno switch(alien_caste) if("Queen") @@ -251,7 +258,7 @@ Traitors and the like can also be revived with the previous role mostly intact. return var/mob/dead/observer/G_found - for(var/mob/dead/observer/G in player_list) + for(var/mob/dead/observer/G in GLOB.player_list) if(G.ckey == input) G_found = G break @@ -265,10 +272,10 @@ Traitors and the like can also be revived with the previous role mostly intact. if(G_found.mind.assigned_role=="Alien") if(alert("This character appears to have been an alien. Would you like to respawn them as such?",,"Yes","No")=="Yes") var/turf/T - if(xeno_spawn.len) - T = pick(xeno_spawn) + if(GLOB.xeno_spawn.len) + T = pick(GLOB.xeno_spawn) else - T = pick(latejoin) + T = pick(GLOB.latejoin) var/mob/living/carbon/alien/new_xeno switch(G_found.mind.special_role)//If they have a mind, we can determine which caste they were. @@ -296,7 +303,7 @@ Traitors and the like can also be revived with the previous role mostly intact. //check if they were a monkey else if(findtext(G_found.real_name,"monkey")) if(alert("This character appears to have been a monkey. Would you like to respawn them as such?",,"Yes","No")=="Yes") - var/mob/living/carbon/monkey/new_monkey = new(pick(latejoin)) + var/mob/living/carbon/monkey/new_monkey = new(pick(GLOB.latejoin)) G_found.mind.transfer_to(new_monkey) //be careful when doing stuff like this! I've already checked the mind isn't in use new_monkey.key = G_found.key to_chat(new_monkey, "You have been fully respawned. Enjoy the game.") @@ -305,15 +312,15 @@ Traitors and the like can also be revived with the previous role mostly intact. //Ok, it's not a xeno or a monkey. So, spawn a human. - var/mob/living/carbon/human/new_character = new(pick(latejoin))//The mob being spawned. + var/mob/living/carbon/human/new_character = new(pick(GLOB.latejoin))//The mob being spawned. var/datum/data/record/record_found //Referenced to later to either randomize or not randomize the character. if(G_found.mind && !G_found.mind.active) //mind isn't currently in use by someone/something - /*Try and locate a record for the person being respawned through data_core. + /*Try and locate a record for the person being respawned through GLOB.data_core. This isn't an exact science but it does the trick more often than not.*/ var/id = md5("[G_found.real_name][G_found.mind.assigned_role]") - record_found = find_record("id", id, data_core.locked) + record_found = find_record("id", id, GLOB.data_core.locked) if(record_found)//If they have a record we can determine a few things. new_character.real_name = record_found.fields["name"] @@ -352,11 +359,11 @@ Traitors and the like can also be revived with the previous role mostly intact. switch(new_character.mind.special_role) if("traitor") SSjob.EquipRank(new_character, new_character.mind.assigned_role, 1) - ticker.mode.equip_traitor(new_character) + SSticker.mode.equip_traitor(new_character) if("Wizard") - new_character.loc = pick(wizardstart) - //ticker.mode.learn_basic_spells(new_character) - ticker.mode.equip_wizard(new_character) + new_character.loc = pick(GLOB.wizardstart) + //SSticker.mode.learn_basic_spells(new_character) + SSticker.mode.equip_wizard(new_character) if("Syndicate") var/obj/effect/landmark/synd_spawn = locate("landmark*Syndicate-Spawn") if(synd_spawn) @@ -364,7 +371,7 @@ Traitors and the like can also be revived with the previous role mostly intact. call(/datum/game_mode/proc/equip_syndicate)(new_character) if("Space Ninja") var/list/ninja_spawn = list() - for(var/obj/effect/landmark/L in landmarks_list) + for(var/obj/effect/landmark/L in GLOB.landmarks_list) if(L.name=="carpspawn") ninja_spawn += L new_character.equip_space_ninja() @@ -379,11 +386,11 @@ Traitors and the like can also be revived with the previous role mostly intact. if("Cyborg")//More rigging to make em' work and check if they're traitor. new_character = new_character.Robotize() if(new_character.mind.special_role=="traitor") - ticker.mode.add_law_zero(new_character) + SSticker.mode.add_law_zero(new_character) if("AI") new_character = new_character.AIize() if(new_character.mind.special_role=="traitor") - ticker.mode.add_law_zero(new_character) + SSticker.mode.add_law_zero(new_character) else SSjob.EquipRank(new_character, new_character.mind.assigned_role, 1)//Or we simply equip them. @@ -392,7 +399,7 @@ Traitors and the like can also be revived with the previous role mostly intact. if(!record_found&&new_character.mind.assigned_role!=new_character.mind.special_role)//If there are no records for them. If they have a record, this info is already in there. MODE people are not announced anyway. //Power to the user! if(alert(new_character,"Warning: No data core entry detected. Would you like to announce the arrival of this character by adding them to various databases, such as medical records?",,"No","Yes")=="Yes") - data_core.manifest_inject(new_character) + GLOB.data_core.manifest_inject(new_character) if(alert(new_character,"Would you like an active AI to announce this character?",,"No","Yes")=="Yes") AnnounceArrival(new_character, new_character.mind.assigned_role) @@ -401,7 +408,7 @@ Traitors and the like can also be revived with the previous role mostly intact. to_chat(new_character, "You have been fully respawned. Enjoy the game.") - feedback_add_details("admin_verb","RSPCH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Respawn Character") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return new_character /client/proc/cmd_admin_add_freeform_ai_law() @@ -424,9 +431,9 @@ Traitors and the like can also be revived with the previous role mostly intact. ion.announceEvent = announce_ion_laws ion.ionMessage = input - feedback_add_details("admin_verb","IONC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Add Custom AI Law") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/cmd_admin_rejuvenate(mob/living/M in mob_list) +/client/proc/cmd_admin_rejuvenate(mob/living/M in GLOB.mob_list) set category = "Special Verbs" set name = "Rejuvenate" if(!holder) @@ -441,7 +448,7 @@ Traitors and the like can also be revived with the previous role mostly intact. log_admin("[key_name(usr)] healed / revived [key_name(M)]") message_admins("Admin [key_name_admin(usr)] healed / revived [key_name_admin(M)]!") - feedback_add_details("admin_verb","REJU") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Rejuvinate") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_create_centcom_report() set category = "Special Verbs" @@ -453,17 +460,20 @@ Traitors and the like can also be revived with the previous role mostly intact. if(!input) return - var/confirm = alert(src, "Do you want to announce the contents of the report to the crew?", "Announce", "Yes", "No") + var/confirm = alert(src, "Do you want to announce the contents of the report to the crew?", "Announce", "Yes", "No", "Cancel") var/announce_command_report = TRUE - if(confirm == "Yes") - priority_announce(input, null, 'sound/AI/commandreport.ogg') - announce_command_report = FALSE + switch(confirm) + if("Yes") + priority_announce(input, null, 'sound/AI/commandreport.ogg') + announce_command_report = FALSE + if("Cancel") + return - print_command_report(input,"[confirm=="Yes" ? "" : "Classified "][command_name()] Update",announce=announce_command_report) + print_command_report(input, "[announce_command_report ? "Classified " : ""][command_name()] Update", announce_command_report) log_admin("[key_name(src)] has created a command report: [input]") message_admins("[key_name_admin(src)] has created a command report") - feedback_add_details("admin_verb","CCR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Create Command Report") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_change_command_name() set category = "Special Verbs" @@ -489,7 +499,7 @@ Traitors and the like can also be revived with the previous role mostly intact. if (alert(src, "Are you sure you want to delete:\n[O]\nat ([O.x], [O.y], [O.z])?", "Confirmation", "Yes", "No") == "Yes") log_admin("[key_name(usr)] deleted [O] at ([O.x],[O.y],[O.z])") message_admins("[key_name_admin(usr)] deleted [O] at ([O.x],[O.y],[O.z])") - feedback_add_details("admin_verb","DEL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Delete") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! if(isturf(O)) var/turf/T = O T.ChangeTurf(T.baseturf) @@ -504,7 +514,7 @@ Traitors and the like can also be revived with the previous role mostly intact. to_chat(src, "Only administrators may use this command.") return holder.manage_free_slots() - feedback_add_details("admin_verb","MFS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Manage Job Slots") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_explosion(atom/O as obj|mob|turf in world) set category = "Special Verbs" @@ -533,7 +543,7 @@ Traitors and the like can also be revived with the previous role mostly intact. explosion(O, devastation, heavy, light, flash, null, null,flames) log_admin("[key_name(usr)] created an explosion ([devastation],[heavy],[light],[flames]) at ([O.x],[O.y],[O.z])") message_admins("[key_name_admin(usr)] created an explosion ([devastation],[heavy],[light],[flames]) at ([O.x],[O.y],[O.z])") - feedback_add_details("admin_verb","EXPL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Explosion") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return else return @@ -556,13 +566,13 @@ Traitors and the like can also be revived with the previous role mostly intact. empulse(O, heavy, light) log_admin("[key_name(usr)] created an EM Pulse ([heavy],[light]) at ([O.x],[O.y],[O.z])") message_admins("[key_name_admin(usr)] created an EM PUlse ([heavy],[light]) at ([O.x],[O.y],[O.z])") - feedback_add_details("admin_verb","EMP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","EM Pulse") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return else return -/client/proc/cmd_admin_gib(mob/M in mob_list) +/client/proc/cmd_admin_gib(mob/M in GLOB.mob_list) set category = "Special Verbs" set name = "Gib" @@ -587,7 +597,7 @@ Traitors and the like can also be revived with the previous role mostly intact. M.gib() else M.gib(1) - feedback_add_details("admin_verb","GIB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Gib") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_gib_self() set name = "Gibself" @@ -597,17 +607,17 @@ Traitors and the like can also be revived with the previous role mostly intact. if(confirm == "Yes") log_admin("[key_name(usr)] used gibself.") message_admins("[key_name_admin(usr)] used gibself.") - feedback_add_details("admin_verb","GIBS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Gib Self") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! mob.gib(1, 1, 1) -/client/proc/cmd_admin_check_contents(mob/living/M in mob_list) +/client/proc/cmd_admin_check_contents(mob/living/M in GLOB.mob_list) set category = "Special Verbs" set name = "Check Contents" var/list/L = M.get_contents() for(var/t in L) to_chat(usr, "[t]") - feedback_add_details("admin_verb","CC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Check Contents") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/toggle_view_range() set category = "Special Verbs" @@ -622,7 +632,7 @@ Traitors and the like can also be revived with the previous role mostly intact. log_admin("[key_name(usr)] changed their view range to [view].") //message_admins("\blue [key_name_admin(usr)] changed their view range to [view].") //why? removed by order of XSI - feedback_add_details("admin_verb","CVRA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_toggle","Change View Range|[view]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/admin_call_shuttle() @@ -641,7 +651,7 @@ Traitors and the like can also be revived with the previous role mostly intact. return SSshuttle.emergency.request() - feedback_add_details("admin_verb","CSHUT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Call Shuttle") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! log_admin("[key_name(usr)] admin-called the emergency shuttle.") message_admins("[key_name_admin(usr)] admin-called the emergency shuttle.") return @@ -658,7 +668,7 @@ Traitors and the like can also be revived with the previous role mostly intact. return SSshuttle.emergency.cancel() - feedback_add_details("admin_verb","CCSHUT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Cancel Shuttle") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! log_admin("[key_name(usr)] admin-recalled the emergency shuttle.") message_admins("[key_name_admin(usr)] admin-recalled the emergency shuttle.") @@ -669,7 +679,7 @@ Traitors and the like can also be revived with the previous role mostly intact. set name = "Make Everyone Random" set desc = "Make everyone have a random appearance. You can only use this before rounds!" - if(ticker && ticker.mode) + if(SSticker && SSticker.mode) to_chat(usr, "Nope you can't do this, the game's already started. This only works before rounds!") return @@ -693,7 +703,7 @@ Traitors and the like can also be revived with the previous role mostly intact. to_chat(usr, "Remember: you can always disable the randomness by using the verb again, assuming the round hasn't started yet.") config.force_random_names = 1 - feedback_add_details("admin_verb","MER") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Make Everyone Random") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/toggle_random_events() @@ -708,7 +718,7 @@ Traitors and the like can also be revived with the previous role mostly intact. config.allow_random_events = 0 to_chat(usr, "Random events disabled") message_admins("Admin [key_name_admin(usr)] has disabled random events.") - feedback_add_details("admin_verb","TRE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_toggle","Toggle Random Events|[config.allow_random_events]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/admin_change_sec_level() @@ -726,9 +736,9 @@ Traitors and the like can also be revived with the previous role mostly intact. log_admin("[key_name(usr)] changed the security level to [level]") message_admins("[key_name_admin(usr)] changed the security level to [level]") - feedback_add_details("admin_verb","CSL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Set Security Level [capitalize(level)]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/toggle_nuke(obj/machinery/nuclearbomb/N in nuke_list) +/client/proc/toggle_nuke(obj/machinery/nuclearbomb/N in GLOB.nuke_list) set name = "Toggle Nuke" set category = "Fun" set popup_menu = 0 @@ -745,9 +755,9 @@ Traitors and the like can also be revived with the previous role mostly intact. log_admin("[key_name(usr)] [N.timing ? "activated" : "deactivated"] a nuke at ([N.x],[N.y],[N.z]).") message_admins("[ADMIN_LOOKUPFLW(usr)] [N.timing ? "activated" : "deactivated"] a nuke at [ADMIN_COORDJMP(N)].") - feedback_add_details("admin_verb","TN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_toggle","Toggle Nuke|[N.timing]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -var/list/datum/outfit/custom_outfits = list() //Admin created outfits +GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits /client/proc/create_outfits() set category = "Debug" @@ -930,28 +940,31 @@ var/list/datum/outfit/custom_outfits = list() //Admin created outfits if(!holder) return - var/datum/atom_hud/A = huds[ANTAG_HUD_TRAITOR] - var/adding_hud = (usr in A.hudusers) ? 0 : 1 + var/adding_hud = !has_antag_hud() - for(var/datum/atom_hud/H in huds) + for(var/datum/atom_hud/H in GLOB.huds) if(istype(H, /datum/atom_hud/antag)) (adding_hud) ? H.add_hud_to(usr) : H.remove_hud_from(usr) - for(var/datum/gang/G in ticker.mode.gangs) + for(var/datum/gang/G in SSticker.mode.gangs) var/datum/atom_hud/antag/H = G.ganghud (adding_hud) ? H.add_hud_to(usr) : H.remove_hud_from(usr) to_chat(usr, "You toggled your admin antag HUD [adding_hud ? "ON" : "OFF"].") message_admins("[key_name_admin(usr)] toggled their admin antag HUD [adding_hud ? "ON" : "OFF"].") log_admin("[key_name(usr)] toggled their admin antag HUD [adding_hud ? "ON" : "OFF"].") - feedback_add_details("admin_verb","TAH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_toggle","Toggle Antag HUD|[adding_hud]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/proc/has_antag_hud() + var/datum/atom_hud/A = GLOB.huds[ANTAG_HUD_TRAITOR] + return mob in A.hudusers /client/proc/open_shuttle_manipulator() set category = "Admin" set name = "Shuttle Manipulator" set desc = "Opens the shuttle manipulator UI." - for(var/obj/machinery/shuttle_manipulator/M in machines) + for(var/obj/machinery/shuttle_manipulator/M in GLOB.machines) M.ui_interact(usr) /client/proc/mass_zombie_infection() @@ -967,12 +980,12 @@ var/list/datum/outfit/custom_outfits = list() //Admin created outfits if(confirm != "Yes") return - for(var/mob/living/carbon/human/H in mob_list) + for(var/mob/living/carbon/human/H in GLOB.mob_list) new /obj/item/organ/zombie_infection(H) message_admins("[key_name_admin(usr)] added a latent zombie infection to all humans.") log_admin("[key_name(usr)] added a latent zombie infection to all humans.") - feedback_add_details("admin_verb","MZI") + feedback_add_details("admin_verb","Mass Zombie Infection") /client/proc/mass_zombie_cure() set category = "Fun" @@ -985,12 +998,12 @@ var/list/datum/outfit/custom_outfits = list() //Admin created outfits if(confirm != "Yes") return - for(var/obj/item/organ/zombie_infection/I in zombie_infection_list) + for(var/obj/item/organ/zombie_infection/I in GLOB.zombie_infection_list) qdel(I) message_admins("[key_name_admin(usr)] cured all zombies.") log_admin("[key_name(usr)] cured all zombies.") - feedback_add_details("admin_verb","MZC") + feedback_add_details("admin_verb","Mass Zombie Cure") /client/proc/polymorph_all() set category = "Fun" @@ -1004,12 +1017,12 @@ var/list/datum/outfit/custom_outfits = list() //Admin created outfits if(confirm != "Yes") return - var/list/mobs = shuffle(living_mob_list.Copy()) // might change while iterating + var/list/mobs = shuffle(GLOB.living_mob_list.Copy()) // might change while iterating var/who_did_it = key_name_admin(usr) message_admins("[key_name_admin(usr)] started polymorphed all living mobs.") log_admin("[key_name(usr)] polymorphed all living mobs.") - feedback_add_details("admin_verb","MASSWABBAJACK") + feedback_add_details("admin_verb","Polymorph All") for(var/mob/living/M in mobs) CHECK_TICK @@ -1038,30 +1051,30 @@ var/list/datum/outfit/custom_outfits = list() //Admin created outfits if(!input) return - if(!ticker) + if(!SSticker) return - ticker.selected_tip = input + SSticker.selected_tip = input // If we've already tipped, then send it straight away. - if(ticker.tipped) - ticker.send_tip_of_the_round() + if(SSticker.tipped) + SSticker.send_tip_of_the_round() message_admins("[key_name_admin(usr)] sent a tip of the round.") log_admin("[key_name(usr)] sent \"[input]\" as the Tip of the Round.") - feedback_add_details("admin_verb","TIP") + feedback_add_details("admin_verb","Show Tip") #define ON_PURRBATION(H) (!(H.dna.features["tail_human"] == "None" && H.dna.features["ears"] == "None")) /proc/mass_purrbation() - for(var/M in mob_list) + for(var/M in GLOB.mob_list) if(ishumanbasic(M)) purrbation_apply(M) CHECK_TICK /proc/mass_remove_purrbation() - for(var/M in mob_list) + for(var/M in GLOB.mob_list) if(ishumanbasic(M)) purrbation_remove(M) CHECK_TICK @@ -1110,7 +1123,7 @@ var/list/datum/outfit/custom_outfits = list() //Admin created outfits /datum/admins/proc/modify_goals() var/dat = "" - for(var/datum/station_goal/S in ticker.mode.station_goals) + for(var/datum/station_goal/S in SSticker.mode.station_goals) dat += "[S.name] - Announce | Remove
    " dat += "
    Add New Goal" usr << browse(dat, "window=goals;size=400x400") @@ -1127,4 +1140,34 @@ var/list/datum/outfit/custom_outfits = list() //Admin created outfits if (world.visibility && !world.reachable) message_admins("WARNING: The server will not show up on the hub because byond is detecting that a filewall is blocking incoming connections.") - feedback_add_details("admin_verb","HUB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_toggle","Toggled Hub Visibility|[world.visibility]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/proc/smite(mob/living/carbon/human/target as mob) + set name = "Smite" + set category = "Fun" + if(!holder) + return + + var/list/punishment_list = list(ADMIN_PUNISHMENT_LIGHTNING, ADMIN_PUNISHMENT_BRAINDAMAGE, ADMIN_PUNISHMENT_GIB, ADMIN_PUNISHMENT_BSA) + + var/punishment = input("Choose a punishment", "DIVINE SMITING") as null|anything in punishment_list + + if(QDELETED(target) || !punishment) + return + + switch(punishment) + if(ADMIN_PUNISHMENT_LIGHTNING) + var/turf/T = get_step(get_step(target, NORTH), NORTH) + T.Beam(target, icon_state="lightning[rand(1,12)]", time = 5) + target.adjustFireLoss(75) + target.electrocution_animation(40) + to_chat(target, "The gods have punished you for your sins!") + if(ADMIN_PUNISHMENT_BRAINDAMAGE) + target.adjustBrainLoss(75) + if(ADMIN_PUNISHMENT_GIB) + target.gib(FALSE) + if(ADMIN_PUNISHMENT_BSA) + bluespace_artillery(target) + + message_admins("[key_name_admin(usr)] punished [key_name_admin(target)] with [punishment].") + log_admin("[key_name(usr)] punished [key_name(target)] with [punishment].") diff --git a/code/modules/admin/verbs/reestablish_db_connection.dm b/code/modules/admin/verbs/reestablish_db_connection.dm index f8daf79da6..20b6a9e848 100644 --- a/code/modules/admin/verbs/reestablish_db_connection.dm +++ b/code/modules/admin/verbs/reestablish_db_connection.dm @@ -5,7 +5,7 @@ to_chat(usr, "The Database is not enabled!") return - if (dbcon && dbcon.IsConnected()) + if (GLOB.dbcon && GLOB.dbcon.IsConnected()) if (!check_rights(R_DEBUG,0)) alert("The database is already connected! (Only those with +debug can force a reconnection)", "The database is already connected!") return @@ -14,17 +14,17 @@ if (reconnect != "Force Reconnect") return - dbcon.Disconnect() + GLOB.dbcon.Disconnect() log_admin("[key_name(usr)] has forced the database to disconnect") message_admins("[key_name_admin(usr)] has forced the database to disconnect!") - feedback_add_details("admin_verb","FRDB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Force Reestablished Database Connection") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! log_admin("[key_name(usr)] is attempting to re-established the DB Connection") message_admins("[key_name_admin(usr)] is attempting to re-established the DB Connection") - feedback_add_details("admin_verb","RDB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Reestablished Database Connection") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - dbcon.failed_connections = 0 - if(!dbcon.Connect()) - message_admins("Database connection failed: " + dbcon.ErrorMsg()) + GLOB.dbcon.failed_connections = 0 + if(!GLOB.dbcon.Connect()) + message_admins("Database connection failed: " + GLOB.dbcon.ErrorMsg()) else message_admins("Database connection re-established") \ No newline at end of file diff --git a/code/modules/admin/verbs/tripAI.dm b/code/modules/admin/verbs/tripAI.dm index b35c8d3ebf..7742d6ea66 100644 --- a/code/modules/admin/verbs/tripAI.dm +++ b/code/modules/admin/verbs/tripAI.dm @@ -2,7 +2,7 @@ set category = "Fun" set name = "Create AI Triumvirate" - if(ticker.current_state > GAME_STATE_PREGAME) + if(SSticker.current_state > GAME_STATE_PREGAME) to_chat(usr, "This option is currently only usable during pregame. This may change at a later date.") return @@ -10,11 +10,11 @@ if(!job) to_chat(usr, "Unable to locate the AI job") return - if(ticker.triai) - ticker.triai = 0 + if(SSticker.triai) + SSticker.triai = 0 to_chat(usr, "Only one AI will be spawned at round start.") message_admins("[key_name_admin(usr)] has toggled off triple AIs at round start.") else - ticker.triai = 1 + SSticker.triai = 1 to_chat(usr, "There will be an AI Triumvirate at round start.") message_admins("[key_name_admin(usr)] has toggled on triple AIs at round start.") diff --git a/code/modules/admin/whitelist.dm b/code/modules/admin/whitelist.dm index d0addab230..7162789e3f 100644 --- a/code/modules/admin/whitelist.dm +++ b/code/modules/admin/whitelist.dm @@ -1,22 +1,23 @@ #define WHITELISTFILE "config/whitelist.txt" -var/list/whitelist +GLOBAL_LIST(whitelist) +GLOBAL_PROTECT(whitelist) /proc/load_whitelist() - whitelist = list() + GLOB.whitelist = list() for(var/line in file2list(WHITELISTFILE)) if(!line) continue if(findtextEx(line,"#",1,2)) continue - whitelist += line + GLOB.whitelist += line - if(!whitelist.len) - whitelist = null + if(!GLOB.whitelist.len) + GLOB.whitelist = null /proc/check_whitelist(var/ckey) - if(!whitelist) + if(!GLOB.whitelist) return FALSE - . = (ckey in whitelist) + . = (ckey in GLOB.whitelist) #undef WHITELISTFILE diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm index 481e692a5d..e761b05e92 100644 --- a/code/modules/assembly/bomb.dm +++ b/code/modules/assembly/bomb.dm @@ -45,12 +45,12 @@ if((istype(W, /obj/item/weapon/weldingtool) && W:welding)) if(!status) status = 1 - bombers += "[key_name(user)] welded a single tank bomb. Temp: [bombtank.air_contents.temperature-T0C]" + GLOB.bombers += "[key_name(user)] welded a single tank bomb. Temp: [bombtank.air_contents.temperature-T0C]" message_admins("[key_name_admin(user)] welded a single tank bomb. Temp: [bombtank.air_contents.temperature-T0C]") to_chat(user, "A pressure hole has been bored to [bombtank] valve. \The [bombtank] can now be ignited.") else status = 0 - bombers += "[key_name(user)] unwelded a single tank bomb. Temp: [bombtank.air_contents.temperature-T0C]" + GLOB.bombers += "[key_name(user)] unwelded a single tank bomb. Temp: [bombtank.air_contents.temperature-T0C]" to_chat(user, "The hole has been closed.") add_fingerprint(user) ..() diff --git a/code/modules/assembly/doorcontrol.dm b/code/modules/assembly/doorcontrol.dm index 14ad9a6c3b..630dc3d0bc 100644 --- a/code/modules/assembly/doorcontrol.dm +++ b/code/modules/assembly/doorcontrol.dm @@ -17,7 +17,7 @@ /obj/item/device/assembly/control/activate() cooldown = 1 var/openclose - for(var/obj/machinery/door/poddoor/M in machines) + for(var/obj/machinery/door/poddoor/M in GLOB.machines) if(M.id == src.id) if(openclose == null) openclose = M.density @@ -49,7 +49,7 @@ cooldown = 1 var/doors_need_closing = FALSE var/list/obj/machinery/door/airlock/open_or_close = list() - for(var/obj/machinery/door/airlock/D in airlocks) + for(var/obj/machinery/door/airlock/D in GLOB.airlocks) if(D.id_tag == src.id) if(specialfunctions & OPEN) open_or_close += D @@ -84,20 +84,20 @@ /obj/item/device/assembly/control/massdriver/activate() cooldown = 1 - for(var/obj/machinery/door/poddoor/M in machines) + for(var/obj/machinery/door/poddoor/M in GLOB.machines) if (M.id == src.id) spawn( 0 ) M.open() sleep(10) - for(var/obj/machinery/mass_driver/M in machines) + for(var/obj/machinery/mass_driver/M in GLOB.machines) if(M.id == src.id) M.drive() sleep(60) - for(var/obj/machinery/door/poddoor/M in machines) + for(var/obj/machinery/door/poddoor/M in GLOB.machines) if (M.id == src.id) spawn( 0 ) M.close() @@ -112,12 +112,12 @@ /obj/item/device/assembly/control/igniter/activate() cooldown = 1 - for(var/obj/machinery/sparker/M in machines) + for(var/obj/machinery/sparker/M in GLOB.machines) if (M.id == src.id) spawn( 0 ) M.ignite() - for(var/obj/machinery/igniter/M in machines) + for(var/obj/machinery/igniter/M in GLOB.machines) if(M.id == src.id) M.use_power(50) M.on = !M.on @@ -133,7 +133,7 @@ /obj/item/device/assembly/control/flasher/activate() cooldown = 1 - for(var/obj/machinery/flasher/M in machines) + for(var/obj/machinery/flasher/M in GLOB.machines) if(M.id == src.id) spawn(0) M.flash() @@ -148,7 +148,7 @@ /obj/item/device/assembly/control/crematorium/activate() cooldown = 1 - for (var/obj/structure/bodycontainer/crematorium/C in crematoriums) + for (var/obj/structure/bodycontainer/crematorium/C in GLOB.crematoriums) if (C.id == id) C.cremate(usr) diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm index 3a987633dd..6928139829 100644 --- a/code/modules/assembly/flash.dm +++ b/code/modules/assembly/flash.dm @@ -144,14 +144,14 @@ /obj/item/device/assembly/flash/proc/terrible_conversion_proc(mob/M, mob/user) if(ishuman(M) && ishuman(user) && M.stat != DEAD) - if(user.mind && (user.mind in ticker.mode.head_revolutionaries)) + if(user.mind && (user.mind in SSticker.mode.head_revolutionaries)) if(M.client) if(M.stat == CONSCIOUS) M.mind_initialize() //give them a mind datum if they don't have one. var/resisted if(!M.isloyal()) - if(user.mind in ticker.mode.head_revolutionaries) - if(ticker.mode.add_revolutionary(M.mind)) + if(user.mind in SSticker.mode.head_revolutionaries) + if(SSticker.mode.add_revolutionary(M.mind)) M.Stun(3) times_used -- //Flashes less likely to burn out for headrevs when used for conversion else diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm index 07b05ef565..dddcf3ac48 100644 --- a/code/modules/assembly/health.dm +++ b/code/modules/assembly/health.dm @@ -11,7 +11,9 @@ var/health_scan var/alarm_health = 0 - +/obj/item/device/assembly/health/examine(mob/user) + ..() + to_chat(user, "Use a multitool to swap between \"detect death\" mode and \"detect critical state\" mode.") /obj/item/device/assembly/health/activate() if(!..()) diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index 32c2c96894..8b1e92743d 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -21,7 +21,7 @@ attach(A2,user) name = "[A.name]-[A2.name] assembly" update_icon() - feedback_add_details("assembly_made","[A.name]-[A2.name]") + feedback_add_details("assembly_made","[initial(A.name)]-[initial(A2.name)]") /obj/item/device/assembly_holder/proc/attach(obj/item/device/assembly/A, mob/user) if(!A.remove_item_from_storage(src)) diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 342745bfb1..cff02284e5 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -118,7 +118,7 @@ Code: var/time = time2text(world.realtime,"hh:mm:ss") var/turf/T = get_turf(src) if(usr) - lastsignalers.Add("[time] : [usr.key] used [src] @ location ([T.x],[T.y],[T.z]) : [format_frequency(frequency)]/[code]") + GLOB.lastsignalers.Add("[time] : [usr.key] used [src] @ location ([T.x],[T.y],[T.z]) : [format_frequency(frequency)]/[code]") return @@ -153,7 +153,7 @@ Code: return SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = SSradio.add_object(src, frequency, RADIO_CHAT) + radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_CHAT) return // Embedded signaller used in grenade construction. diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index 17a0b2d756..897812db5c 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -95,7 +95,7 @@ if(timing && istype(holder, /obj/item/device/transfer_valve)) var/timer_message = "[key_name_admin(usr)](?) (FLW) activated [src] attachment on [holder]." message_admins(timer_message) - bombers += timer_message + GLOB.bombers += timer_message log_game("[key_name(usr)] activated [src] attachment for [loc]") update_icon() if(href_list["repeat"]) diff --git a/code/modules/assembly/voice.dm b/code/modules/assembly/voice.dm index db1070e5bb..e3accea988 100644 --- a/code/modules/assembly/voice.dm +++ b/code/modules/assembly/voice.dm @@ -12,40 +12,42 @@ var/listening = 0 var/recorded = "" //the activation message var/mode = 1 - var/global/list/modes = list("inclusive", + var/static/list/modes = list("inclusive", "exclusive", "recognizer", "voice sensor") -/obj/item/device/assembly/voice/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans) +/obj/item/device/assembly/voice/examine(mob/user) + ..() + to_chat(user, "Use a multitool to swap between \"inclusive\", \"exclusive\", \"recognizer\", and \"voice sensor\" mode.") + +/obj/item/device/assembly/voice/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) if(speaker == src) return if(listening && !radio_freq) - record_speech(speaker, raw_message) + record_speech(speaker, raw_message, message_language) else if(check_activation(speaker, raw_message)) - spawn(10) - pulse(0) + addtimer(CALLBACK(src, .proc/pulse, 0), 10) -/obj/item/device/assembly/voice/proc/record_speech(atom/movable/speaker, raw_message) +/obj/item/device/assembly/voice/proc/record_speech(atom/movable/speaker, raw_message, datum/language/message_language) switch(mode) if(1) recorded = raw_message listening = 0 - say("Activation message is '[recorded]'.") + say("Activation message is '[recorded]'.", message_language) if(2) recorded = raw_message listening = 0 - say("Activation message is '[recorded]'.") + say("Activation message is '[recorded]'.", message_language) if(3) recorded = speaker.GetVoice() listening = 0 - say("Your voice pattern is saved.") + say("Your voice pattern is saved.", message_language) if(4) if(length(raw_message)) - spawn(10) - pulse(0) + addtimer(CALLBACK(src, .proc/pulse, 0), 10) /obj/item/device/assembly/voice/proc/check_activation(atom/movable/speaker, raw_message) . = 0 diff --git a/code/modules/atmospherics/environmental/LINDA_fire.dm b/code/modules/atmospherics/environmental/LINDA_fire.dm index 316e593c6e..a52a725954 100644 --- a/code/modules/atmospherics/environmental/LINDA_fire.dm +++ b/code/modules/atmospherics/environmental/LINDA_fire.dm @@ -61,7 +61,7 @@ ..() SSair.hotspots += src perform_exposure() - setDir(pick(cardinal)) + setDir(pick(GLOB.cardinal)) air_update_turf() @@ -79,14 +79,14 @@ if(bypassing) if(!just_spawned) - volume = location.air.fuel_burnt*FIRE_GROWTH_RATE + volume = location.air.reaction_results["fire"]*FIRE_GROWTH_RATE temperature = location.air.temperature else var/datum/gas_mixture/affected = location.air.remove_ratio(volume/location.air.volume) affected.temperature = temperature affected.react() temperature = affected.temperature - volume = affected.fuel_burnt*FIRE_GROWTH_RATE + volume = affected.reaction_results["fire"]*FIRE_GROWTH_RATE location.assume_air(affected) for(var/A in loc) diff --git a/code/modules/atmospherics/environmental/LINDA_system.dm b/code/modules/atmospherics/environmental/LINDA_system.dm index ae4841c5e6..196d4dca9c 100644 --- a/code/modules/atmospherics/environmental/LINDA_system.dm +++ b/code/modules/atmospherics/environmental/LINDA_system.dm @@ -39,7 +39,7 @@ /turf/proc/CalculateAdjacentTurfs() var/list/atmos_adjacent_turfs = src.atmos_adjacent_turfs - for(var/direction in cardinal) + for(var/direction in GLOB.cardinal) var/turf/T = get_step(src, direction) if(!T) continue @@ -72,11 +72,11 @@ var/turf/curloc = src - for (var/direction in diagonals) + for (var/direction in GLOB.diagonals) var/matchingDirections = 0 var/turf/S = get_step(curloc, direction) - for (var/checkDirection in cardinal) + for (var/checkDirection in GLOB.cardinal) var/turf/checkTurf = get_step(S, checkDirection) if(!S.atmos_adjacent_turfs || !S.atmos_adjacent_turfs[checkTurf]) continue diff --git a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm index 189388c4ac..f78f1724d8 100644 --- a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm +++ b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm @@ -91,7 +91,7 @@ /turf/open/archive() air.archive() archived_cycle = SSair.times_fired - ..() + temperature_archived = temperature /////////////////////////GAS OVERLAYS////////////////////////////// @@ -117,11 +117,23 @@ var/list/gases = air.gases for(var/id in gases) var/gas = gases[id] - if(gas[GAS_META][META_GAS_OVERLAY] && gas[MOLES] > gas[GAS_META][META_GAS_MOLES_VISIBLE]) - . += gas[GAS_META][META_GAS_OVERLAY] + var/gas_meta = gas[GAS_META] + var/gas_overlay = gas_meta[META_GAS_OVERLAY] + if(gas_overlay && gas[MOLES] > gas_meta[META_GAS_MOLES_VISIBLE]) + . += gas_overlay /////////////////////////////SIMULATION/////////////////////////////////// +#define LAST_SHARE_CHECK \ + var/last_share = our_air.last_share;\ + if(last_share > MINIMUM_AIR_TO_SUSPEND){\ + our_excited_group.reset_cooldowns();\ + cached_atmos_cooldown = 0;\ + } else if(last_share > MINIMUM_MOLES_DELTA_TO_MOVE) {\ + our_excited_group.dismantle_cooldown = 0;\ + cached_atmos_cooldown = 0;\ + } + /turf/proc/process_cell(fire_count) SSair.remove_from_active(src) @@ -130,16 +142,19 @@ archive() current_cycle = fire_count - var/remove = 1 //set by non simulated turfs who are sharing with this turf //cache for sanic speed var/list/adjacent_turfs = atmos_adjacent_turfs var/datum/excited_group/our_excited_group = excited_group var/adjacent_turfs_length = LAZYLEN(adjacent_turfs) - atmos_cooldown++ - if (planetary_atmos) + var/cached_atmos_cooldown = atmos_cooldown + 1 + + var/planet_atmos = planetary_atmos + if (planet_atmos) adjacent_turfs_length++ + var/datum/gas_mixture/our_air = air + for(var/t in adjacent_turfs) var/turf/open/enemy_tile = t @@ -148,6 +163,8 @@ /******************* GROUP HANDLING START *****************************************************************/ + var/should_share_air = FALSE + var/datum/gas_mixture/enemy_air = enemy_tile.air if(enemy_tile.excited) //cache for sanic speed var/datum/excited_group/enemy_excited_group = enemy_tile.excited_group @@ -157,26 +174,26 @@ //combine groups (this also handles updating the excited_group var of all involved turfs) our_excited_group.merge_groups(enemy_excited_group) our_excited_group = excited_group //update our cache - share_air(enemy_tile, fire_count, adjacent_turfs_length) //share + should_share_air = TRUE else - if((recently_active == 1 && enemy_tile.recently_active == 1) || air.compare(enemy_tile.air)) + if((recently_active == 1 && enemy_tile.recently_active == 1) || our_air.compare(enemy_air)) our_excited_group.add_turf(enemy_tile) //add enemy to our group - share_air(enemy_tile, fire_count, adjacent_turfs_length) //share + should_share_air = TRUE else if(enemy_excited_group) - if((recently_active == 1 && enemy_tile.recently_active == 1) || air.compare(enemy_tile.air)) + if((recently_active == 1 && enemy_tile.recently_active == 1) || our_air.compare(enemy_air)) enemy_excited_group.add_turf(src) //join self to enemy group our_excited_group = excited_group //update our cache - share_air(enemy_tile, fire_count, adjacent_turfs_length) //share + should_share_air = TRUE else - if((recently_active == 1 && enemy_tile.recently_active == 1) || air.compare(enemy_tile.air)) + if((recently_active == 1 && enemy_tile.recently_active == 1) || our_air.compare(enemy_air)) var/datum/excited_group/EG = new //generate new group EG.add_turf(src) EG.add_turf(enemy_tile) our_excited_group = excited_group //update our cache - share_air(enemy_tile, fire_count, adjacent_turfs_length) //share + should_share_air = TRUE else - if(air.compare(enemy_tile.air)) //compare if + if(our_air.compare(enemy_air)) //compare if SSair.add_to_active(enemy_tile) //excite enemy if(our_excited_group) our_excited_group.add_turf(enemy_tile) //add enemy to group @@ -185,51 +202,46 @@ EG.add_turf(src) EG.add_turf(enemy_tile) our_excited_group = excited_group //update our cache - share_air(enemy_tile, fire_count, adjacent_turfs_length) //share + should_share_air = TRUE + + //air sharing + if(should_share_air) + var/difference = our_air.share(enemy_air, adjacent_turfs_length) + if(difference) + if(difference > 0) + consider_pressure_difference(enemy_tile, difference) + else + enemy_tile.consider_pressure_difference(src, -difference) + LAST_SHARE_CHECK + /******************* GROUP HANDLING FINISH *********************************************************************/ - if (planetary_atmos) //share our air with the "atmosphere" "above" the turf + if (planet_atmos) //share our air with the "atmosphere" "above" the turf var/datum/gas_mixture/G = new G.copy_from_turf(src) G.archive() - if(air.compare(G)) + if(our_air.compare(G)) if(!our_excited_group) var/datum/excited_group/EG = new EG.add_turf(src) our_excited_group = excited_group - air.share(G, adjacent_turfs_length) - last_share_check() + our_air.share(G, adjacent_turfs_length) + LAST_SHARE_CHECK - air.react() + our_air.react(src) update_visuals() - if(air.temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) - hotspot_expose(air.temperature, CELL_VOLUME) - for(var/atom/movable/item in src) - item.temperature_expose(air, air.temperature, CELL_VOLUME) - temperature_expose(air, air.temperature, CELL_VOLUME) + var/remove = TRUE + if(our_air.temperature > MINIMUM_TEMPERATURE_START_SUPERCONDUCTION) + if(consider_superconductivity(starting = 1)) + remove = FALSE - if(air.temperature > MINIMUM_TEMPERATURE_START_SUPERCONDUCTION) - if(consider_superconductivity(starting = 1)) - remove = 0 - - if (atmos_cooldown > EXCITED_GROUP_DISMANTLE_CYCLES*2) - SSair.remove_from_active(src) - if(!our_excited_group && remove == 1) + if ((!our_excited_group && remove) || (cached_atmos_cooldown > (EXCITED_GROUP_DISMANTLE_CYCLES * 2))) SSair.remove_from_active(src) - -/turf/open/proc/share_air(turf/open/T, fire_count, adjacent_turfs_length) - if(T.current_cycle < fire_count) - var/difference = air.share(T.air, adjacent_turfs_length) - if(difference) - if(difference > 0) - consider_pressure_difference(T, difference) - else - T.consider_pressure_difference(src, -difference) - last_share_check() + atmos_cooldown = cached_atmos_cooldown //////////////////////////SPACEWIND///////////////////////////// @@ -239,18 +251,7 @@ pressure_direction = get_dir(src, T) pressure_difference = difference -/turf/open/proc/last_share_check() - if(air.last_share > MINIMUM_AIR_TO_SUSPEND) - excited_group.reset_cooldowns() - atmos_cooldown = 0 - else if(air.last_share > MINIMUM_MOLES_DELTA_TO_MOVE) - excited_group.dismantle_cooldown = 0 - atmos_cooldown = 0 - -/turf/proc/high_pressure_movements() - return - -/turf/open/high_pressure_movements() +/turf/open/proc/high_pressure_movements() for(var/atom/movable/M in src) M.experience_pressure_difference(pressure_difference, pressure_direction) @@ -363,7 +364,7 @@ /turf/open/conductivity_directions() if(blocks_air) return ..() - for(var/direction in cardinal) + for(var/direction in GLOB.cardinal) var/turf/T = get_step(src, direction) if(!(T in atmos_adjacent_turfs) && !(atmos_supeconductivity & direction)) . |= direction @@ -392,7 +393,7 @@ if(conductivity_directions) //Conduct with tiles around me - for(var/direction in cardinal) + for(var/direction in GLOB.cardinal) if(conductivity_directions & direction) var/turf/neighbor = get_step(src,direction) diff --git a/code/modules/atmospherics/gasmixtures/gas_mixture.dm b/code/modules/atmospherics/gasmixtures/gas_mixture.dm index e93dedd232..f5eb898163 100644 --- a/code/modules/atmospherics/gasmixtures/gas_mixture.dm +++ b/code/modules/atmospherics/gasmixtures/gas_mixture.dm @@ -6,30 +6,24 @@ What are the archived variables for? #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 */ -var/list/meta_gas_info = meta_gas_list() //see ATMOSPHERICS/gas_types.dm -var/list/gaslist_cache = null -/proc/gaslist(id) - var/list/cached_gas +GLOBAL_LIST_INIT(meta_gas_info, meta_gas_list()) //see ATMOSPHERICS/gas_types.dm +GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) - //only instantiate the first time it's needed - if(!gaslist_cache) - gaslist_cache = new(meta_gas_info.len) +/proc/init_gaslist_cache() + . = list() + for(var/id in GLOB.meta_gas_info) + var/list/cached_gas = new(3) - //only setup the individual lists the first time they're needed - if(!gaslist_cache[id]) - if(!meta_gas_info[id]) - CRASH("Gas [id] does not exist!") - cached_gas = new(3) - gaslist_cache[id] = cached_gas + .[id] = cached_gas cached_gas[MOLES] = 0 cached_gas[ARCHIVE] = 0 - cached_gas[GAS_META] = meta_gas_info[id] - else - cached_gas = gaslist_cache[id] - //Copy() it because only GAS_META is static - return cached_gas.Copy() + cached_gas[GAS_META] = GLOB.meta_gas_info[id] + +#define GASLIST(id, out_list)\ + var/list/tmp_gaslist = GLOB.gaslist_cache[id];\ + out_list = tmp_gaslist.Copy(); /datum/gas_mixture var/list/gases @@ -37,17 +31,15 @@ var/list/gaslist_cache = null var/tmp/temperature_archived var/volume //liters var/last_share - var/tmp/fuel_burnt - var/datum/holder + var/list/reaction_results /datum/gas_mixture/New(volume = CELL_VOLUME) - ..() gases = new temperature = 0 temperature_archived = 0 src.volume = volume last_share = 0 - fuel_burnt = 0 + reaction_results = new //listmos procs @@ -57,7 +49,7 @@ var/list/gaslist_cache = null var/cached_gases = gases if(cached_gases[gas_id]) return - cached_gases[gas_id] = gaslist(gas_id) + GASLIST(gas_id, cached_gases[gas_id]) //assert_gases(args) - shorthand for calling assert_gas() once for each gas type. /datum/gas_mixture/proc/assert_gases() @@ -68,12 +60,13 @@ var/list/gaslist_cache = null //gas list for this id. This can clobber existing gases. //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) + GASLIST(gas_id, gases[gas_id]) //add_gases(args) - shorthand for calling add_gas() once for each gas_type. /datum/gas_mixture/proc/add_gases() + var/cached_gases = gases for(var/id in args) - add_gas(id) + GASLIST(id, cached_gases[id]) //garbage_collect() - removes any gas list which is empty. //If called with a list as an argument, only removes gas lists with IDs from that list. @@ -91,23 +84,33 @@ var/list/gaslist_cache = null var/list/cached_gases = gases . = 0 for(var/id in cached_gases) - . += cached_gases[id][MOLES] * cached_gases[id][GAS_META][META_GAS_SPECIFIC_HEAT] + var/gas_data = cached_gases[id] + . += gas_data[MOLES] * gas_data[GAS_META][META_GAS_SPECIFIC_HEAT] /datum/gas_mixture/proc/heat_capacity_archived() //joules per kelvin var/list/cached_gases = gases . = 0 for(var/id in cached_gases) - . += cached_gases[id][ARCHIVE] * cached_gases[id][GAS_META][META_GAS_SPECIFIC_HEAT] + var/gas_data = cached_gases[id] + . += gas_data[ARCHIVE] * gas_data[GAS_META][META_GAS_SPECIFIC_HEAT] -/datum/gas_mixture/proc/total_moles() //moles - var/list/cached_gases = gases - . = 0 - for(var/id in cached_gases) - . += cached_gases[id][MOLES] +//prefer this in performance critical areas +#define TOTAL_MOLES(cached_gases, out_var)\ + out_var = 0;\ + for(var/total_moles_id in cached_gases){\ + out_var += cached_gases[total_moles_id][MOLES];\ + } + +/datum/gas_mixture/proc/total_moles() + var/cached_gases = gases + TOTAL_MOLES(cached_gases, .) /datum/gas_mixture/proc/return_pressure() //kilopascals if(volume > 0) // to prevent division by zero - return total_moles() * R_IDEAL_GAS_EQUATION * temperature / volume + var/cached_gases = gases + TOTAL_MOLES(cached_gases, .) + . *= R_IDEAL_GAS_EQUATION * temperature / volume + return return 0 /datum/gas_mixture/proc/return_temperature() //kelvins @@ -119,149 +122,6 @@ var/list/gaslist_cache = null /datum/gas_mixture/proc/thermal_energy() //joules return temperature * heat_capacity() -//Procedures used for very specific events - -/datum/gas_mixture/proc/react(atom/dump_location) - var/list/cached_gases = 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(cached_gases["agent_b"] && temperature > 900 && cached_gases["plasma"] && cached_gases["co2"]) - //agent b converts hot co2 to o2 (endothermic) - if(cached_gases["plasma"][MOLES] > MINIMUM_HEAT_CAPACITY && cached_gases["co2"][MOLES] > MINIMUM_HEAT_CAPACITY) - var/reaction_rate = min(cached_gases["co2"][MOLES]*0.75, cached_gases["plasma"][MOLES]*0.25, cached_gases["agent_b"][MOLES]*0.05) - - cached_gases["co2"][MOLES] -= reaction_rate - - assert_gas("o2") //only need to assert oxygen, as this reaction doesn't occur without the other gases existing - cached_gases["o2"][MOLES] += reaction_rate - - cached_gases["agent_b"][MOLES] -= reaction_rate*0.05 - - temperature -= (reaction_rate*20000)/heat_capacity() - - garbage_collect() - - reacting = 1 - /* - if(thermal_energy() > (PLASMA_BINDING_ENERGY*10)) - if(cached_gases["plasma"] && cached_gases["co2"] && cached_gases["plasma"][MOLES] > MINIMUM_HEAT_CAPACITY && cached_gases["co2"][MOLES] > MINIMUM_HEAT_CAPACITY && (cached_gases["plasma"][MOLES]+cached_gases["co2"][MOLES])/total_moles() >= FUSION_PURITY_THRESHOLD)//Fusion wont occur if the level of impurities is too high. - //fusion converts plasma and co2 to o2 and n2 (exothermic) - //to_chat(world, "pre [temperature, [cached_gases["plasma"][MOLES]], [cached_gases["co2"][MOLES]]) - var/old_heat_capacity = heat_capacity() - var/carbon_efficency = min(cached_gases["plasma"][MOLES]/cached_gases["co2"][MOLES],MAX_CARBON_EFFICENCY) - var/reaction_energy = thermal_energy() - var/moles_impurities = total_moles()-(cached_gases["plasma"][MOLES]+cached_gases["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*cached_gases["plasma"][MOLES])/((moles_impurities/carbon_efficency)+2)*10)+((plasma_fused/(moles_impurities/carbon_efficency))*PLASMA_BINDING_ENERGY),0) - - assert_gases("o2", "n2") - - cached_gases["plasma"][MOLES] -= plasma_fused - cached_gases["co2"][MOLES] -= carbon_catalyzed - cached_gases["o2"][MOLES] += oxygen_added - cached_gases["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. - //to_chat(world, "post [temperature], [cached_gases["plasma"][MOLES]], [cached_gases["co2"][MOLES]]) - */ - if(holder) - if(cached_gases["freon"]) - if(cached_gases["freon"][MOLES] >= MOLES_PLASMA_VISIBLE) - if(holder.freon_gas_act()) - cached_gases["freon"][MOLES] -= MOLES_PLASMA_VISIBLE - - if(cached_gases["water_vapor"]) - if(cached_gases["water_vapor"][MOLES] >= MOLES_PLASMA_VISIBLE) - if(holder.water_vapor_gas_act()) - cached_gases["water_vapor"][MOLES] -= MOLES_PLASMA_VISIBLE - - fuel_burnt = 0 - if(temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) - //to_chat(world, "pre [temperature], [cached_gases["o2"][MOLES]], [cached_gases["plasma"][MOLES]]") - if(fire()) - reacting = 1 - //to_chat(world, "post [temperature], [cached_gases["o2"][MOLES]], [cached_gases["plasma"][MOLES]]") - - return reacting - -/datum/gas_mixture/proc/fire() - //combustion of plasma and volatile fuel, which both act as hydrocarbons (exothermic) - var/energy_released = 0 - var/old_heat_capacity = heat_capacity() - var/list/cached_gases = gases //this speeds things up because accessing datum vars is slow - - //General volatile gas burn - if(cached_gases["v_fuel"] && cached_gases["v_fuel"][MOLES]) - var/burned_fuel - - if(!cached_gases["o2"]) - burned_fuel = 0 - else if(cached_gases["o2"][MOLES] < cached_gases["v_fuel"][MOLES]) - burned_fuel = cached_gases["o2"][MOLES] - cached_gases["v_fuel"][MOLES] -= burned_fuel - cached_gases["o2"][MOLES] = 0 - else - burned_fuel = cached_gases["v_fuel"][MOLES] - cached_gases["o2"][MOLES] -= cached_gases["v_fuel"][MOLES] - - if(burned_fuel) - energy_released += FIRE_CARBON_ENERGY_RELEASED * burned_fuel - - assert_gas("co2") - cached_gases["co2"][MOLES] += burned_fuel - - fuel_burnt += burned_fuel - - //Handle plasma burning - if(cached_gases["plasma"] && cached_gases["plasma"][MOLES] > MINIMUM_HEAT_CAPACITY) - var/plasma_burn_rate = 0 - var/oxygen_burn_rate = 0 - //more plasma released at higher temperatures - var/temperature_scale - if(temperature > PLASMA_UPPER_TEMPERATURE) - temperature_scale = 1 - else - temperature_scale = (temperature-PLASMA_MINIMUM_BURN_TEMPERATURE)/(PLASMA_UPPER_TEMPERATURE-PLASMA_MINIMUM_BURN_TEMPERATURE) - if(temperature_scale > 0) - assert_gas("o2") - oxygen_burn_rate = OXYGEN_BURN_RATE_BASE - temperature_scale - if(cached_gases["o2"][MOLES] > cached_gases["plasma"][MOLES]*PLASMA_OXYGEN_FULLBURN) - plasma_burn_rate = (cached_gases["plasma"][MOLES]*temperature_scale)/PLASMA_BURN_RATE_DELTA - else - plasma_burn_rate = (temperature_scale*(cached_gases["o2"][MOLES]/PLASMA_OXYGEN_FULLBURN))/PLASMA_BURN_RATE_DELTA - if(plasma_burn_rate > MINIMUM_HEAT_CAPACITY) - assert_gas("co2") - cached_gases["plasma"][MOLES] = QUANTIZE(cached_gases["plasma"][MOLES] - plasma_burn_rate) - cached_gases["o2"][MOLES] = QUANTIZE(cached_gases["o2"][MOLES] - (plasma_burn_rate * oxygen_burn_rate)) - cached_gases["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() - if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) - temperature = (temperature*old_heat_capacity + energy_released)/new_heat_capacity - - return fuel_burnt - /datum/gas_mixture/proc/archive() //Update archived versions of variables //Returns: 1 in all cases @@ -309,6 +169,10 @@ var/list/gaslist_cache = null //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/react(turf/open/dump_location) + //Performs various reactions such as combustion or fusion (LOL) + //Returns: 1 if any reaction took place; 0 otherwise + /datum/gas_mixture/archive() var/list/cached_gases = gases @@ -340,11 +204,12 @@ var/list/gaslist_cache = null return 1 /datum/gas_mixture/remove(amount) - var/sum = total_moles() + var/sum + var/list/cached_gases = gases + TOTAL_MOLES(cached_gases, sum) amount = min(amount, sum) //Can not take more air than tile has! if(amount <= 0) return null - var/list/cached_gases = gases var/datum/gas_mixture/removed = new var/list/removed_gases = removed.gases //accessing datum vars is slower than proc vars @@ -495,7 +360,11 @@ var/list/gaslist_cache = null sharer.garbage_collect(sharer_gases - cached_gases) //the reverse is equally true sharer.after_share(src, atmos_adjacent_turfs) if(temperature_delta > 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) + var/our_moles + TOTAL_MOLES(cached_gases,our_moles) + var/their_moles + TOTAL_MOLES(sharer_gases,their_moles) + var/delta_pressure = temperature_archived*(our_moles + moved_moles) - sharer.temperature_archived*(their_moles - moved_moles) return delta_pressure * R_IDEAL_GAS_EQUATION / volume /datum/gas_mixture/after_share(datum/gas_mixture/sharer, atmos_adjacent_turfs = 4) @@ -521,43 +390,82 @@ var/list/gaslist_cache = null return sharer_temperature //thermal energy of the system (self and sharer) is unchanged -/datum/gas_mixture/compare(datum/gas_mixture/sample, datatype = MOLES, adjacents = 0) +/datum/gas_mixture/compare(datum/gas_mixture/sample) 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) // compare gases from either mixture - 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) + var/gas_moles = cached_gases[id] + gas_moles = gas_moles ? gas_moles[MOLES] : 0 + var/sample_moles = sample_gases[id] + sample_moles = sample_moles ? sample_moles[MOLES] : 0 + var/delta = abs(gas_moles - sample_moles) if(delta > MINIMUM_MOLES_DELTA_TO_MOVE && \ delta > gas_moles * MINIMUM_AIR_RATIO_TO_MOVE) return id - if(total_moles() > MINIMUM_MOLES_DELTA_TO_MOVE) - var/temp - var/sample_temp - - switch(datatype) - if(MOLES) - temp = temperature - sample_temp = sample.temperature - if(ARCHIVE) - temp = temperature_archived - sample_temp = sample.temperature_archived + var/our_moles + TOTAL_MOLES(cached_gases, our_moles) + if(our_moles > MINIMUM_MOLES_DELTA_TO_MOVE) + var/temp = temperature + var/sample_temp = sample.temperature var/temperature_delta = abs(temp - sample_temp) - if((temperature_delta > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) && \ - temperature_delta > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND * temp) + if(temperature_delta > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) return "temp" return "" +/datum/gas_mixture/react(turf/open/dump_location) + . = 0 + if(temperature < TCMB) //just for safety + temperature = TCMB + reaction_results = new + + var/list/cached_gases = gases + var/temp = temperature + var/ener = thermal_energy() + + reaction_loop: + for(var/r in SSair.gas_reactions) + var/datum/gas_reaction/reaction = r + + var/list/min_reqs = reaction.min_requirements.Copy() + if((min_reqs["TEMP"] && temp < min_reqs["TEMP"]) \ + || (min_reqs["ENER"] && ener < min_reqs["ENER"])) + continue + min_reqs -= "TEMP" + min_reqs -= "ENER" + + for(var/id in min_reqs) + if(!cached_gases[id] || cached_gases[id][MOLES] < min_reqs[id]) + continue reaction_loop + //at this point, all minimum requirements for the reaction are satisfied. + + /* currently no reactions have maximum requirements, so we can leave the checks commented out for a slight performance boost + var/list/max_reqs = reaction.max_requirements.Copy() + if((max_reqs["TEMP"] && temp > max_reqs["TEMP"]) \ + || (max_reqs["ENER"] && ener > max_reqs["ENER"])) + continue + max_reqs -= "TEMP" + max_reqs -= "ENER" + + for(var/id in max_reqs) + if(cached_gases[id] && cached_gases[id][MOLES] > max_reqs[id]) + continue reaction_loop + //at this point, all requirements for the reaction are satisfied. we can now react() + */ + + . |= reaction.react(src, dump_location) + if(.) + 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 //eg: //Tox_PP = get_partial_pressure(gas_mixture.toxins) //O2_PP = get_partial_pressure(gas_mixture.oxygen) -//Does handle trace gases! + /datum/gas_mixture/proc/get_breath_partial_pressure(gas_pressure) return (gas_pressure * R_IDEAL_GAS_EQUATION * temperature) / BREATH_VOLUME //inverse diff --git a/code/modules/atmospherics/gasmixtures/gas_types.dm b/code/modules/atmospherics/gasmixtures/gas_types.dm index 74f025e93e..10a9a7f65d 100644 --- a/code/modules/atmospherics/gasmixtures/gas_types.dm +++ b/code/modules/atmospherics/gasmixtures/gas_types.dm @@ -1,4 +1,4 @@ -var/list/hardcoded_gases = list("o2","n2","co2","plasma") //the main four gases, which were at one time hardcoded +GLOBAL_LIST_INIT(hardcoded_gases, list("o2","n2","co2","plasma")) //the main four gases, which were at one time hardcoded /proc/meta_gas_list() . = new /list diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm new file mode 100644 index 0000000000..2884ee0cf0 --- /dev/null +++ b/code/modules/atmospherics/gasmixtures/reactions.dm @@ -0,0 +1,234 @@ +#define NO_REACTION 0 +#define REACTING 1 + +/datum/controller/subsystem/air/var/list/gas_reactions //this is our singleton of all reactions + +/proc/init_gas_reactions() + var/list/reaction_types = list() + for(var/r in subtypesof(/datum/gas_reaction)) + var/datum/gas_reaction/reaction = r + if(!initial(reaction.exclude)) + reaction_types += reaction + reaction_types = sortList(reaction_types, /proc/cmp_gas_reactions) + + . = list() + for(var/path in reaction_types) + . += new path + +/proc/cmp_gas_reactions(datum/gas_reaction/a, datum/gas_reaction/b) //sorts in descending order of priority + return initial(b.priority) - initial(a.priority) + +/datum/gas_reaction + //regarding the requirements lists: the minimum or maximum requirements must be non-zero. + //when in doubt, use MINIMUM_HEAT_CAPACITY. + var/list/min_requirements + var/list/max_requirements + var/exclude = FALSE //do it this way to allow for addition/removal of reactions midmatch in the future + var/priority = 100 //lower numbers are checked/react later than higher numbers. if two reactions have the same priority they may happen in either order + var/name = "reaction" + var/id = "r" + +/datum/gas_reaction/New() + init_reqs() + +/datum/gas_reaction/proc/init_reqs() +/datum/gas_reaction/proc/react(datum/gas_mixture/air, atom/location) + return NO_REACTION + +//agent b: converts hot co2 and agent b to oxygen. requires plasma as a catalyst. endothermic +/datum/gas_reaction/agent_b + priority = 2 + name = "Agent B" + id = "agent_b" + +/datum/gas_reaction/agent_b/init_reqs() + min_requirements = list( + "TEMP" = 900, + "agent_b" = MINIMUM_HEAT_CAPACITY, + "plasma" = MINIMUM_HEAT_CAPACITY, + "co2" = MINIMUM_HEAT_CAPACITY + ) + + +/datum/gas_reaction/agent_b/react(datum/gas_mixture/air) + var/list/cached_gases = air.gases + var/reaction_rate = min(cached_gases["co2"][MOLES]*0.75, cached_gases["plasma"][MOLES]*0.25, cached_gases["agent_b"][MOLES]*0.05) + + cached_gases["co2"][MOLES] -= reaction_rate + cached_gases["agent_b"][MOLES] -= reaction_rate*0.05 + + air.assert_gas("o2") //only need to assert oxygen, as this reaction doesn't occur without the other gases existing + cached_gases["o2"][MOLES] += reaction_rate + + air.temperature -= (reaction_rate*20000)/air.heat_capacity() + + return REACTING + +//freon: does a freezy thing? +/datum/gas_reaction/freon + priority = 1 + name = "Freon" + id = "freon" + +/datum/gas_reaction/freon/init_reqs() + min_requirements = list("freon" = MOLES_PLASMA_VISIBLE) + +/datum/gas_reaction/freon/react(datum/gas_mixture/air, turf/open/location) + . = NO_REACTION + if(location && location.freon_gas_act()) + air.gases["freon"][MOLES] -= MOLES_PLASMA_VISIBLE + . = REACTING + +//water vapor: puts out fires? +/datum/gas_reaction/water_vapor + priority = 1 + name = "Water Vapor" + id = "vapor" + +/datum/gas_reaction/water_vapor/init_reqs() + min_requirements = list("water_vapor" = MOLES_PLASMA_VISIBLE) + +/datum/gas_reaction/water_vapor/react(datum/gas_mixture/air, turf/open/location) + . = NO_REACTION + if(location && location.water_vapor_gas_act()) + air.gases["water_vapor"][MOLES] -= MOLES_PLASMA_VISIBLE + . = REACTING + +//fire: combustion of plasma and volatile fuel (treated as hydrocarbons). creates hotspots. exothermic +/datum/gas_reaction/fire + priority = -1 //fire should ALWAYS be last + name = "Hydrocarbon Combustion" + id = "fire" + +/datum/gas_reaction/fire/init_reqs() + min_requirements = list("TEMP" = FIRE_MINIMUM_TEMPERATURE_TO_EXIST) //doesn't include plasma reqs b/c of volatile fuel stuff - consider finally axing volatile fuel + +/datum/gas_reaction/fire/react(datum/gas_mixture/air, turf/open/location) + var/energy_released = 0 + var/old_heat_capacity = air.heat_capacity() + var/list/cached_gases = air.gases //this speeds things up because accessing datum vars is slow + var/temperature = air.temperature + var/list/cached_results = air.reaction_results + + //to_chat(world, "pre [temperature], [cached_gases["o2"][MOLES]], [cached_gases["plasma"][MOLES]]") + cached_results[id] = 0 + + //General volatile gas burn + if(cached_gases["v_fuel"] && cached_gases["v_fuel"][MOLES]) + var/burned_fuel + if(!cached_gases["o2"]) + burned_fuel = 0 + else if(cached_gases["o2"][MOLES] < cached_gases["v_fuel"][MOLES]) + burned_fuel = cached_gases["o2"][MOLES] + cached_gases["v_fuel"][MOLES] -= burned_fuel + cached_gases["o2"][MOLES] = 0 + else + burned_fuel = cached_gases["v_fuel"][MOLES] + cached_gases["o2"][MOLES] -= cached_gases["v_fuel"][MOLES] + + if(burned_fuel) + energy_released += FIRE_CARBON_ENERGY_RELEASED * burned_fuel + + air.assert_gas("co2") + cached_gases["co2"][MOLES] += burned_fuel + + cached_results[id] += burned_fuel + + //Handle plasma burning + if(cached_gases["plasma"] && cached_gases["plasma"][MOLES] > MINIMUM_HEAT_CAPACITY) + var/plasma_burn_rate = 0 + var/oxygen_burn_rate = 0 + //more plasma released at higher temperatures + var/temperature_scale + if(temperature > PLASMA_UPPER_TEMPERATURE) + temperature_scale = 1 + else + temperature_scale = (temperature-PLASMA_MINIMUM_BURN_TEMPERATURE)/(PLASMA_UPPER_TEMPERATURE-PLASMA_MINIMUM_BURN_TEMPERATURE) + if(temperature_scale > 0) + air.assert_gas("o2") + oxygen_burn_rate = OXYGEN_BURN_RATE_BASE - temperature_scale + if(cached_gases["o2"][MOLES] > cached_gases["plasma"][MOLES]*PLASMA_OXYGEN_FULLBURN) + plasma_burn_rate = (cached_gases["plasma"][MOLES]*temperature_scale)/PLASMA_BURN_RATE_DELTA + else + plasma_burn_rate = (temperature_scale*(cached_gases["o2"][MOLES]/PLASMA_OXYGEN_FULLBURN))/PLASMA_BURN_RATE_DELTA + if(plasma_burn_rate > MINIMUM_HEAT_CAPACITY) + air.assert_gas("co2") + cached_gases["plasma"][MOLES] = QUANTIZE(cached_gases["plasma"][MOLES] - plasma_burn_rate) + cached_gases["o2"][MOLES] = QUANTIZE(cached_gases["o2"][MOLES] - (plasma_burn_rate * oxygen_burn_rate)) + cached_gases["co2"][MOLES] += plasma_burn_rate + + energy_released += FIRE_PLASMA_ENERGY_RELEASED * (plasma_burn_rate) + + cached_results[id] += (plasma_burn_rate)*(1+oxygen_burn_rate) + + if(energy_released > 0) + var/new_heat_capacity = air.heat_capacity() + if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) + air.temperature = (temperature*old_heat_capacity + energy_released)/new_heat_capacity + + //to_chat(world, "post [temperature], [cached_gases["o2"][MOLES]], [cached_gases["plasma"][MOLES]]") + + //let the floor know a fire is happening + if(istype(location)) + temperature = air.temperature + if(temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) + location.hotspot_expose(temperature, CELL_VOLUME) + for(var/I in location) + var/atom/movable/item = I + item.temperature_expose(air, temperature, CELL_VOLUME) + location.temperature_expose(air, temperature, CELL_VOLUME) + + return cached_results[id] ? REACTING : NO_REACTION + +//fusion: a terrible idea that was fun to try. turns co2 and plasma into REALLY HOT oxygen and nitrogen. super exothermic lol +/datum/gas_reaction/fusion + exclude = TRUE + priority = 2 + name = "Plasmic Fusion" + id = "fusion" + +/datum/gas_reaction/fusion/init_reqs() + min_requirements = list( + "ENER" = PLASMA_BINDING_ENERGY * 10, + "plasma" = MINIMUM_HEAT_CAPACITY, + "co2" = MINIMUM_HEAT_CAPACITY + ) + +/datum/gas_reaction/fusion/react(datum/gas_mixture/air) + var/list/cached_gases = air.gases + var/temperature = air.temperature + + if((cached_gases["plasma"][MOLES]+cached_gases["co2"][MOLES])/air.total_moles() < FUSION_PURITY_THRESHOLD) + //Fusion wont occur if the level of impurities is too high. + return NO_REACTION + + //to_chat(world, "pre [temperature, [cached_gases["plasma"][MOLES]], [cached_gases["co2"][MOLES]]) + var/old_heat_capacity = air.heat_capacity() + var/carbon_efficency = min(cached_gases["plasma"][MOLES]/cached_gases["co2"][MOLES],MAX_CARBON_EFFICENCY) + var/reaction_energy = air.thermal_energy() + var/moles_impurities = air.total_moles()-(cached_gases["plasma"][MOLES]+cached_gases["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)-(air.thermal_energy()/PLASMA_BINDING_ENERGY) + + reaction_energy = max(reaction_energy+((carbon_efficency*cached_gases["plasma"][MOLES])/((moles_impurities/carbon_efficency)+2)*10)+((plasma_fused/(moles_impurities/carbon_efficency))*PLASMA_BINDING_ENERGY),0) + + air.assert_gases("o2", "n2") + + cached_gases["plasma"][MOLES] -= plasma_fused + cached_gases["co2"][MOLES] -= carbon_catalyzed + cached_gases["o2"][MOLES] += oxygen_added + cached_gases["n2"][MOLES] += nitrogen_added + + if(reaction_energy > 0) + var/new_heat_capacity = air.heat_capacity() + if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) + air.temperature = max(((temperature*old_heat_capacity + reaction_energy)/new_heat_capacity),TCMB) + //Prevents whatever mechanism is causing it to hit negative temperatures. + //to_chat(world, "post [temperature], [cached_gases["plasma"][MOLES]], [cached_gases["co2"][MOLES]]) + return REACTING + +#undef REACTING +#undef NO_REACTION diff --git a/code/modules/atmospherics/gasmixtures/space_mixture.dm b/code/modules/atmospherics/gasmixtures/space_mixture.dm index 5134087a38..5b590e4626 100644 --- a/code/modules/atmospherics/gasmixtures/space_mixture.dm +++ b/code/modules/atmospherics/gasmixtures/space_mixture.dm @@ -41,9 +41,6 @@ /datum/gas_mixture/space/react() return 0 //we're immutable. -/datum/gas_mixture/space/fire() - return 0 //we're immutable. - /datum/gas_mixture/space/copy() return new /datum/gas_mixture/space //we're immutable, so we can just return a new instance. diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index 8bb429f29b..5c197332d1 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -54,7 +54,7 @@ idle_power_usage = 4 active_power_usage = 8 power_channel = ENVIRON - req_access = list(access_atmospherics) + req_access = list(GLOB.access_atmospherics) obj_integrity = 250 max_integrity = 250 integrity_failure = 80 @@ -158,7 +158,7 @@ return UI_CLOSE /obj/machinery/airalarm/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/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "airalarm", name, 440, 650, master_ui, state) @@ -277,11 +277,11 @@ thresholds[thresholds.len]["settings"] += list(list("env" = "temperature", "val" = "max1", "selected" = selected.max1)) thresholds[thresholds.len]["settings"] += list(list("env" = "temperature", "val" = "max2", "selected" = selected.max2)) - for(var/gas_id in meta_gas_info) + for(var/gas_id in GLOB.meta_gas_info) if(!(gas_id in TLV)) // We're not interested in this gas, it seems. continue selected = TLV[gas_id] - thresholds += list(list("name" = meta_gas_info[gas_id][META_GAS_NAME], "settings" = list())) + thresholds += list(list("name" = GLOB.meta_gas_info[gas_id][META_GAS_NAME], "settings" = list())) thresholds[thresholds.len]["settings"] += list(list("env" = gas_id, "val" = "min2", "selected" = selected.min2)) thresholds[thresholds.len]["settings"] += list(list("env" = gas_id, "val" = "min1", "selected" = selected.min1)) thresholds[thresholds.len]["settings"] += list(list("env" = gas_id, "val" = "max1", "selected" = selected.max1)) @@ -389,7 +389,7 @@ /obj/machinery/airalarm/proc/set_frequency(new_frequency) SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = SSradio.add_object(src, frequency, RADIO_TO_AIRALARM) + radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_TO_AIRALARM) /obj/machinery/airalarm/proc/send_signal(target, list/command)//sends signal 'command' to 'target'. Returns 0 if no radio connection, 1 otherwise if(!radio_connection) @@ -403,7 +403,7 @@ signal.data["tag"] = target signal.data["sigtype"] = "command" - radio_connection.post_signal(src, signal, RADIO_FROM_AIRALARM) + radio_connection.post_signal(src, signal, GLOB.RADIO_FROM_AIRALARM) // to_chat(world, text("Signal [] Broadcasted to []", command, target)) return 1 @@ -730,3 +730,14 @@ I.obj_integrity = I.max_integrity * 0.5 new /obj/item/stack/cable_coil(loc, 3) qdel(src) + +#undef AALARM_MODE_SCRUBBING +#undef AALARM_MODE_VENTING +#undef AALARM_MODE_PANIC +#undef AALARM_MODE_REPLACEMENT +#undef AALARM_MODE_OFF +#undef AALARM_MODE_FLOOD +#undef AALARM_MODE_SIPHON +#undef AALARM_MODE_CONTAMINATED +#undef AALARM_MODE_REFILL +#undef AALARM_REPORT_TIMEOUT \ No newline at end of file diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index 913d314ec5..6044b6a1a4 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -67,7 +67,7 @@ Pipelines + Other Objects -> Pipe network node_connects.len = device_type for(DEVICE_TYPE_LOOP) - for(var/D in cardinal) + for(var/D in GLOB.cardinal) if(D & GetInitDirections()) if(D in node_connects) continue @@ -170,7 +170,7 @@ Pipelines + Other Objects -> Pipe network var/fuck_you_dir = get_dir(src, user) // Because fuck you... if(!fuck_you_dir) - fuck_you_dir = pick(cardinal) + fuck_you_dir = pick(GLOB.cardinal) var/turf/target = get_edge_target_turf(user, fuck_you_dir) var/range = pressures/250 var/speed = range/5 @@ -212,7 +212,7 @@ Pipelines + Other Objects -> Pipe network if(can_unwrench) add_atom_colour(obj_color, FIXED_COLOUR_PRIORITY) pipe_color = obj_color - var/turf/T = loc + var/turf/T = get_turf(src) level = T.intact ? 2 : 1 atmosinit() var/list/nodes = pipeline_expansion() @@ -245,7 +245,7 @@ Pipelines + Other Objects -> Pipe network var/obj/machinery/atmospherics/target_move = findConnecting(direction) if(target_move) if(target_move.can_crawl_through()) - if(is_type_in_list(target_move, ventcrawl_machinery)) + if(is_type_in_list(target_move, GLOB.ventcrawl_machinery)) user.forceMove(target_move.loc) //handle entering and so on. user.visible_message("You hear something squeezing through the ducts...","You climb out the ventilation system.") else @@ -258,7 +258,7 @@ Pipelines + Other Objects -> Pipe network user.last_played_vent = world.time playsound(src, 'sound/machines/ventcrawl.ogg', 50, 1, -3) else - if((direction & initialize_directions) || is_type_in_list(src, ventcrawl_machinery) && can_crawl_through()) //if we move in a way the pipe can connect, but doesn't - or we're in a vent + if((direction & initialize_directions) || is_type_in_list(src, GLOB.ventcrawl_machinery) && can_crawl_through()) //if we move in a way the pipe can connect, but doesn't - or we're in a vent user.forceMove(src.loc) user.visible_message("You hear something squeezing through the ducts...","You climb out the ventilation system.") user.canmove = 0 @@ -267,7 +267,7 @@ Pipelines + Other Objects -> Pipe network /obj/machinery/atmospherics/AltClick(mob/living/L) - if(is_type_in_list(src, ventcrawl_machinery)) + if(is_type_in_list(src, GLOB.ventcrawl_machinery)) L.handle_ventcrawl(src) return ..() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm index 3c789a5fc4..fe4fdeb14c 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm @@ -126,7 +126,7 @@ Acts like a normal vent, but has an input AND output. SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = SSradio.add_object(src, frequency, filter = RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, filter = GLOB.RADIO_ATMOSIA) /obj/machinery/atmospherics/components/binary/dp_vent_pump/proc/broadcast_status() if(!radio_connection) @@ -147,7 +147,7 @@ Acts like a normal vent, but has an input AND output. "external" = external_pressure_bound, "sigtype" = "status" ) - radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) + radio_connection.post_signal(src, signal, filter = GLOB.RADIO_ATMOSIA) return 1 diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm index fe0716a901..6ddeca6378 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm @@ -70,7 +70,7 @@ Passive gate is similar to the regular pump except: SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = SSradio.add_object(src, frequency, filter = RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, filter = GLOB.RADIO_ATMOSIA) /obj/machinery/atmospherics/components/binary/passive_gate/proc/broadcast_status() if(!radio_connection) @@ -88,12 +88,12 @@ Passive gate is similar to the regular pump except: "sigtype" = "status" ) - radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) + radio_connection.post_signal(src, signal, filter = GLOB.RADIO_ATMOSIA) return 1 /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) + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.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, master_ui, state) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm index 8b0faba51c..85bdd68245 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm @@ -77,7 +77,7 @@ Thus, the two variables affect pump operation are set in New(): SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = SSradio.add_object(src, frequency, filter = RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, filter = GLOB.RADIO_ATMOSIA) /obj/machinery/atmospherics/components/binary/pump/proc/broadcast_status() if(!radio_connection) @@ -95,12 +95,12 @@ Thus, the two variables affect pump operation are set in New(): "sigtype" = "status" ) - radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) + radio_connection.post_signal(src, signal, filter = GLOB.RADIO_ATMOSIA) return 1 /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) + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.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, master_ui, state) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm index f8d517eb61..eb9fd1d453 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm @@ -95,7 +95,7 @@ Thus, the two variables affect pump operation are set in New(): return 1 /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) + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.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, master_ui, state) diff --git a/code/modules/atmospherics/machinery/components/components_base.dm b/code/modules/atmospherics/machinery/components/components_base.dm index 83f5e2cb6a..9bf5f276f5 100644 --- a/code/modules/atmospherics/machinery/components/components_base.dm +++ b/code/modules/atmospherics/machinery/components/components_base.dm @@ -31,7 +31,7 @@ Iconnery /obj/machinery/atmospherics/components/proc/icon_addbroken(var/connected = 0) var/unconnected = (~connected) & initialize_directions - for(var/direction in cardinal) + for(var/direction in GLOB.cardinal) if(unconnected & direction) underlays += getpipeimage('icons/obj/atmospherics/components/binary_devices.dmi', "pipe_exposed", direction) diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm index e8edd9b2a2..4b9c2c710f 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm @@ -17,7 +17,7 @@ SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_ATMOSIA) /obj/machinery/atmospherics/components/trinary/filter/Destroy() if(SSradio) @@ -26,7 +26,7 @@ /obj/machinery/atmospherics/components/trinary/filter/update_icon() cut_overlays() - for(var/direction in cardinal) + for(var/direction in GLOB.cardinal) if(direction & initialize_directions) var/obj/machinery/atmospherics/node = findConnecting(direction) if(node) @@ -113,7 +113,7 @@ return ..() /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) + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.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, 475, 155, master_ui, state) @@ -154,9 +154,9 @@ filter_type = "" var/filter_name = "nothing" var/gas = params["mode"] - if(gas in meta_gas_info) + if(gas in GLOB.meta_gas_info) filter_type = gas - filter_name = meta_gas_info[gas][META_GAS_NAME] + filter_name = GLOB.meta_gas_info[gas][META_GAS_NAME] investigate_log("was set to filter [filter_name] by [key_name(usr)]", "atmos") . = TRUE update_icon() diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm index 97322d3d50..ed168c7153 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm @@ -19,7 +19,7 @@ /obj/machinery/atmospherics/components/trinary/mixer/update_icon() cut_overlays() - for(var/direction in cardinal) + for(var/direction in GLOB.cardinal) if(direction & initialize_directions) var/obj/machinery/atmospherics/node = findConnecting(direction) if(node) @@ -117,7 +117,7 @@ return TRUE /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) + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.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, 370, 165, master_ui, state) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index 150449d214..2a67b5fe13 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -12,7 +12,7 @@ state_open = FALSE var/autoeject = FALSE var/volume = 100 - var/running_bob_animation = 0 + var/running_bob_animation = FALSE var/efficiency = 1 var/sleep_factor = 750 @@ -106,7 +106,7 @@ icon_state = "pod1" var/up = 0 //used to see if we are going up or down, 1 is down, 2 is up spawn(0) // Without this, the icon update will block. The new thread will die once the occupant leaves. - running_bob_animation = 1 + running_bob_animation = TRUE while(occupant) overlays -= "lid1" //have to remove the overlays first, to force an update- remove cloning pod overlay overlays -= pickle //remove mob overlay @@ -134,7 +134,7 @@ sleep(7) //don't want to jiggle violently, just slowly bob return - running_bob_animation = 0 + running_bob_animation = FALSE else icon_state = "pod1" overlays += "lid0" //have to remove the overlays first, to force an update- remove cloning pod overlay @@ -160,7 +160,7 @@ playsound(T, 'sound/machines/cryo_warning.ogg', volume, 1) // Bug the doctors. radio.talk_into(src, "Patient fully restored", radio_channel) if(autoeject) // Eject if configured. - radio.talk_into(src, "Auto ejecting patient now", radio_channel) + radio.talk_into(src, "Auto ejecting patient now", radio_channel,get_spans(), get_default_language()) open_machine() return else if(occupant.stat == DEAD) // We don't bother with dead people. @@ -280,7 +280,7 @@ return ..() /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) + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.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, master_ui, state) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index ca5e496037..8761211f72 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -146,7 +146,7 @@ return UI_CLOSE /obj/machinery/atmospherics/components/unary/thermomachine/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/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "thermomachine", name, 400, 240, master_ui, state) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index d5a37fa150..8c43a28da4 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -7,7 +7,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump name = "air vent" - desc = "Has a valve and pump attached to it" + desc = "Has a valve and pump attached to it." icon_state = "vent_map" use_power = 1 can_unwrench = 1 @@ -178,8 +178,8 @@ /obj/machinery/atmospherics/components/unary/vent_pump/atmosinit() //some vents work his own spesial way - radio_filter_in = frequency==1439?(RADIO_FROM_AIRALARM):null - radio_filter_out = frequency==1439?(RADIO_TO_AIRALARM):null + radio_filter_in = frequency==1439?(GLOB.RADIO_FROM_AIRALARM):null + radio_filter_out = frequency==1439?(GLOB.RADIO_TO_AIRALARM):null if(frequency) set_frequency(frequency) broadcast_status() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm index fea01d9868..baa3a2e85f 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -3,7 +3,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber name = "air scrubber" - desc = "Has a valve and pump attached to it" + desc = "Has a valve and pump attached to it." icon_state = "scrub_map" use_power = 1 idle_power_usage = 10 @@ -142,8 +142,8 @@ return 1 /obj/machinery/atmospherics/components/unary/vent_scrubber/atmosinit() - radio_filter_in = frequency==initial(frequency)?(RADIO_FROM_AIRALARM):null - radio_filter_out = frequency==initial(frequency)?(RADIO_TO_AIRALARM):null + radio_filter_in = frequency==initial(frequency)?(GLOB.RADIO_FROM_AIRALARM):null + radio_filter_out = frequency==initial(frequency)?(GLOB.RADIO_TO_AIRALARM):null if(frequency) set_frequency(frequency) broadcast_status() diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm index 38cac26787..67b1d0d569 100644 --- a/code/modules/atmospherics/machinery/datum_pipeline.dm +++ b/code/modules/atmospherics/machinery/datum_pipeline.dm @@ -29,8 +29,6 @@ reconcile_air() update = air.react() -var/pipenetwarnings = 10 - /datum/pipeline/proc/build_pipeline(obj/machinery/atmospherics/base) var/volume = 0 if(istype(base, /obj/machinery/atmospherics/pipe)) @@ -44,7 +42,6 @@ var/pipenetwarnings = 10 addMachineryMember(base) if(!air) air = new - air.holder = src var/list/possible_expansions = list(base) while(possible_expansions.len>0) for(var/obj/machinery/atmospherics/borderline in possible_expansions) @@ -58,6 +55,7 @@ var/pipenetwarnings = 10 if(!members.Find(item)) if(item.parent) + var/static/pipenetwarnings = 10 if(pipenetwarnings > 0) warning("build_pipeline(): [item.type] added to a pipenet while still having one. (pipes leading to the same spot stacking in one turf) Nearby: ([item.x], [item.y], [item.z])") pipenetwarnings -= 1 @@ -246,4 +244,3 @@ var/pipenetwarnings = 10 var/list/G_gases = G.gases for(var/id in G_gases) G_gases[id][MOLES] *= G.volume/total_gas_mixture.volume - diff --git a/code/modules/atmospherics/machinery/other/miner.dm b/code/modules/atmospherics/machinery/other/miner.dm new file mode 100644 index 0000000000..8b55ce14fc --- /dev/null +++ b/code/modules/atmospherics/machinery/other/miner.dm @@ -0,0 +1,182 @@ + +#define GASMINER_POWER_NONE 0 +#define GASMINER_POWER_STATIC 1 +#define GASMINER_POWER_MOLES 2 //Scaled from here on down. +#define GASMINER_POWER_KPA 3 +#define GASMINER_POWER_FULLSCALE 4 + +/obj/machinery/atmospherics/miner + name = "gas miner" + desc = "Gasses mined from the gas giant below (above?) flow out through this massive vent." + icon = 'icons/obj/atmospherics/components/miners.dmi' + icon_state = "miner" + anchored = TRUE + density = FALSE + resistance_flags = INDESTRUCTIBLE|ACID_PROOF|FIRE_PROOF + var/spawn_id = null + var/spawn_temp = T20C + var/spawn_mol = MOLES_CELLSTANDARD * 10 + var/max_ext_mol = INFINITY + var/max_ext_kpa = 6500 + var/overlay_color = "#FFFFFF" + var/active = TRUE + var/power_draw = 0 + var/power_draw_static = 2000 + var/power_draw_dynamic_mol_coeff = 5 //DO NOT USE DYNAMIC SETTINGS UNTIL SOMEONE MAKES A USER INTERFACE/CONTROLLER FOR THIS! + var/power_draw_dynamic_kpa_coeff = 0.5 + var/broken = FALSE + var/broken_message = "ERROR" + idle_power_usage = 150 + active_power_usage = 2000 + +/obj/machinery/atmospherics/miner/examine(mob/user) + ..() + if(broken) + to_chat(user, "Its debug output is printing \"[broken_message]\"") + +/obj/machinery/atmospherics/miner/proc/check_operation() + if(!active) + return FALSE + var/turf/T = get_turf(src) + if(!isopenturf(T)) + broken_message = "VENT BLOCKED" + broken = TRUE + return FALSE + var/turf/open/OT = T + if(OT.planetary_atmos) + broken_message = "DEVICE NOT ENCLOSED IN A PRESSURIZED ENVIRONMENT" + broken = TRUE + return FALSE + if(isspaceturf(T)) + broken_message = "AIR VENTING TO SPACE" + broken = TRUE + return FALSE + var/datum/gas_mixture/G = OT.return_air() + if(G.return_pressure() > (max_ext_kpa - ((spawn_mol*spawn_temp*R_IDEAL_GAS_EQUATION)/(CELL_VOLUME)))) + broken_message = "EXTERNAL PRESSURE OVER THRESHOLD" + broken = TRUE + return FALSE + if(G.total_moles() > max_ext_mol) + broken_message = "EXTERNAL AIR CONCENTRATION OVER THRESHOLD" + broken = TRUE + return FALSE + if(broken) + broken = FALSE + broken_message = "" + return TRUE + +/obj/machinery/atmospherics/miner/proc/update_power() + if(!active) + active_power_usage = idle_power_usage + var/turf/T = get_turf(src) + var/datum/gas_mixture/G = T.return_air() + var/P = G.return_pressure() + switch(power_draw) + if(GASMINER_POWER_NONE) + active_power_usage = 0 + if(GASMINER_POWER_STATIC) + active_power_usage = power_draw_static + if(GASMINER_POWER_MOLES) + active_power_usage = spawn_mol * power_draw_dynamic_mol_coeff + if(GASMINER_POWER_KPA) + active_power_usage = P * power_draw_dynamic_kpa_coeff + if(GASMINER_POWER_FULLSCALE) + active_power_usage = (spawn_mol * power_draw_dynamic_mol_coeff) + (P * power_draw_dynamic_kpa_coeff) + +/obj/machinery/atmospherics/miner/proc/do_use_power(amount) + var/turf/T = get_turf(src) + if(T && istype(T)) + var/obj/structure/cable/C = T.get_cable_node() //check if we have a node cable on the machine turf, the first found is picked + if(C && C.powernet && (C.powernet.avail > amount)) + C.powernet.load += amount + return TRUE + if(powered()) + use_power(amount) + return TRUE + return FALSE + +/obj/machinery/atmospherics/miner/update_icon() + overlays.Cut() + if(broken) + var/image/A = image(icon, "broken") + add_overlay(A) + else if(active) + var/image/A = image(icon, "on") + A.color = overlay_color + add_overlay(A) + +/obj/machinery/atmospherics/miner/process() + update_power() + update_icon() + check_operation() + if(active && !broken) + if(isnull(spawn_id)) + return FALSE + if(do_use_power(active_power_usage)) + mine_gas() + +/obj/machinery/atmospherics/miner/proc/mine_gas() + var/turf/open/O = get_turf(src) + if(!isopenturf(O)) + return FALSE + var/datum/gas_mixture/merger = new + merger.assert_gas(spawn_id) + merger.gases[spawn_id][MOLES] = (spawn_mol) + merger.temperature = spawn_temp + O.assume_air(merger) + SSair.add_to_active(O) + +/obj/machinery/atmospherics/miner/attack_ai(mob/living/silicon/user) + if(broken) + to_chat(user, "[src] seems to be broken. Its debug interface outputs: [broken_message]") + ..() + +/obj/machinery/atmospherics/miner/n2o + name = "\improper N2O Gas Miner" + overlay_color = "#FFCCCC" + spawn_id = "n2o" + +/obj/machinery/atmospherics/miner/nitrogen + name = "\improper N2 Gas Miner" + overlay_color = "#CCFFCC" + spawn_id = "n2" + +/obj/machinery/atmospherics/miner/oxygen + name = "\improper O2 Gas Miner" + overlay_color = "#007FFF" + spawn_id = "o2" + +/obj/machinery/atmospherics/miner/toxins + name = "\improper Plasma Gas Miner" + overlay_color = "#FF0000" + spawn_id = "plasma" + +/obj/machinery/atmospherics/miner/carbon_dioxide + name = "\improper CO2 Gas Miner" + overlay_color = "#CDCDCD" + spawn_id = "co2" + +/obj/machinery/atmospherics/miner/bz + name = "\improper BZ Gas Miner" + overlay_color = "#FAFF00" + spawn_id = "bz" + +/obj/machinery/atmospherics/miner/freon + name = "\improper Freon Gas Miner" + overlay_color = "#00FFE5" + spawn_id = "freon" + +/obj/machinery/atmospherics/miner/volatile_fuel + name = "\improper Volatile Fuel Gas Miner" + overlay_color = "#564040" + spawn_id = "v_fuel" + +/obj/machinery/atmospherics/miner/agent_b + name = "\improper Agent B Gas Miner" + overlay_color = "#E81E24" + spawn_id = "agent_b" + +/obj/machinery/atmospherics/miner/water_vapor + name = "\improper Water Vapor Gas Miner" + overlay_color = "#99928E" + spawn_id = "water_vapor" diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm index 9dcad6efa6..46ebf95dd0 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm @@ -10,7 +10,7 @@ device_type = BINARY /obj/machinery/atmospherics/pipe/heat_exchanging/simple/SetInitDirections() - if(dir in diagonals) + if(dir in GLOB.diagonals) initialize_directions_he = dir switch(dir) if(NORTH,SOUTH) diff --git a/code/modules/atmospherics/machinery/pipes/simple.dm b/code/modules/atmospherics/machinery/pipes/simple.dm index a2aff01baa..984c006b74 100644 --- a/code/modules/atmospherics/machinery/pipes/simple.dm +++ b/code/modules/atmospherics/machinery/pipes/simple.dm @@ -8,7 +8,7 @@ The regular pipe you see everywhere, including bent ones. icon_state = "intact" name = "pipe" - desc = "A one meter section of regular pipe" + desc = "A one meter section of regular pipe." dir = SOUTH initialize_directions = SOUTH|NORTH @@ -16,7 +16,7 @@ The regular pipe you see everywhere, including bent ones. device_type = BINARY /obj/machinery/atmospherics/pipe/simple/SetInitDirections() - if(dir in diagonals) + if(dir in GLOB.diagonals) initialize_directions = dir switch(dir) if(NORTH,SOUTH) diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index 54f1c06252..f5613c0b7e 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -1,5 +1,3 @@ -#define CAN_MAX_RELEASE_PRESSURE (ONE_ATMOSPHERE * 10) -#define CAN_MIN_RELEASE_PRESSURE (ONE_ATMOSPHERE / 10) #define CAN_DEFAULT_RELEASE_PRESSURE (ONE_ATMOSPHERE) /obj/machinery/portable_atmospherics/canister @@ -16,6 +14,8 @@ var/filled = 0.5 var/gas_type = "" var/release_pressure = ONE_ATMOSPHERE + var/can_max_release_pressure = (ONE_ATMOSPHERE * 10) + var/can_min_release_pressure = (ONE_ATMOSPHERE / 10) armor = list(melee = 50, bullet = 50, laser = 50, energy = 100, bomb = 10, bio = 100, rad = 100, fire = 80, acid = 50) obj_integrity = 250 @@ -24,6 +24,16 @@ pressure_resistance = 7 * ONE_ATMOSPHERE var/temperature_resistance = 1000 + T0C var/starter_temp + // Prototype vars + var/prototype = FALSE + var/valve_timer = null + var/timer_set = 30 + var/default_timer_set = 30 + var/minimum_timer_set = 1 + var/maximum_timer_set = 300 + var/timing = FALSE + var/restricted = FALSE + req_access = list() var/update = 0 var/static/list/label2types = list( @@ -39,6 +49,13 @@ "caution" = /obj/machinery/portable_atmospherics/canister, ) +/obj/machinery/portable_atmospherics/canister/interact(mob/user) + if(!allowed(user)) + to_chat(user, "Error - Unauthorized User") + playsound(src, 'sound/misc/compiler-failure.ogg', 50, 1) + return + ..() + /obj/machinery/portable_atmospherics/canister/nitrogen name = "n2 canister" desc = "Nitrogen gas. Reportedly useful for something." @@ -99,6 +116,46 @@ gas_type = "water_vapor" filled = 1 +/obj/machinery/portable_atmospherics/canister/proc/get_time_left() + if(timing) + . = round(max(0, valve_timer - world.time) / 10, 1) + else + . = timer_set + +/obj/machinery/portable_atmospherics/canister/proc/set_active() + timing = !timing + if(timing) + valve_timer = world.time + (timer_set * 10) + update_icon() + +/obj/machinery/portable_atmospherics/canister/proto + name = "prototype canister" + + +/obj/machinery/portable_atmospherics/canister/proto/default + name = "prototype canister" + desc = "The best way to fix an atmospheric emergency... or the best way to introduce one." + icon_state = "proto" + icon_state = "proto" + volume = 5000 + obj_integrity = 300 + max_integrity = 300 + temperature_resistance = 2000 + T0C + can_max_release_pressure = (ONE_ATMOSPHERE * 30) + can_min_release_pressure = (ONE_ATMOSPHERE / 30) + prototype = TRUE + + +/obj/machinery/portable_atmospherics/canister/proto/default/oxygen + name = "prototype canister" + desc = "A prototype canister for a prototype bike, what could go wrong?" + icon_state = "proto" + gas_type = "o2" + filled = 1 + release_pressure = ONE_ATMOSPHERE*2 + + + /obj/machinery/portable_atmospherics/canister/New(loc, datum/gas_mixture/existing_mixture) ..() if(existing_mixture) @@ -239,6 +296,9 @@ ..() if(stat & BROKEN) return PROCESS_KILL + if(timing && valve_timer < world.time) + valve_open = !valve_open + timing = FALSE if(!valve_open) pump.AIR1 = null pump.AIR2 = null @@ -255,7 +315,7 @@ update_icon() /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) + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "canister", name, 420, 405, master_ui, state) @@ -267,10 +327,20 @@ data["tankPressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0) data["releasePressure"] = round(release_pressure ? release_pressure : 0) data["defaultReleasePressure"] = round(CAN_DEFAULT_RELEASE_PRESSURE) - data["minReleasePressure"] = round(CAN_MIN_RELEASE_PRESSURE) - data["maxReleasePressure"] = round(CAN_MAX_RELEASE_PRESSURE) + data["minReleasePressure"] = round(can_min_release_pressure) + data["maxReleasePressure"] = round(can_max_release_pressure) data["valveOpen"] = valve_open ? 1 : 0 + data["isPrototype"] = prototype ? 1 : 0 + if (prototype) + data["restricted"] = restricted + data["timing"] = timing + data["time_left"] = get_time_left() + data["timer_set"] = timer_set + data["timer_is_not_default"] = timer_set != default_timer_set + data["timer_is_not_min"] = timer_set != minimum_timer_set + data["timer_is_not_max"] = timer_set != maximum_timer_set + data["hasHoldingTank"] = holding ? 1 : 0 if (holding) data["holdingTank"] = list() @@ -287,32 +357,37 @@ if(label && !..()) var/newtype = label2types[label] if(newtype) - var/obj/machinery/portable_atmospherics/canister/replacement = new newtype(loc, air_contents) - if(connected_port) - replacement.connected_port = connected_port - replacement.connected_port.connected_device = replacement - replacement.interact(usr) - qdel(src) + var/obj/machinery/portable_atmospherics/canister/replacement = newtype + name = initial(replacement.name) + desc = initial(replacement.name) + icon_state = initial(replacement.icon_state) + if("restricted") + restricted = !restricted + if(restricted) + req_access = list(GLOB.access_engine) + else + req_access = list() + . = TRUE if("pressure") var/pressure = params["pressure"] if(pressure == "reset") pressure = CAN_DEFAULT_RELEASE_PRESSURE . = TRUE else if(pressure == "min") - pressure = CAN_MIN_RELEASE_PRESSURE + pressure = can_min_release_pressure . = TRUE else if(pressure == "max") - pressure = CAN_MAX_RELEASE_PRESSURE + pressure = can_max_release_pressure . = TRUE else if(pressure == "input") - pressure = input("New release pressure ([CAN_MIN_RELEASE_PRESSURE]-[CAN_MAX_RELEASE_PRESSURE] kPa):", name, release_pressure) as num|null + pressure = input("New release pressure ([can_min_release_pressure]-[can_max_release_pressure] kPa):", name, release_pressure) as num|null if(!isnull(pressure) && !..()) . = TRUE else if(text2num(pressure) != null) pressure = text2num(pressure) . = TRUE if(.) - release_pressure = Clamp(round(pressure), CAN_MIN_RELEASE_PRESSURE, CAN_MAX_RELEASE_PRESSURE) + release_pressure = Clamp(round(pressure), can_min_release_pressure, can_max_release_pressure) investigate_log("was set to [release_pressure] kPa by [key_name(usr)].", "atmos") if("valve") var/logmsg @@ -344,11 +419,34 @@ investigate_log(logmsg, "atmos") release_log += logmsg . = TRUE + if("timer") + var/change = params["change"] + switch(change) + if("reset") + timer_set = default_timer_set + if("decrease") + timer_set = max(minimum_timer_set, timer_set - 10) + if("increase") + timer_set = min(maximum_timer_set, timer_set + 10) + if("input") + var/user_input = input(usr, "Set time to valve toggle.", name) as null|num + if(!user_input) + return + var/N = text2num(user_input) + if(!N) + return + timer_set = Clamp(N,minimum_timer_set,maximum_timer_set) + log_admin("[key_name(usr)] has activated a prototype valve timer") + . = TRUE + if("toggle_timer") + set_active() if("eject") if(holding) if(valve_open) investigate_log("[key_name(usr)] removed the [holding], leaving the valve open and transfering into the air
    ", "atmos") - holding.loc = get_turf(src) + holding.forceMove(get_turf(src)) holding = null . = TRUE update_icon() + + diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index 9837badf0c..d8bd51aa5f 100644 --- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm +++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm @@ -22,7 +22,6 @@ air_contents = new air_contents.volume = volume air_contents.temperature = T20C - air_contents.holder = src return 1 diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm index 4ee7fca1b1..40f88cbecb 100644 --- a/code/modules/atmospherics/machinery/portable/pump.dm +++ b/code/modules/atmospherics/machinery/portable/pump.dm @@ -70,7 +70,7 @@ /obj/machinery/portable_atmospherics/pump/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) + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "portable_pump", name, 420, 415, master_ui, state) diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm index 308daa43f2..77325119a3 100644 --- a/code/modules/atmospherics/machinery/portable/scrubber.dm +++ b/code/modules/atmospherics/machinery/portable/scrubber.dm @@ -63,7 +63,7 @@ ..() /obj/machinery/portable_atmospherics/scrubber/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) + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "portable_scrubber", name, 420, 335, master_ui, state) diff --git a/code/modules/awaymissions/bluespaceartillery.dm b/code/modules/awaymissions/bluespaceartillery.dm index 24c90b0246..e3aeec62cd 100644 --- a/code/modules/awaymissions/bluespaceartillery.dm +++ b/code/modules/awaymissions/bluespaceartillery.dm @@ -40,8 +40,8 @@ if(..()) return var/A - A = input("Area to bombard", "Open Fire", A) in teleportlocs - var/area/thearea = teleportlocs[A] + A = input("Area to bombard", "Open Fire", A) in GLOB.teleportlocs + var/area/thearea = GLOB.teleportlocs[A] if(usr.stat || usr.restrained()) return if(reload < reload_cooldown) @@ -58,8 +58,8 @@ /*/mob/proc/openfire() var/A - A = input("Area to jump bombard", "Open Fire", A) in teleportlocs - var/area/thearea = teleportlocs[A] + A = input("Area to jump bombard", "Open Fire", A) in GLOB.teleportlocs + var/area/thearea = GLOB.teleportlocs[A] priority_announce("Bluespace artillery fire detected. Brace for impact.") spawn(30) var/list/L = list() diff --git a/code/modules/awaymissions/capture_the_flag.dm b/code/modules/awaymissions/capture_the_flag.dm index 1758388ed6..996b4a700b 100644 --- a/code/modules/awaymissions/capture_the_flag.dm +++ b/code/modules/awaymissions/capture_the_flag.dm @@ -41,14 +41,15 @@ /obj/item/weapon/twohanded/ctf/process() if(world.time > reset_cooldown) forceMove(get_turf(src.reset)) - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) var/area/mob_area = get_area(M) if(istype(mob_area, /area/ctf)) to_chat(M, "\The [src] has been returned to base!") STOP_PROCESSING(SSobj, src) /obj/item/weapon/twohanded/ctf/attack_hand(mob/living/user) - if(!user) + if(!is_ctf_target(user)) + to_chat(user, "Non players shouldn't be moving the flag!") return if(team in user.faction) to_chat(user, "You can't move your own flag!") @@ -62,7 +63,7 @@ dropped(user) return user.anchored = TRUE - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) var/area/mob_area = get_area(M) if(istype(mob_area, /area/ctf)) to_chat(M, "\The [src] has been taken!") @@ -73,7 +74,7 @@ user.anchored = FALSE reset_cooldown = world.time + 200 //20 seconds START_PROCESSING(SSobj, src) - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) var/area/mob_area = get_area(M) if(istype(mob_area, /area/ctf)) to_chat(M, "\The [src] has been dropped!") @@ -118,7 +119,7 @@ /proc/toggle_all_ctf(mob/user) var/ctf_enabled = FALSE - for(var/obj/machinery/capture_the_flag/CTF in machines) + for(var/obj/machinery/capture_the_flag/CTF in GLOB.machines) ctf_enabled = CTF.toggle_ctf() message_admins("[key_name_admin(user)] has [ctf_enabled? "enabled" : "disabled"] CTF!") notify_ghosts("CTF has been [ctf_enabled? "enabled" : "disabled"]!",'sound/effects/ghost2.ogg') @@ -145,11 +146,10 @@ var/ctf_gear = /datum/outfit/ctf var/instagib_gear = /datum/outfit/ctf/instagib - var/list/obj/effect/ctf/dead_barricade/dead_barricades = list() - var/list/obj/structure/barricade/security/ctf/living_barricades = list() + var/list/dead_barricades = list() var/static/ctf_object_typecache - var/static/arena_cleared = FALSE + var/static/arena_reset = FALSE /obj/machinery/capture_the_flag/Initialize() ..() @@ -163,10 +163,10 @@ /obj/effect/ctf, /obj/item/weapon/twohanded/ctf )) - poi_list |= src + GLOB.poi_list |= src /obj/machinery/capture_the_flag/Destroy() - poi_list.Remove(src) + GLOB.poi_list.Remove(src) ..() /obj/machinery/capture_the_flag/process() @@ -206,7 +206,7 @@ toggle_all_ctf(user) return - if(ticker.current_state < GAME_STATE_PLAYING) + if(SSticker.current_state < GAME_STATE_PLAYING) return if(user.ckey in team_members) if(user.ckey in recently_dead_ckeys) @@ -218,7 +218,7 @@ spawn_team_member(new_team_member) return - for(var/obj/machinery/capture_the_flag/CTF in machines) + for(var/obj/machinery/capture_the_flag/CTF in GLOB.machines) if(CTF == src || CTF.ctf_enabled == FALSE) continue if(user.ckey in CTF.team_members) @@ -247,6 +247,7 @@ /obj/machinery/capture_the_flag/proc/spawn_team_member(client/new_team_member) var/mob/living/carbon/human/M = new/mob/living/carbon/human(get_turf(src)) new_team_member.prefs.copy_to(M) + M.set_species(/datum/species/synth) M.key = new_team_member.key M.faction += team M.equipOutfit(ctf_gear) @@ -264,7 +265,7 @@ if(flag.team != src.team) user.transferItemToLoc(flag, get_turf(flag.reset), TRUE) points++ - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) var/area/mob_area = get_area(M) if(istype(mob_area, /area/ctf)) to_chat(M, "[user.real_name] has captured \the [flag], scoring a point for [team] team! They now have [points]/[points_to_win] points!") @@ -272,7 +273,7 @@ victory() /obj/machinery/capture_the_flag/proc/victory() - for(var/mob/M in mob_list) + for(var/mob/M in GLOB.mob_list) var/area/mob_area = get_area(M) if(istype(mob_area, /area/ctf)) to_chat(M, "[team] team wins!") @@ -280,16 +281,16 @@ for(var/obj/item/weapon/twohanded/ctf/W in M) M.dropItemToGround(W) M.dust() - for(var/obj/machinery/control_point/control in machines) + for(var/obj/machinery/control_point/control in GLOB.machines) control.icon_state = "dominator" control.controlling = null - for(var/obj/machinery/capture_the_flag/CTF in machines) + for(var/obj/machinery/capture_the_flag/CTF in GLOB.machines) if(CTF.ctf_enabled == TRUE) CTF.points = 0 CTF.control_points = 0 CTF.ctf_enabled = FALSE CTF.team_members = list() - CTF.arena_cleared = FALSE + CTF.arena_reset = FALSE addtimer(CALLBACK(CTF, .proc/start_ctf), 300) /obj/machinery/capture_the_flag/proc/toggle_ctf() @@ -308,27 +309,26 @@ dead_barricades.Cut() - for(var/b in living_barricades) - var/obj/structure/barricade/security/ctf/B = b - B.obj_integrity = B.max_integrity - notify_ghosts("[name] has been activated!", enter_link="(Click to join the [team] team!) or click on the controller directly!", source = src, action=NOTIFY_ATTACK) - if(!arena_cleared) - clear_the_arena() - arena_cleared = TRUE + if(!arena_reset) + reset_the_arena() + arena_reset = TRUE -/obj/machinery/capture_the_flag/proc/clear_the_arena() +/obj/machinery/capture_the_flag/proc/reset_the_arena() var/area/A = get_area(src) for(var/atm in A) if(!is_type_in_typecache(atm, ctf_object_typecache)) qdel(atm) + if(istype(atm, /obj/structure)) + var/obj/structure/S = atm + S.obj_integrity = S.max_integrity /obj/machinery/capture_the_flag/proc/stop_ctf() ctf_enabled = FALSE - arena_cleared = FALSE + arena_reset = FALSE var/area/A = get_area(src) - for(var/i in mob_list) + for(var/i in GLOB.mob_list) var/mob/M = i if((get_area(A) == A) && (M.ckey in team_members)) M.dust() @@ -337,13 +337,13 @@ recently_dead_ckeys.Cut() /obj/machinery/capture_the_flag/proc/instagib_mode() - for(var/obj/machinery/capture_the_flag/CTF in machines) + for(var/obj/machinery/capture_the_flag/CTF in GLOB.machines) if(CTF.ctf_enabled == TRUE) CTF.ctf_gear = CTF.instagib_gear CTF.respawn_cooldown = INSTAGIB_RESPAWN /obj/machinery/capture_the_flag/proc/normal_mode() - for(var/obj/machinery/capture_the_flag/CTF in machines) + for(var/obj/machinery/capture_the_flag/CTF in GLOB.machines) if(CTF.ctf_enabled == TRUE) CTF.ctf_gear = initial(ctf_gear) CTF.respawn_cooldown = DEFAULT_RESPAWN @@ -433,6 +433,7 @@ /obj/item/projectile/beam/ctf/red icon_state = "laser" + impact_effect_type = /obj/effect/overlay/temp/impact_effect/red_laser // BLUE TEAM GUNS @@ -447,6 +448,7 @@ /obj/item/projectile/beam/ctf/blue icon_state = "bluelaser" + impact_effect_type = /obj/effect/overlay/temp/impact_effect/blue_laser /datum/outfit/ctf name = "CTF" @@ -485,7 +487,6 @@ shoes = /obj/item/clothing/shoes/jackboots/fast /datum/outfit/ctf/red - ears = /obj/item/device/radio/headset/syndicate/alt suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf/red r_hand = /obj/item/weapon/gun/ballistic/automatic/laser/ctf/red l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/red @@ -496,7 +497,6 @@ shoes = /obj/item/clothing/shoes/jackboots/fast /datum/outfit/ctf/blue - ears = /obj/item/device/radio/headset/headset_cent/commander suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf/blue r_hand = /obj/item/weapon/gun/ballistic/automatic/laser/ctf/blue l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/blue @@ -509,14 +509,18 @@ /datum/outfit/ctf/red/post_equip(mob/living/carbon/human/H) ..() var/obj/item/device/radio/R = H.ears - R.set_frequency(SYND_FREQ) - R.freqlock = 1 + R.set_frequency(GLOB.REDTEAM_FREQ) + R.freqlock = TRUE + R.independent = TRUE + H.dna.species.stunmod = 0 /datum/outfit/ctf/blue/post_equip(mob/living/carbon/human/H) ..() var/obj/item/device/radio/R = H.ears - R.set_frequency(CENTCOM_FREQ) - R.freqlock = 1 + R.set_frequency(GLOB.BLUETEAM_FREQ) + R.freqlock = TRUE + R.independent = TRUE + H.dna.species.stunmod = 0 @@ -534,6 +538,8 @@ return /obj/structure/trap/ctf/trap_effect(mob/living/L) + if(!is_ctf_target(L)) + return if(!(src.team in L.faction)) to_chat(L, "Stay out of the enemy spawn!") L.death() @@ -552,16 +558,6 @@ deploy_time = 0 deploy_message = 0 -/obj/structure/barricade/security/ctf/Initialize(mapload) - ..() - for(var/obj/machinery/capture_the_flag/CTF in machines) - CTF.living_barricades += src - -/obj/structure/barricade/security/ctf/Destroy() - for(var/obj/machinery/capture_the_flag/CTF in machines) - CTF.living_barricades -= src - . = ..() - /obj/structure/barricade/security/ctf/make_debris() new /obj/effect/ctf/dead_barricade(get_turf(src)) @@ -598,7 +594,7 @@ /obj/effect/ctf/ammo/proc/reload(mob/living/M) if(!ishuman(M)) return - for(var/obj/machinery/capture_the_flag/CTF in machines) + for(var/obj/machinery/capture_the_flag/CTF in GLOB.machines) if(M in CTF.spawned_mobs) var/outfit = CTF.ctf_gear var/datum/outfit/O = new outfit @@ -618,7 +614,7 @@ /obj/effect/ctf/dead_barricade/Initialize(mapload) ..() - for(var/obj/machinery/capture_the_flag/CTF in machines) + for(var/obj/machinery/capture_the_flag/CTF in GLOB.machines) CTF.dead_barricades += src /obj/effect/ctf/dead_barricade/proc/respawn() @@ -654,11 +650,11 @@ /obj/machinery/control_point/proc/capture(mob/user) if(do_after(user, 30, target = src)) - for(var/obj/machinery/capture_the_flag/CTF in machines) + for(var/obj/machinery/capture_the_flag/CTF in GLOB.machines) if(CTF.ctf_enabled && (user.ckey in CTF.team_members)) controlling = CTF icon_state = "dominator-[CTF.team]" - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) var/area/mob_area = get_area(M) if(istype(mob_area, /area/ctf)) to_chat(M, "[user.real_name] has captured \the [src], claiming it for [CTF.team]! Go take it back!") diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 1bbe7249ad..d9663f97c9 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -22,7 +22,7 @@ anchored = 1 /obj/effect/mob_spawn/attack_ghost(mob/user) - if(ticker.current_state != GAME_STATE_PLAYING || !loc) + if(SSticker.current_state != GAME_STATE_PLAYING || !loc) return if(!uses) to_chat(user, "This spawner is out of charges!") @@ -38,13 +38,13 @@ /obj/effect/mob_spawn/Initialize(mapload) ..() - if(instant || (roundstart && (mapload || (ticker && ticker.current_state > GAME_STATE_SETTING_UP)))) + if(instant || (roundstart && (mapload || (SSticker && SSticker.current_state > GAME_STATE_SETTING_UP)))) create() else - poi_list |= src + GLOB.poi_list |= src /obj/effect/mob_spawn/Destroy() - poi_list.Remove(src) + GLOB.poi_list.Remove(src) . = ..() /obj/effect/mob_spawn/proc/special(mob/M) @@ -67,6 +67,7 @@ M.adjustOxyLoss(oxy_damage) M.adjustBruteLoss(brute_damage) + equip(M) if(ckey) M.ckey = ckey @@ -77,7 +78,6 @@ MM.objectives += new/datum/objective(objective) special(M) MM.name = M.real_name - equip(M) if(uses > 0) uses-- if(!permanent && !uses) @@ -115,13 +115,6 @@ /obj/effect/mob_spawn/human/equip(mob/living/carbon/human/H) if(mob_species) H.set_species(mob_species) - else - //If we're a human, we still need to handle our snowflake code anyway I guess. - if (NOAROUSAL in H.dna.species.species_traits) - H.canbearoused = FALSE - else - if(H.client) - H.canbearoused = H.client.prefs.arousable if(husk) H.Drain() @@ -265,7 +258,7 @@ back = /obj/item/weapon/storage/backpack has_id = 1 id_job = "Operative" - id_access_list = list(access_syndicate) + id_access_list = list(GLOB.access_syndicate) /obj/effect/mob_spawn/human/syndicatecommando name = "Syndicate Commando" @@ -279,7 +272,7 @@ pocket1 = /obj/item/weapon/tank/internals/emergency_oxygen has_id = 1 id_job = "Operative" - id_access_list = list(access_syndicate) + id_access_list = list(GLOB.access_syndicate) ///////////Civilians////////////////////// @@ -356,7 +349,7 @@ glasses = /obj/item/clothing/glasses/sunglasses/reagent has_id = 1 id_job = "Bartender" - id_access_list = list(access_bar) + id_access_list = list(GLOB.access_bar) /obj/effect/mob_spawn/human/bartender/alive death = FALSE @@ -393,7 +386,7 @@ glasses = /obj/item/clothing/glasses/sunglasses has_id = 1 id_job = "Bridge Officer" - id_access_list = list(access_cent_captain) + id_access_list = list(GLOB.access_cent_captain) /obj/effect/mob_spawn/human/commander name = "Commander" @@ -408,7 +401,7 @@ pocket1 = /obj/item/weapon/lighter has_id = 1 id_job = "Commander" - id_access_list = list(access_cent_captain) + id_access_list = list(GLOB.access_cent_captain) /obj/effect/mob_spawn/human/nanotrasensoldier name = "Nanotrasen Private Security Officer" @@ -421,7 +414,7 @@ back = /obj/item/weapon/storage/backpack/security has_id = 1 id_job = "Private Security Force" - id_access_list = list(access_cent_specops) + id_access_list = list(GLOB.access_cent_specops) /obj/effect/mob_spawn/human/commander/alive death = FALSE diff --git a/code/modules/awaymissions/exile.dm b/code/modules/awaymissions/exile.dm index 542079398e..12012e232c 100644 --- a/code/modules/awaymissions/exile.dm +++ b/code/modules/awaymissions/exile.dm @@ -1,7 +1,7 @@ /obj/structure/closet/secure_closet/exile name = "exile implants" - req_access = list(access_hos) + req_access = list(GLOB.access_hos) /obj/structure/closet/secure_closet/exile/New() ..() diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index bb2b4d6793..80d6d84a68 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -1,4 +1,4 @@ -var/obj/machinery/gateway/centerstation/the_gateway = null +GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation) /obj/machinery/gateway name = "gateway" @@ -16,8 +16,13 @@ var/obj/machinery/gateway/centerstation/the_gateway = null var/can_link = FALSE //Is this the centerpiece? /obj/machinery/gateway/Initialize() + randomspawns = GLOB.awaydestinations + update_icon() + if(!istype(src, /obj/machinery/gateway/centerstation) && !istype(src, /obj/machinery/gateway/centeraway)) + switch(dir) + if(SOUTH,SOUTHEAST,SOUTHWEST) + density = 0 ..() - randomspawns = awaydestinations /obj/machinery/gateway/proc/toggleoff() for(var/obj/machinery/gateway/G in linked) @@ -33,7 +38,7 @@ var/obj/machinery/gateway/centerstation/the_gateway = null var/turf/T = loc var/ready = FALSE - for(var/i in alldirs) + for(var/i in GLOB.alldirs) T = get_step(loc, i) var/obj/machinery/gateway/G = locate(/obj/machinery/gateway) in T if(G) @@ -49,14 +54,6 @@ var/obj/machinery/gateway/centerstation/the_gateway = null ready = TRUE return ready -/obj/machinery/gateway/Initialize() - ..() - update_icon() - switch(dir) - if(SOUTH,SOUTHEAST,SOUTHWEST) - density = 0 - - /obj/machinery/gateway/update_icon() if(active) icon_state = "on" @@ -80,12 +77,12 @@ var/obj/machinery/gateway/centerstation/the_gateway = null /obj/machinery/gateway/centerstation/New() ..() - if(!the_gateway) - the_gateway = src + if(!GLOB.the_gateway) + GLOB.the_gateway = src /obj/machinery/gateway/centerstation/Destroy() - if(the_gateway == src) - the_gateway = null + if(GLOB.the_gateway == src) + GLOB.the_gateway = null return ..() //this is da important part wot makes things go @@ -209,6 +206,12 @@ var/obj/machinery/gateway/centerstation/the_gateway = null active = 1 update_icon() +/obj/machinery/gateway/centeraway/proc/check_exile_implant(mob/living/carbon/C) + for(var/obj/item/weapon/implant/exile/E in C.implants)//Checking that there is an exile implant + to_chat(C, "\black The station gate has detected your exile implant and is blocking your entry.") + return TRUE + return FALSE + /obj/machinery/gateway/centeraway/Bumped(atom/movable/AM) if(!detect()) return @@ -217,10 +220,18 @@ var/obj/machinery/gateway/centerstation/the_gateway = null if(!stationgate || QDELETED(stationgate)) return if(istype(AM, /mob/living/carbon)) - var/mob/living/carbon/C = AM - for(var/obj/item/weapon/implant/exile/E in C.implants)//Checking that there is an exile implant - to_chat(AM, "\black The station gate has detected your exile implant and is blocking your entry.") + if(check_exile_implant(AM)) return + else + for(var/mob/living/carbon/C in AM.contents) + if(check_exile_implant(C)) + say("Rejecting [AM]: Exile implant detected in contained lifeform.") + return + if(AM.buckled_mobs.len) + for(var/mob/living/carbon/C in AM.buckled_mobs) + if(check_exile_implant(C)) + say("Rejecting [AM]: Exile implant detected in close proximity lifeform.") + return AM.forceMove(get_step(stationgate.loc, SOUTH)) AM.setDir(SOUTH) if (ismob(AM)) diff --git a/code/modules/awaymissions/mission_code/Academy.dm b/code/modules/awaymissions/mission_code/Academy.dm index d3fcaa4493..f24075702a 100644 --- a/code/modules/awaymissions/mission_code/Academy.dm +++ b/code/modules/awaymissions/mission_code/Academy.dm @@ -47,7 +47,7 @@ /obj/structure/academy_wizard_spawner/process() if(next_check < world.time) if(!current_wizard) - for(var/mob/living/L in player_list) + for(var/mob/living/L in GLOB.player_list) if(L.z == src.z && L.stat != DEAD && !(faction in L.faction)) summon_wizard() break @@ -93,7 +93,7 @@ var/datum/objective/O = new("Protect Wizard Academy from the intruders") wizmind.objectives += O wizmind.transfer_to(wizbody) - ticker.mode.wizards |= wizmind + SSticker.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) @@ -133,7 +133,7 @@ /obj/item/weapon/dice/d20/fate/diceroll(mob/user) ..() if(!used) - if(!ishuman(user) || !user.mind || (user.mind in ticker.mode.wizards)) + if(!ishuman(user) || !user.mind || (user.mind in SSticker.mode.wizards)) to_chat(user, "You feel the magic of the dice is restricted to ordinary humans!") return if(rigged) @@ -142,7 +142,7 @@ effect(user,result) /obj/item/weapon/dice/d20/fate/equipped(mob/user, slot) - if(!ishuman(user) || !user.mind || (user.mind in ticker.mode.wizards)) + if(!ishuman(user) || !user.mind || (user.mind in SSticker.mode.wizards)) to_chat(user, "You feel the magic of the dice is restricted to ordinary humans! You should leave it alone.") user.drop_item() @@ -160,7 +160,7 @@ user.death() if(3) //Swarm of creatures - for(var/direction in alldirs) + for(var/direction in GLOB.alldirs) var/turf/T = get_turf(src) new /mob/living/simple_animal/hostile/creature(get_step(T,direction)) if(4) @@ -180,7 +180,7 @@ //Throw user.Stun(3) user.adjustBruteLoss(50) - var/throw_dir = pick(cardinal) + var/throw_dir = pick(GLOB.cardinal) var/atom/throw_target = get_edge_target_turf(user, throw_dir) user.throw_at(throw_target, 200, 4) if(8) @@ -203,7 +203,7 @@ if(13) //Mad Dosh var/turf/Start = get_turf(src) - for(var/direction in alldirs) + for(var/direction in GLOB.alldirs) var/turf/T = get_step(Start,direction) if(rand(0,1)) new /obj/item/stack/spacecash/c1000(T) @@ -284,7 +284,7 @@ if(!target_mob) return var/turf/Start = get_turf(user) - for(var/direction in alldirs) + for(var/direction in GLOB.alldirs) var/turf/T = get_step(Start,direction) if(!T.density) target_mob.Move(T) @@ -303,6 +303,6 @@ user.visible_message("[user] activates \the [src].","You activate \the [src].") /obj/structure/ladder/can_use(mob/user) - if(user.mind in ticker.mode.wizards) + if(user.mind in SSticker.mode.wizards) return 0 return 1 diff --git a/code/modules/awaymissions/mission_code/Cabin.dm b/code/modules/awaymissions/mission_code/Cabin.dm index 358ccc5d85..be16bfba88 100644 --- a/code/modules/awaymissions/mission_code/Cabin.dm +++ b/code/modules/awaymissions/mission_code/Cabin.dm @@ -117,3 +117,7 @@ /obj/effect/landmark/mapGenerator/snowy mapGeneratorType = /datum/mapGenerator/snowy + endTurfX = 159 + endTurfY = 157 + startTurfX = 37 + startTurfY = 35 diff --git a/code/modules/awaymissions/mission_code/stationCollision.dm b/code/modules/awaymissions/mission_code/stationCollision.dm index cc2b7c51c1..fb1d375854 100644 --- a/code/modules/awaymissions/mission_code/stationCollision.dm +++ b/code/modules/awaymissions/mission_code/stationCollision.dm @@ -72,23 +72,23 @@ */ //These vars hold the code itself, they'll be generated at round-start -var/sc_safecode1 = "[rand(0,9)]" -var/sc_safecode2 = "[rand(0,9)]" -var/sc_safecode3 = "[rand(0,9)]" -var/sc_safecode4 = "[rand(0,9)]" -var/sc_safecode5 = "[rand(0,9)]" +GLOBAL_VAR_INIT(sc_safecode1, "[rand(0,9)]") +GLOBAL_VAR_INIT(sc_safecode2, "[rand(0,9)]") +GLOBAL_VAR_INIT(sc_safecode3, "[rand(0,9)]") +GLOBAL_VAR_INIT(sc_safecode4, "[rand(0,9)]") +GLOBAL_VAR_INIT(sc_safecode5, "[rand(0,9)]") //Pieces of paper actually containing the hints /obj/item/weapon/paper/sc_safehint_paper_prison name = "smudged paper" /obj/item/weapon/paper/sc_safehint_paper_prison/New() - info = "The ink is smudged, you can only make out a couple numbers: '[sc_safecode1]**[sc_safecode4]*'" + info = "The ink is smudged, you can only make out a couple numbers: '[GLOB.sc_safecode1]**[GLOB.sc_safecode4]*'" /obj/item/weapon/paper/sc_safehint_paper_hydro name = "shredded paper" /obj/item/weapon/paper/sc_safehint_paper_hydro/New() - info = "Although the paper is shredded, you can clearly see the number: '[sc_safecode2]'" + info = "Although the paper is shredded, you can clearly see the number: '[GLOB.sc_safecode2]'" /obj/item/weapon/paper/sc_safehint_paper_caf name = "blood-soaked paper" @@ -99,7 +99,7 @@ var/sc_safecode5 = "[rand(0,9)]" name = "hidden paper" /obj/item/weapon/paper/sc_safehint_paper_bible/New() info = {"It would appear that the pen hidden with the paper had leaked ink over the paper. - However you can make out the last three digits:'[sc_safecode3][sc_safecode4][sc_safecode5]' + However you can make out the last three digits:'[GLOB.sc_safecode3][GLOB.sc_safecode4][GLOB.sc_safecode5]' "} /obj/item/weapon/paper/sc_safehint_paper_shuttle @@ -123,7 +123,7 @@ var/sc_safecode5 = "[rand(0,9)]" /obj/item/weapon/storage/secure/safe/sc_ssafe/New() ..() - l_code = "[sc_safecode1][sc_safecode2][sc_safecode3][sc_safecode4][sc_safecode5]" + l_code = "[GLOB.sc_safecode1][GLOB.sc_safecode2][GLOB.sc_safecode3][GLOB.sc_safecode4][GLOB.sc_safecode5]" l_set = 1 new /obj/item/weapon/gun/energy/mindflayer(src) new /obj/item/device/soulstone(src) diff --git a/code/modules/awaymissions/mission_code/wildwest.dm b/code/modules/awaymissions/mission_code/wildwest.dm index 64d3374320..5847b8de8e 100644 --- a/code/modules/awaymissions/mission_code/wildwest.dm +++ b/code/modules/awaymissions/mission_code/wildwest.dm @@ -64,7 +64,7 @@ if("To Kill") to_chat(user, "Your wish is granted, but at a terrible cost...") to_chat(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 + SSticker.mode.traitors += user.mind user.mind.special_role = "traitor" var/datum/objective/hijack/hijack = new hijack.owner = user.mind @@ -75,7 +75,7 @@ if("Peace") to_chat(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.") to_chat(user, "You feel as if you just narrowly avoided a terrible fate...") - for(var/mob/living/simple_animal/hostile/faithless/F in mob_list) + for(var/mob/living/simple_animal/hostile/faithless/F in GLOB.mob_list) F.death() diff --git a/code/modules/awaymissions/zlevel.dm b/code/modules/awaymissions/zlevel.dm index 19b023fe66..a8ce80bb4a 100644 --- a/code/modules/awaymissions/zlevel.dm +++ b/code/modules/awaymissions/zlevel.dm @@ -1,33 +1,33 @@ // How much "space" we give the edge of the map -var/global/list/potentialRandomZlevels = generateMapList(filename = "config/awaymissionconfig.txt") +GLOBAL_LIST_INIT(potentialRandomZlevels, generateMapList(filename = "config/awaymissionconfig.txt")) /proc/createRandomZlevel() - if(awaydestinations.len) //crude, but it saves another var! + if(GLOB.awaydestinations.len) //crude, but it saves another var! return - if(potentialRandomZlevels && potentialRandomZlevels.len) + if(GLOB.potentialRandomZlevels && GLOB.potentialRandomZlevels.len) to_chat(world, "Loading away mission...") - var/map = pick(potentialRandomZlevels) + var/map = pick(GLOB.potentialRandomZlevels) load_new_z_level(map) to_chat(world, "Away mission loaded.") /proc/reset_gateway_spawns(reset = FALSE) for(var/obj/machinery/gateway/G in world) if(reset) - G.randomspawns = awaydestinations + G.randomspawns = GLOB.awaydestinations else - G.randomspawns.Add(awaydestinations) + G.randomspawns.Add(GLOB.awaydestinations) /obj/effect/landmark/awaystart name = "away mission spawn" desc = "Randomly picked away mission spawn points" /obj/effect/landmark/awaystart/New() - awaydestinations += src + GLOB.awaydestinations += src ..() /obj/effect/landmark/awaystart/Destroy() - awaydestinations -= src + GLOB.awaydestinations -= src return ..() /proc/generateMapList(filename) diff --git a/code/modules/cargo/console.dm b/code/modules/cargo/console.dm index b2a4f064d2..8e21b3d2d4 100644 --- a/code/modules/cargo/console.dm +++ b/code/modules/cargo/console.dm @@ -38,7 +38,7 @@ board.emagged = TRUE /obj/machinery/computer/cargo/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/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "cargo", name, 1000, 800, master_ui, state) diff --git a/code/modules/cargo/exports.dm b/code/modules/cargo/exports.dm index 1fb393ba25..dda86e5257 100644 --- a/code/modules/cargo/exports.dm +++ b/code/modules/cargo/exports.dm @@ -27,7 +27,7 @@ Credit dupes that require a lot of manual work shouldn't be removed, unless they then the player gets the profit from selling his own wasted time. */ /proc/export_item_and_contents(atom/movable/AM, contraband, emagged, dry_run=FALSE) - if(!exports_list.len) + if(!GLOB.exports_list.len) setupExports() var/sold_str = "" @@ -38,7 +38,7 @@ Credit dupes that require a lot of manual work shouldn't be removed, unless they // We go backwards, so it'll be innermost objects sold first for(var/i in reverseRange(contents)) var/atom/movable/thing = i - for(var/datum/export/E in exports_list) + for(var/datum/export/E in GLOB.exports_list) if(!E) continue if(E.applies_to(thing, contraband, emagged)) @@ -134,10 +134,10 @@ Credit dupes that require a lot of manual work shouldn't be removed, unless they total_cost = 0 total_amount = 0 -var/list/exports_list = list() +GLOBAL_LIST_EMPTY(exports_list) /proc/setupExports() for(var/subtype in subtypesof(/datum/export)) var/datum/export/E = new subtype if(E.export_types && E.export_types.len) // Exports without a type are invalid/base types - exports_list += E + GLOB.exports_list += E diff --git a/code/modules/cargo/exports/materials.dm b/code/modules/cargo/exports/materials.dm index ad1f6a01d9..c2a0734958 100644 --- a/code/modules/cargo/exports/materials.dm +++ b/code/modules/cargo/exports/materials.dm @@ -79,6 +79,12 @@ material_id = MAT_TITANIUM message = "cm3 of titanium" +// Plastitanium. +/datum/export/material/plastitanium + cost = 750 + material_id = MAT_TITANIUM // code can only check for one material_id; plastitanium is half plasma, half titanium, so ((250 x 250) + (250 x 500)) / 250 + message = "cm3 of plastitanium" + // Metal. Common building material. /datum/export/material/metal message = "cm3 of metal" diff --git a/code/modules/cargo/exports/sheets.dm b/code/modules/cargo/exports/sheets.dm index 5ed73a3cf6..707dab703c 100644 --- a/code/modules/cargo/exports/sheets.dm +++ b/code/modules/cargo/exports/sheets.dm @@ -79,6 +79,13 @@ message = "of reinforced glass" export_types = list(/obj/item/stack/sheet/rglass) +// Bluespace Polycrystals. About as common on the asteroid as + +/datum/export/stack/bscrystal + cost = 750 + message = "of bluespace crystals" + export_types = list(/obj/item/stack/sheet/bluespace_crystal) + // Wood. Quite expensive in the grim and dark 26 century. /datum/export/stack/wood cost = 25 diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index 9d7e799743..b7c7a7e377 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -37,6 +37,19 @@ /datum/supply_pack/emergency group = "Emergency" +/datum/supply_pack/emergency/spacesuit + name = "Space Suit Crate" + cost = 3000 + access = GLOB.access_eva + contains = list(/obj/item/clothing/suit/space, + /obj/item/clothing/suit/space, + /obj/item/clothing/head/helmet/space, + /obj/item/clothing/head/helmet/space, + /obj/item/clothing/mask/breath, + /obj/item/clothing/mask/breath) + crate_name = "space suit crate" + crate_type = /obj/structure/closet/crate/secure + /datum/supply_pack/emergency/vehicle name = "Biker Gang Kit" //TUNNEL SNAKES OWN THIS TOWN cost = 2000 @@ -108,7 +121,7 @@ /datum/supply_pack/emergency/atmostank name = "Firefighting Watertank" cost = 1000 - access = access_atmospherics + access = GLOB.access_atmospherics contains = list(/obj/item/weapon/watertank/atmos) crate_name = "firefighting watertank crate" crate_type = /obj/structure/closet/crate/secure @@ -131,7 +144,7 @@ /datum/supply_pack/emergency/weedcontrol name = "Weed Control Crate" cost = 1500 - access = access_hydroponics + access = GLOB.access_hydroponics contains = list(/obj/item/weapon/scythe, /obj/item/clothing/mask/gas, /obj/item/weapon/grenade/chem_grenade/antiweed, @@ -177,7 +190,7 @@ /datum/supply_pack/emergency/syndicate/fill(obj/structure/closet/crate/C) var/crate_value = 50 - var/list/uplink_items = get_uplink_items(ticker.mode) + var/list/uplink_items = get_uplink_items(SSticker.mode) while(crate_value) var/category = pick(uplink_items) var/item = pick(uplink_items[category]) @@ -196,7 +209,7 @@ /datum/supply_pack/security group = "Security" - access = access_security + access = GLOB.access_security crate_type = /obj/structure/closet/crate/secure/gear /datum/supply_pack/security/supplies @@ -277,7 +290,7 @@ crate_name = "forensics crate" /datum/supply_pack/security/armory - access = access_armory + access = GLOB.access_armory crate_type = /obj/structure/closet/crate/secure/weapon /datum/supply_pack/security/armory/riothelmets @@ -365,7 +378,7 @@ /datum/supply_pack/security/armory/fire name = "Incendiary Weapons Crate" cost = 1500 - access = access_heads + access = GLOB.access_heads contains = list(/obj/item/weapon/flamethrower/full, /obj/item/weapon/tank/internals/plasma, /obj/item/weapon/tank/internals/plasma, @@ -497,7 +510,7 @@ /datum/supply_pack/science/nitrous_oxide_canister name = "Nitrous Oxide Canister" cost = 3000 - access = access_atmospherics + access = GLOB.access_atmospherics contains = list(/obj/machinery/portable_atmospherics/canister/nitrous_oxide) crate_name = "nitrous oxide canister crate" crate_type = /obj/structure/closet/crate/secure @@ -549,18 +562,6 @@ /obj/item/clothing/glasses/meson/engine) crate_name = "engineering gear crate" -/datum/supply_pack/engineering/engine/spacesuit - name = "Space Suit Crate" - cost = 3000 - access = access_eva - contains = list(/obj/item/clothing/suit/space, - /obj/item/clothing/suit/space, - /obj/item/clothing/head/helmet/space, - /obj/item/clothing/head/helmet/space, - /obj/item/clothing/mask/breath, - /obj/item/clothing/mask/breath) - crate_name = "space suit crate" - crate_type = /obj/structure/closet/crate/secure /datum/supply_pack/engineering/shieldgen name = "Anti-breach Shield Projector Crate" @@ -619,7 +620,7 @@ /datum/supply_pack/engineering/engine name = "Emitter Crate" cost = 1500 - access = access_ce + access = GLOB.access_ce contains = list(/obj/machinery/power/emitter, /obj/machinery/power/emitter) crate_name = "emitter crate" @@ -668,7 +669,7 @@ /datum/supply_pack/engineering/engine/supermatter_shard name = "Supermatter Shard Crate" cost = 10000 - access = access_ce + access = GLOB.access_ce contains = list(/obj/machinery/power/supermatter_shard) crate_name = "supermatter shard crate" crate_type = /obj/structure/closet/crate/secure/engineering @@ -781,7 +782,7 @@ /datum/supply_pack/medical/virus name = "Virus Crate" cost = 2500 - access = access_cmo + access = GLOB.access_cmo contains = list(/obj/item/weapon/reagent_containers/glass/bottle/flu_virion, /obj/item/weapon/reagent_containers/glass/bottle/cold, /obj/item/weapon/reagent_containers/glass/bottle/epiglottis_virion, @@ -838,7 +839,7 @@ /datum/supply_pack/science/robotics name = "Robotics Assembly Crate" cost = 1000 - access = access_robotics + access = GLOB.access_robotics contains = list(/obj/item/device/assembly/prox_sensor, /obj/item/device/assembly/prox_sensor, /obj/item/device/assembly/prox_sensor, @@ -852,7 +853,7 @@ /datum/supply_pack/science/robotics/mecha_ripley name = "Circuit Crate (Ripley APLU)" cost = 3000 - access = access_robotics + access = GLOB.access_robotics contains = list(/obj/item/weapon/book/manual/ripley_build_and_repair, /obj/item/weapon/circuitboard/mecha/ripley/main, /obj/item/weapon/circuitboard/mecha/ripley/peripherals) @@ -862,7 +863,7 @@ /datum/supply_pack/science/robotics/mecha_odysseus name = "Circuit Crate (Odysseus)" cost = 2500 - access = access_robotics + access = GLOB.access_robotics contains = list(/obj/item/weapon/circuitboard/mecha/odysseus/peripherals, /obj/item/weapon/circuitboard/mecha/odysseus/main) crate_name = "\improper Odysseus circuit crate" @@ -871,7 +872,7 @@ /datum/supply_pack/science/plasma name = "Plasma Assembly Crate" cost = 1000 - access = access_tox_storage + access = GLOB.access_tox_storage contains = list(/obj/item/weapon/tank/internals/plasma, /obj/item/weapon/tank/internals/plasma, /obj/item/weapon/tank/internals/plasma, @@ -890,7 +891,7 @@ /datum/supply_pack/science/shieldwalls name = "Shield Generators" cost = 2000 - access = access_teleporter + access = GLOB.access_teleporter contains = list(/obj/machinery/shieldwallgen, /obj/machinery/shieldwallgen, /obj/machinery/shieldwallgen, @@ -901,7 +902,7 @@ /datum/supply_pack/science/transfer_valves name = "Tank Transfer Valves Crate" cost = 6000 - access = access_rd + access = GLOB.access_rd contains = list(/obj/item/device/transfer_valve, /obj/item/device/transfer_valve) crate_name = "tank transfer valves crate" @@ -911,7 +912,7 @@ /datum/supply_pack/science/bz_canister name = "BZ Canister" cost = 2000 - access_any = list(access_rd, access_atmospherics) + access_any = list(GLOB.access_rd, GLOB.access_atmospherics) contains = list(/obj/machinery/portable_atmospherics/canister/bz) crate_name = "bz canister crate" crate_type = /obj/structure/closet/crate/secure/science @@ -920,7 +921,7 @@ /datum/supply_pack/science/freon_canister name = "Freon Canister" cost = 6000 - access_any = list(access_rd, access_atmospherics) + access_any = list(GLOB.access_rd, GLOB.access_atmospherics) contains = list(/obj/machinery/portable_atmospherics/canister/freon) crate_name = "freon canister crate" crate_type = /obj/structure/closet/crate/secure/science @@ -929,7 +930,7 @@ /datum/supply_pack/science/research name = "Machine Prototype Crate" cost = 8000 - access = access_research + access = GLOB.access_research contains = list(/obj/item/device/machineprototype) crate_name = "machine prototype crate" crate_type = /obj/structure/closet/crate/secure/science @@ -985,7 +986,7 @@ contains = list(/obj/item/weapon/storage/backpack/dufflebag/clown/cream_pie) crate_name = "party equipment crate" contraband = TRUE - access = access_theatre + access = GLOB.access_theatre crate_type = /obj/structure/closet/crate/secure /datum/supply_pack/organic/monkey @@ -1110,7 +1111,7 @@ /datum/supply_pack/organic/hydroponics/hydrotank name = "Hydroponics Backpack Crate" cost = 1000 - access = access_hydroponics + access = GLOB.access_hydroponics contains = list(/obj/item/weapon/watertank) crate_name = "hydroponics backpack crate" crate_type = /obj/structure/closet/crate/secure @@ -1283,7 +1284,7 @@ /datum/supply_pack/misc/minerkit name = "Shaft Miner Starter Kit" cost = 2500 - access = access_qm + access = GLOB.access_qm contains = list(/obj/item/weapon/pickaxe/mini, /obj/item/clothing/glasses/meson, /obj/item/device/t_scanner/adv_mining_scanner/lesser, @@ -1458,7 +1459,7 @@ /datum/supply_pack/misc/janitor/janitank name = "Janitor Backpack Crate" cost = 1000 - access = access_janitor + access = GLOB.access_janitor contains = list(/obj/item/weapon/watertank/janitor) crate_name = "janitor backpack crate" crate_type = /obj/structure/closet/crate/secure @@ -1491,7 +1492,7 @@ /datum/supply_pack/misc/costume name = "Standard Costume Crate" cost = 1000 - access = access_theatre + access = GLOB.access_theatre contains = list(/obj/item/weapon/storage/backpack/clown, /obj/item/clothing/shoes/clown_shoes, /obj/item/clothing/mask/gas/clown_hat, @@ -1592,7 +1593,6 @@ /obj/item/toy/talking/AI, /obj/item/toy/talking/owl, /obj/item/toy/talking/griffin, - /obj/item/toy/talking/skeleton, /obj/item/toy/nuke, /obj/item/toy/minimeteor, /obj/item/toy/carpplushie, @@ -1685,7 +1685,7 @@ crate_name = "librarian engraving/scribbling crate" cost = 3000 contains = list(/obj/item/soapstone) - access = access_library + access = GLOB.access_library crate_type = /obj/structure/closet/crate/secure @@ -1750,7 +1750,7 @@ /datum/supply_pack/misc/bicycle name = "Bicycle" - cost = 10000 + cost = 1000000 contains = list(/obj/vehicle/bicycle) crate_name = "Bicycle Crate" crate_type = /obj/structure/closet/crate/large diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm index fb9daf1a91..2b59e5c64a 100644 --- a/code/modules/client/asset_cache.dm +++ b/code/modules/client/asset_cache.dm @@ -41,7 +41,7 @@ You can set verify to TRUE if you want send() to sleep until the client has the if(client.cache.Find(asset_name) || client.sending.Find(asset_name)) return 0 - client << browse_rsc(SSasset.cache[asset_name], asset_name) + client << browse_rsc(SSassets.cache[asset_name], asset_name) if(!verify || !winexists(client, "asset_cache_browser")) // Can't access the asset cache browser, rip. if (client) client.cache += asset_name @@ -91,8 +91,8 @@ You can set verify to TRUE if you want send() to sleep until the client has the if (unreceived.len >= ASSET_CACHE_TELL_CLIENT_AMOUNT) to_chat(client, "Sending Resources...") for(var/asset in unreceived) - if (asset in SSasset.cache) - client << browse_rsc(SSasset.cache[asset], asset) + if (asset in SSassets.cache) + client << browse_rsc(SSassets.cache[asset], asset) if(!verify || !winexists(client, "asset_cache_browser")) // Can't access the asset cache browser, rip. if (client) @@ -136,21 +136,21 @@ You can set verify to TRUE if you want send() to sleep until the client has the //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. /proc/register_asset(var/asset_name, var/asset) - SSasset.cache[asset_name] = asset + SSassets.cache[asset_name] = asset //These datums are used to populate the asset cache, the proc "register()" does this. //all of our asset datums, used for referring to these later -/var/global/list/asset_datums = list() +GLOBAL_LIST_EMPTY(asset_datums) //get a assetdatum or make a new one /proc/get_asset_datum(var/type) - if (!(type in asset_datums)) + if (!(type in GLOB.asset_datums)) return new type() - return asset_datums[type] + return GLOB.asset_datums[type] /datum/asset/New() - asset_datums[type] = src + GLOB.asset_datums[type] = src /datum/asset/proc/register() return diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index c2d73fc019..09f5eb1ccc 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -78,8 +78,8 @@ return //Logs all hrefs - if(config && config.log_hrefs && href_logfile) - href_logfile << "[time_stamp(show_ds = TRUE)] [src] (usr:[usr]) || [hsrc ? "[hsrc] " : ""][href]
    " + if(config && config.log_hrefs && GLOB.href_logfile) + GLOB.href_logfile << "[time_stamp(show_ds = TRUE)] [src] (usr:[usr]) || [hsrc ? "[hsrc] " : ""][href]
    " // Admin PM if(href_list["priv_msg"]) @@ -146,8 +146,7 @@ //CONNECT// /////////// #if (PRELOAD_RSC == 0) -var/list/external_rsc_urls -var/next_external_rsc = 0 +GLOBAL_LIST(external_rsc_urls) #endif @@ -159,13 +158,14 @@ var/next_external_rsc = 0 return null #if (PRELOAD_RSC == 0) + var/static/next_external_rsc = 0 if(external_rsc_urls && external_rsc_urls.len) next_external_rsc = Wrap(next_external_rsc+1, 1, external_rsc_urls.len+1) preload_rsc = external_rsc_urls[next_external_rsc] #endif - clients += src - directory[ckey] = src + GLOB.clients += src + GLOB.directory[ckey] = src //Admin Authorisation var/localhost_addresses = list("127.0.0.1", "::1") @@ -175,9 +175,9 @@ var/next_external_rsc = 0 var/datum/admins/localhost_holder = new(localhost_rank, ckey) localhost_holder.associate(src) if(config.autoadmin) - if(!admin_datums[ckey]) + if(!GLOB.admin_datums[ckey]) var/datum/admin_rank/autorank - for(var/datum/admin_rank/R in admin_ranks) + for(var/datum/admin_rank/R in GLOB.admin_ranks) if(R.name == config.autoadmin_rank) autorank = R break @@ -185,34 +185,60 @@ var/next_external_rsc = 0 to_chat(world, "Autoadmin rank not found") else var/datum/admins/D = new(autorank, ckey) - admin_datums[ckey] = D - holder = admin_datums[ckey] + GLOB.admin_datums[ckey] = D + holder = GLOB.admin_datums[ckey] if(holder) - admins |= src + GLOB.admins |= src holder.owner = src //Mentor Authorisation - var/mentor = mentor_datums[ckey] +/* var/mentor = GLOB.mentor_datums[ckey] if(mentor) verbs += /client/proc/cmd_mentor_say verbs += /client/proc/show_mentor_memo - mentors += src + GLOB.mentors |= src */ //preferences datum - also holds some persistent data for the client (because we may as well keep these datums to a minimum) - prefs = preferences_datums[ckey] + prefs = GLOB.preferences_datums[ckey] if(!prefs) prefs = new /datum/preferences(src) - preferences_datums[ckey] = prefs - else - prefs.parent = src + GLOB.preferences_datums[ckey] = prefs prefs.last_ip = address //these are gonna be used for banning prefs.last_id = computer_id //these are gonna be used for banning if(world.byond_version >= 511 && byond_version >= 511 && prefs.clientfps) vars["fps"] = prefs.clientfps sethotkeys(1) //set hoykeys from preferences (from_pref = 1) + log_access("Login: [key_name(src)] from [address ? address : "localhost"]-[computer_id] || BYOND v[byond_version]") + var/alert_mob_dupe_login = FALSE + if(config.log_access) + for(var/I in GLOB.clients) + if(I == src) + continue + var/client/C = I + if(C.key && (C.key != key) ) + var/matches + if( (C.address == address) ) + matches += "IP ([address])" + if( (C.computer_id == computer_id) ) + if(matches) + matches += " and " + matches += "ID ([computer_id])" + alert_mob_dupe_login = TRUE + if(matches) + if(C) + message_admins("Notice: [key_name_admin(src)] has the same [matches] as [key_name_admin(C)].") + log_access("Notice: [key_name(src)] has the same [matches] as [key_name(C)].") + else + message_admins("Notice: [key_name_admin(src)] has the same [matches] as [key_name_admin(C)] (no longer logged in). ") + log_access("Notice: [key_name(src)] has the same [matches] as [key_name(C)] (no longer logged in).") + . = ..() //calls mob.Login() + if(alert_mob_dupe_login) + set waitfor = FALSE + alert(mob, "You have logged in already with another key this round, please log out of this one NOW or risk being banned!") + connection_time = world.time connection_realtime = world.realtime connection_timeofday = world.timeofday @@ -245,25 +271,25 @@ var/next_external_rsc = 0 qdel(src) return 0 - if( (world.address == address || !address) && !host ) - host = key + if( (world.address == address || !address) && !GLOB.host ) + GLOB.host = key world.update_status() if(holder) add_admin_verbs() to_chat(src, get_message_output("memo")) adminGreet() - if((global.comms_key == "default_pwd" || length(global.comms_key) <= 6) && global.comms_allowed) //It's the default value or less than 6 characters long, but it somehow didn't disable comms. + if((GLOB.comms_key == "default_pwd" || length(GLOB.comms_key) <= 6) && GLOB.comms_allowed) //It's the default value or less than 6 characters long, but it somehow didn't disable comms. to_chat(src, "The server's API key is either too short or is the default value! Consider changing it immediately!") - if(mentor && !holder) - mentor_memo_output("Show") +/* if(mentor && !holder) + mentor_memo_output("Show") */ add_verbs_from_config() set_client_age_from_db() if (isnum(player_age) && player_age == -1) //first connection - if (config.panic_bunker && !holder && !(ckey in deadmins)) + if (config.panic_bunker && !holder && !(ckey in GLOB.deadmins)) log_access("Failed Login: [key] - New account attempting to connect during panic bunker") message_admins("Failed Login: [key] - New account attempting to connect during panic bunker") to_chat(src, "Sorry but the server is currently not accepting connections from never before seen players.") @@ -284,7 +310,7 @@ var/next_external_rsc = 0 else if (isnum(player_age) && player_age < config.notify_new_player_age) message_admins("New user: [key_name_admin(src)] just connected with an age of [player_age] day[(player_age==1?"":"s")]") - if(!IsGuestKey(key) && dbcon.IsConnected()) + if(!IsGuestKey(key) && GLOB.dbcon.IsConnected()) findJoinDate() sync_client_with_db(tdata) @@ -298,17 +324,17 @@ var/next_external_rsc = 0 screen += void - if(prefs.lastchangelog != changelog_hash) //bolds the changelog button on the interface so we know there are updates. + if(prefs.lastchangelog != GLOB.changelog_hash) //bolds the changelog button on the interface so we know there are updates. to_chat(src, "You have unread updates in the changelog.") if(config.aggressive_changelog) changelog() else winset(src, "infowindow.changelog", "font-style=bold") - if(ckey in clientmessages) - for(var/message in clientmessages[ckey]) + if(ckey in GLOB.clientmessages) + for(var/message in GLOB.clientmessages[ckey]) to_chat(src, message) - clientmessages.Remove(ckey) + GLOB.clientmessages.Remove(ckey) if(config && config.autoconvert_notes) convert_notes_sql(ckey) @@ -321,19 +347,18 @@ var/next_external_rsc = 0 if(!tooltips) tooltips = new /datum/tooltip(src) - hook_vr("client_new",list(src)) - ////////////// //DISCONNECT// ////////////// /client/Del() + log_access("Logout: [key_name(src)]") if(holder) adminGreet(1) holder.owner = null - admins -= src - directory -= ckey - clients -= src + GLOB.admins -= src + GLOB.directory -= ckey + GLOB.clients -= src if(movingmob != null) movingmob.client_mobs_in_contents -= mob UNSETEMPTY(movingmob.client_mobs_in_contents) @@ -346,12 +371,12 @@ var/next_external_rsc = 0 if (IsGuestKey(src.key)) return - if(!dbcon.Connect()) + if(!GLOB.dbcon.Connect()) return var/sql_ckey = sanitizeSQL(src.ckey) - var/DBQuery/query_get_client_age = dbcon.NewQuery("SELECT id, datediff(Now(),firstseen) as age FROM [format_table_name("player")] WHERE ckey = '[sql_ckey]'") + var/DBQuery/query_get_client_age = GLOB.dbcon.NewQuery("SELECT id, datediff(Now(),firstseen) as age FROM [format_table_name("player")] WHERE ckey = '[sql_ckey]'") if(!query_get_client_age.Execute()) return @@ -367,18 +392,18 @@ var/next_external_rsc = 0 if (IsGuestKey(src.key)) return - if (!dbcon.Connect()) + if (!GLOB.dbcon.Connect()) return var/sql_ckey = sanitizeSQL(ckey) - var/DBQuery/query_get_ip = dbcon.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE ip = INET_ATON('[address]') AND ckey != '[sql_ckey]'") + var/DBQuery/query_get_ip = GLOB.dbcon.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE ip = INET_ATON('[address]') AND ckey != '[sql_ckey]'") query_get_ip.Execute() related_accounts_ip = "" while(query_get_ip.NextRow()) related_accounts_ip += "[query_get_ip.item[1]], " - var/DBQuery/query_get_cid = dbcon.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE computerid = '[computer_id]' AND ckey != '[sql_ckey]'") + var/DBQuery/query_get_cid = GLOB.dbcon.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE computerid = '[computer_id]' AND ckey != '[sql_ckey]'") if(!query_get_cid.Execute()) return related_accounts_cid = "" @@ -397,13 +422,13 @@ var/next_external_rsc = 0 var/sql_admin_rank = sanitizeSQL(admin_rank) - var/DBQuery/query_log_player = dbcon.NewQuery("INSERT INTO [format_table_name("player")] (id, ckey, firstseen, lastseen, ip, computerid, lastadminrank) VALUES (null, '[sql_ckey]', Now(), Now(), INET_ATON('[sql_ip]'), '[sql_computerid]', '[sql_admin_rank]') ON DUPLICATE KEY UPDATE lastseen = VALUES(lastseen), ip = VALUES(ip), computerid = VALUES(computerid), lastadminrank = VALUES(lastadminrank)") + var/DBQuery/query_log_player = GLOB.dbcon.NewQuery("INSERT INTO [format_table_name("player")] (id, ckey, firstseen, lastseen, ip, computerid, lastadminrank) VALUES (null, '[sql_ckey]', Now(), Now(), INET_ATON('[sql_ip]'), '[sql_computerid]', '[sql_admin_rank]') ON DUPLICATE KEY UPDATE lastseen = VALUES(lastseen), ip = VALUES(ip), computerid = VALUES(computerid), lastadminrank = VALUES(lastadminrank)") if(!query_log_player.Execute()) return //Logging player access - var/DBQuery/query_log_connection = dbcon.NewQuery("INSERT INTO `[format_table_name("connection_log")]` (`id`,`datetime`,`server_ip`,`server_port`,`ckey`,`ip`,`computerid`) VALUES(null,Now(),INET_ATON('[world.internet_address]'),'[world.port]','[sql_ckey]',INET_ATON('[sql_ip]'),'[sql_computerid]')") + var/DBQuery/query_log_connection = GLOB.dbcon.NewQuery("INSERT INTO `[format_table_name("connection_log")]` (`id`,`datetime`,`server_ip`,`server_port`,`ckey`,`ip`,`computerid`) VALUES(null,Now(),INET_ATON('[world.internet_address]'),'[world.port]','[sql_ckey]',INET_ATON('[sql_ip]'),'[sql_computerid]')") query_log_connection.Execute() /client/proc/check_randomizer(topic) @@ -459,7 +484,7 @@ var/next_external_rsc = 0 cidcheck -= ckey else var/sql_ckey = sanitizeSQL(ckey) - var/DBQuery/query_cidcheck = dbcon.NewQuery("SELECT computerid FROM [format_table_name("player")] WHERE ckey = '[sql_ckey]'") + var/DBQuery/query_cidcheck = GLOB.dbcon.NewQuery("SELECT computerid FROM [format_table_name("player")] WHERE ckey = '[sql_ckey]'") query_cidcheck.Execute() var/lastcid @@ -487,13 +512,13 @@ var/next_external_rsc = 0 var/const/adminckey = "CID-Error" var/sql_ckey = sanitizeSQL(ckey) //check to see if we noted them in the last day. - var/DBQuery/query_get_notes = dbcon.NewQuery("SELECT id FROM [format_table_name("messages")] WHERE type = 'note' AND targetckey = '[sql_ckey]' AND adminckey = '[adminckey]' AND timestamp + INTERVAL 1 DAY < NOW()") + var/DBQuery/query_get_notes = GLOB.dbcon.NewQuery("SELECT id FROM [format_table_name("messages")] WHERE type = 'note' AND targetckey = '[sql_ckey]' AND adminckey = '[adminckey]' AND timestamp + INTERVAL 1 DAY < NOW()") if(!query_get_notes.Execute()) return if(query_get_notes.NextRow()) return //regardless of above, make sure their last note is not from us, as no point in repeating the same note over and over. - query_get_notes = dbcon.NewQuery("SELECT adminckey FROM [format_table_name("messages")] WHERE targetckey = '[sql_ckey]' ORDER BY timestamp DESC LIMIT 1") + query_get_notes = GLOB.dbcon.NewQuery("SELECT adminckey FROM [format_table_name("messages")] WHERE targetckey = '[sql_ckey]' ORDER BY timestamp DESC LIMIT 1") if(!query_get_notes.Execute()) return if(query_get_notes.NextRow()) @@ -551,7 +576,7 @@ var/next_external_rsc = 0 ) 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) + getFilesSlow(src, SSassets.cache, register_asset = FALSE) //Hook, override it to run code when dir changes diff --git a/code/modules/client/message.dm b/code/modules/client/message.dm index d804fd390f..2b4f8453d7 100644 --- a/code/modules/client/message.dm +++ b/code/modules/client/message.dm @@ -1,9 +1,9 @@ -var/list/clientmessages = list() +GLOBAL_LIST_EMPTY(clientmessages) /proc/addclientmessage(var/ckey, var/message) ckey = ckey(ckey) if (!ckey || !message) return - if (!(ckey in clientmessages)) - clientmessages[ckey] = list() - clientmessages[ckey] += message \ No newline at end of file + if (!(ckey in GLOB.clientmessages)) + GLOB.clientmessages[ckey] = list() + GLOB.clientmessages[ckey] += message \ No newline at end of file diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 20a57f2d0e..f398062cd5 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1,6 +1,6 @@ -var/list/preferences_datums = list() +GLOBAL_LIST_EMPTY(preferences_datums) @@ -172,10 +172,10 @@ var/list/preferences_datums = list() /datum/preferences/New(client/C) parent = C - custom_names["ai"] = pick(ai_names) - custom_names["cyborg"] = pick(ai_names) - custom_names["clown"] = pick(clown_names) - custom_names["mime"] = pick(mime_names) + custom_names["ai"] = pick(GLOB.ai_names) + custom_names["cyborg"] = pick(GLOB.ai_names) + custom_names["clown"] = pick(GLOB.clown_names) + custom_names["mime"] = pick(GLOB.mime_names) if(istype(C)) if(!IsGuestKey(C.key)) load_path(C.ckey) @@ -292,7 +292,7 @@ var/list/preferences_datums = list() dat += "Announce Login: [(toggles & ANNOUNCE_LOGIN)?"On":"Off"]
    " if(unlock_content || check_rights_for(user.client, R_ADMIN)) - dat += "OOC:     Change
    " + dat += "OOC:     Change
    " if(unlock_content) dat += "BYOND Membership Publicity: [(toggles & MEMBER_PUBLIC) ? "Public" : "Hidden"]
    " @@ -364,13 +364,13 @@ var/list/preferences_datums = list() src.be_special = list() - for (var/i in special_roles) + for (var/i in GLOB.special_roles) if(jobban_isbanned(user, i)) dat += "Be [capitalize(i)]: BANNED
    " else var/days_remaining = null - if(config.use_age_restriction_for_jobs && ispath(special_roles[i])) //If it's a game mode antag, check if the player meets the minimum age - var/mode_path = special_roles[i] + if(config.use_age_restriction_for_jobs && ispath(GLOB.special_roles[i])) //If it's a game mode antag, check if the player meets the minimum age + var/mode_path = GLOB.special_roles[i] var/datum/game_mode/temp_mode = new mode_path days_remaining = temp_mode.get_remaining_days(user.client) @@ -438,7 +438,7 @@ var/list/preferences_datums = list() dat += "Legs: [features["legs"]]
    " if("taur" in pref_species.mutant_bodyparts) dat += "Taur: [features["taur"]]
    " - if("wings" in pref_species.mutant_bodyparts && r_wings_list.len >1) + if("wings" in pref_species.mutant_bodyparts && GLOB.r_wings_list.len >1) dat += "Wings: [features["wings"]]
    " if("xenohead" in pref_species.mutant_bodyparts) dat += "Caste: [features["xenohead"]]
    " @@ -575,7 +575,7 @@ var/list/preferences_datums = list() else HTML += "[rank]
    " continue - if((rank in command_positions) || (rank == "AI"))//Bold head jobs + if((rank in GLOB.command_positions) || (rank == "AI"))//Bold head jobs HTML += "[rank]" else HTML += "[rank]" @@ -779,7 +779,7 @@ var/list/preferences_datums = list() if(href_list["jobbancheck"]) var/job = sanitizeSQL(href_list["jobbancheck"]) var/sql_ckey = sanitizeSQL(user.ckey) - var/DBQuery/query_get_jobban = dbcon.NewQuery("SELECT reason, bantime, duration, expiration_time, a_ckey FROM [format_table_name("ban")] WHERE ckey = '[sql_ckey]' AND (bantype = 'JOB_PERMABAN' OR (bantype = 'JOB_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned) AND job = '[job]'") + var/DBQuery/query_get_jobban = GLOB.dbcon.NewQuery("SELECT reason, bantime, duration, expiration_time, a_ckey FROM [format_table_name("ban")] WHERE ckey = '[sql_ckey]' AND (bantype = 'JOB_PERMABAN' OR (bantype = 'JOB_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned) AND job = '[job]'") if(!query_get_jobban.warn_execute()) return if(query_get_jobban.NextRow()) @@ -848,7 +848,7 @@ var/list/preferences_datums = list() if("s_tone") skin_tone = random_skin_tone() if("bag") - backbag = pick(backbaglist) + backbag = pick(GLOB.backbaglist) if("all") random_character() @@ -856,12 +856,12 @@ var/list/preferences_datums = list() switch(href_list["preference"]) if("ghostform") if(unlock_content) - var/new_form = input(user, "Thanks for supporting BYOND - Choose your ghostly form:","Thanks for supporting BYOND",null) as null|anything in ghost_forms + var/new_form = input(user, "Thanks for supporting BYOND - Choose your ghostly form:","Thanks for supporting BYOND",null) as null|anything in GLOB.ghost_forms if(new_form) ghost_form = new_form if("ghostorbit") if(unlock_content) - var/new_orbit = input(user, "Thanks for supporting BYOND - Choose your ghostly orbit:","Thanks for supporting BYOND", null) as null|anything in ghost_orbits + var/new_orbit = input(user, "Thanks for supporting BYOND - Choose your ghostly orbit:","Thanks for supporting BYOND", null) as null|anything in GLOB.ghost_orbits if(new_orbit) ghost_orbit = new_orbit @@ -918,23 +918,23 @@ var/list/preferences_datums = list() if("hair_style") var/new_hair_style if(gender == MALE) - new_hair_style = input(user, "Choose your character's hair style:", "Character Preference") as null|anything in hair_styles_male_list + new_hair_style = input(user, "Choose your character's hair style:", "Character Preference") as null|anything in GLOB.hair_styles_male_list else - new_hair_style = input(user, "Choose your character's hair style:", "Character Preference") as null|anything in hair_styles_female_list + new_hair_style = input(user, "Choose your character's hair style:", "Character Preference") as null|anything in GLOB.hair_styles_female_list if(new_hair_style) hair_style = new_hair_style if("next_hair_style") if (gender == MALE) - hair_style = next_list_item(hair_style, hair_styles_male_list) + hair_style = next_list_item(hair_style, GLOB.hair_styles_male_list) else - hair_style = next_list_item(hair_style, hair_styles_female_list) + hair_style = next_list_item(hair_style, GLOB.hair_styles_female_list) if("previous_hair_style") if (gender == MALE) - hair_style = previous_list_item(hair_style, hair_styles_male_list) + hair_style = previous_list_item(hair_style, GLOB.hair_styles_male_list) else - hair_style = previous_list_item(hair_style, hair_styles_female_list) + hair_style = previous_list_item(hair_style, GLOB.hair_styles_female_list) if("facial") var/new_facial = input(user, "Choose your character's facial-hair colour:", "Character Preference") as null|color @@ -944,45 +944,45 @@ var/list/preferences_datums = list() if("facial_hair_style") var/new_facial_hair_style if(gender == MALE) - new_facial_hair_style = input(user, "Choose your character's facial-hair style:", "Character Preference") as null|anything in facial_hair_styles_male_list + new_facial_hair_style = input(user, "Choose your character's facial-hair style:", "Character Preference") as null|anything in GLOB.facial_hair_styles_male_list else - new_facial_hair_style = input(user, "Choose your character's facial-hair style:", "Character Preference") as null|anything in facial_hair_styles_female_list + new_facial_hair_style = input(user, "Choose your character's facial-hair style:", "Character Preference") as null|anything in GLOB.facial_hair_styles_female_list if(new_facial_hair_style) facial_hair_style = new_facial_hair_style if("next_facehair_style") if (gender == MALE) - facial_hair_style = next_list_item(facial_hair_style, facial_hair_styles_male_list) + facial_hair_style = next_list_item(facial_hair_style, GLOB.facial_hair_styles_male_list) else - facial_hair_style = next_list_item(facial_hair_style, facial_hair_styles_female_list) + facial_hair_style = next_list_item(facial_hair_style, GLOB.facial_hair_styles_female_list) if("previous_facehair_style") if (gender == MALE) - facial_hair_style = previous_list_item(facial_hair_style, facial_hair_styles_male_list) + facial_hair_style = previous_list_item(facial_hair_style, GLOB.facial_hair_styles_male_list) else - facial_hair_style = previous_list_item(facial_hair_style, facial_hair_styles_female_list) + facial_hair_style = previous_list_item(facial_hair_style, GLOB.facial_hair_styles_female_list) if("underwear") var/new_underwear if(gender == MALE) - new_underwear = input(user, "Choose your character's underwear:", "Character Preference") as null|anything in underwear_m + new_underwear = input(user, "Choose your character's underwear:", "Character Preference") as null|anything in GLOB.underwear_m else - new_underwear = input(user, "Choose your character's underwear:", "Character Preference") as null|anything in underwear_f + new_underwear = input(user, "Choose your character's underwear:", "Character Preference") as null|anything in GLOB.underwear_f if(new_underwear) underwear = new_underwear if("undershirt") var/new_undershirt if(gender == MALE) - new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in undershirt_m + new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in GLOB.undershirt_m else - new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in undershirt_f + new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in GLOB.undershirt_f if(new_undershirt) undershirt = new_undershirt if("socks") var/new_socks - new_socks = input(user, "Choose your character's socks:", "Character Preference") as null|anything in socks_list + new_socks = input(user, "Choose your character's socks:", "Character Preference") as null|anything in GLOB.socks_list if(new_socks) socks = new_socks @@ -993,10 +993,10 @@ var/list/preferences_datums = list() if("species") - var/result = input(user, "Select a species", "Species Selection") as null|anything in roundstart_species + var/result = input(user, "Select a species", "Species Selection") as null|anything in GLOB.roundstart_species if(result) - var/newtype = roundstart_species[result] + var/newtype = GLOB.roundstart_species[result] pref_species = new newtype() //Now that we changed our species, we must verify that the mutant colour is still allowed. var/temp_hsv = RGBtoHSV(features["mcolor"]) @@ -1042,7 +1042,7 @@ var/list/preferences_datums = list() if("tail_lizard") var/new_tail - new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in tails_list_lizard + new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in GLOB.tails_list_lizard if(new_tail) features["tail_lizard"] = new_tail if(new_tail != "None") @@ -1050,14 +1050,14 @@ var/list/preferences_datums = list() if("tail_human") var/new_tail - new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in tails_list_human + new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in GLOB.tails_list_human if(new_tail) features["tail_human"] = new_tail if(new_tail != "None") features["taur"] = "None" if("mam_tail") var/new_tail - new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in mam_tails_list + new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in GLOB.mam_tails_list if(new_tail) features["mam_tail"] = new_tail if(new_tail != "None") @@ -1065,7 +1065,7 @@ var/list/preferences_datums = list() if("taur") var/new_taur - new_taur = input(user, "Choose your character's tauric body:", "Character Preference") as null|anything in taur_list + new_taur = input(user, "Choose your character's tauric body:", "Character Preference") as null|anything in GLOB.taur_list if(new_taur) features["taur"] = new_taur if(new_taur != "None") @@ -1075,92 +1075,92 @@ var/list/preferences_datums = list() /* Doesn't exist yet. will include facial overlays to mimic 5th port species heads. if("mam_snout") var/new_snout - new_snout = input(user, "Choose your character's snout:", "Character Preference") as null|anything in mam_snouts_list + new_snout = input(user, "Choose your character's snout:", "Character Preference") as null|anything in GLOB.mam_snouts_list if(new_snout) features["snout"] = new_snout */ if("snout") var/new_snout - new_snout = input(user, "Choose your character's snout:", "Character Preference") as null|anything in snouts_list + new_snout = input(user, "Choose your character's snout:", "Character Preference") as null|anything in GLOB.snouts_list if(new_snout) features["snout"] = new_snout if("horns") var/new_horns - new_horns = input(user, "Choose your character's horns:", "Character Preference") as null|anything in horns_list + new_horns = input(user, "Choose your character's horns:", "Character Preference") as null|anything in GLOB.horns_list if(new_horns) features["horns"] = new_horns if("mam_ears") var/new_ears - new_ears = input(user, "Choose your character's ears:", "Character Preference") as null|anything in mam_ears_list + new_ears = input(user, "Choose your character's ears:", "Character Preference") as null|anything in GLOB.mam_ears_list if(new_ears) features["mam_ears"] = new_ears if("ears") var/new_ears - new_ears = input(user, "Choose your character's ears:", "Character Preference") as null|anything in ears_list + new_ears = input(user, "Choose your character's ears:", "Character Preference") as null|anything in GLOB.ears_list if(new_ears) features["ears"] = new_ears if("wings") var/new_wings - new_wings = input(user, "Choose your character's wings:", "Character Preference") as null|anything in r_wings_list + new_wings = input(user, "Choose your character's wings:", "Character Preference") as null|anything in GLOB.r_wings_list if(new_wings) features["wings"] = new_wings if("frills") var/new_frills - new_frills = input(user, "Choose your character's frills:", "Character Preference") as null|anything in frills_list + new_frills = input(user, "Choose your character's frills:", "Character Preference") as null|anything in GLOB.frills_list if(new_frills) features["frills"] = new_frills if("spines") var/new_spines - new_spines = input(user, "Choose your character's spines:", "Character Preference") as null|anything in spines_list + new_spines = input(user, "Choose your character's spines:", "Character Preference") as null|anything in GLOB.spines_list if(new_spines) features["spines"] = new_spines if("body_markings") var/new_body_markings - new_body_markings = input(user, "Choose your character's body markings:", "Character Preference") as null|anything in body_markings_list + new_body_markings = input(user, "Choose your character's body markings:", "Character Preference") as null|anything in GLOB.body_markings_list if(new_body_markings) features["body_markings"] = new_body_markings if("mam_body_markings") var/new_mam_body_markings - new_mam_body_markings = input(user, "Choose your character's body markings:", "Character Preference") as null|anything in mam_body_markings_list + new_mam_body_markings = input(user, "Choose your character's body markings:", "Character Preference") as null|anything in GLOB.mam_body_markings_list if(new_mam_body_markings) features["mam_body_markings"] = new_mam_body_markings //Xeno Bodyparts if("xenohead")//Head or caste type var/new_head - new_head = input(user, "Choose your character's caste:", "Character Preference") as null|anything in xeno_head_list + new_head = input(user, "Choose your character's caste:", "Character Preference") as null|anything in GLOB.xeno_head_list if(new_head) features["xenohead"] = new_head if("xenotail")//Currently one one type, more maybe later if someone sprites them. Might include animated variants in the future. var/new_tail - new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in xeno_tail_list + new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in GLOB.xeno_tail_list if(new_tail) features["xenotail"] = new_tail if("xenodorsal") var/new_dors - new_dors = input(user, "Choose your character's dorsal tube type:", "Character Preference") as null|anything in xeno_dorsal_list + new_dors = input(user, "Choose your character's dorsal tube type:", "Character Preference") as null|anything in GLOB.xeno_dorsal_list if(new_dors) features["xenodorsal"] = new_dors if("legs") var/new_legs - new_legs = input(user, "Choose your character's legs:", "Character Preference") as null|anything in legs_list + new_legs = input(user, "Choose your character's legs:", "Character Preference") as null|anything in GLOB.legs_list if(new_legs) features["legs"] = new_legs if("s_tone") - var/new_s_tone = input(user, "Choose your character's skin-tone:", "Character Preference") as null|anything in skin_tones + var/new_s_tone = input(user, "Choose your character's skin-tone:", "Character Preference") as null|anything in GLOB.skin_tones if(new_s_tone) skin_tone = new_s_tone @@ -1170,12 +1170,12 @@ var/list/preferences_datums = list() ooccolor = sanitize_ooccolor(new_ooccolor) if("bag") - var/new_backbag = input(user, "Choose your character's style of bag:", "Character Preference") as null|anything in backbaglist + var/new_backbag = input(user, "Choose your character's style of bag:", "Character Preference") as null|anything in GLOB.backbaglist if(new_backbag) backbag = new_backbag if("uplink_loc") - var/new_loc = input(user, "Choose your character's traitor uplink spawn location:", "Character Preference") as null|anything in uplink_spawn_loc_list + var/new_loc = input(user, "Choose your character's traitor uplink spawn location:", "Character Preference") as null|anything in GLOB.uplink_spawn_loc_list if(new_loc) uplink_spawn_loc = new_loc @@ -1222,7 +1222,7 @@ var/list/preferences_datums = list() to_chat(user, "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and .") if("sec_dept") - var/department = input(user, "Choose your prefered security department:", "Security Departments") as null|anything in security_depts_prefs + var/department = input(user, "Choose your prefered security department:", "Security Departments") as null|anything in GLOB.security_depts_prefs if(department) prefered_security_department = department @@ -1277,7 +1277,7 @@ var/list/preferences_datums = list() if("cock_shape") var/new_shape - new_shape = input(user, "Penis shape:", "Character Preference") as null|anything in cock_shapes_list + new_shape = input(user, "Penis shape:", "Character Preference") as null|anything in GLOB.cock_shapes_list if(new_shape) features["cock_shape"] = new_shape @@ -1309,7 +1309,7 @@ var/list/preferences_datums = list() user << "Invalid color. Your color is not bright enough." if("breasts_size") var/new_size - new_size = input(user, "Breast Size", "Character Preference") as null|anything in breasts_size_list + new_size = input(user, "Breast Size", "Character Preference") as null|anything in GLOB.breasts_size_list if(new_size) features["breasts_size"] = new_size @@ -1492,10 +1492,10 @@ var/list/preferences_datums = list() if("lobby_music") toggles ^= SOUND_LOBBY - if(toggles & SOUND_LOBBY) - user << sound(ticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1) + if((toggles & SOUND_LOBBY) && user.client) + user.client.playtitlemusic() else - user.stopLobbySound() + user.stop_sound_channel(CHANNEL_LOBBYMUSIC) if("ghost_ears") chat_toggles ^= CHAT_GHOSTEARS @@ -1521,12 +1521,12 @@ var/list/preferences_datums = list() if("parallaxup") parallax = Wrap(parallax + 1, PARALLAX_INSANE, PARALLAX_DISABLE + 1) if (parent && parent.mob && parent.mob.hud_used) - parent.mob.hud_used.update_parallax_pref() + parent.mob.hud_used.update_parallax_pref(parent.mob) if("parallaxdown") parallax = Wrap(parallax - 1, PARALLAX_INSANE, PARALLAX_DISABLE + 1) if (parent && parent.mob && parent.mob.hud_used) - parent.mob.hud_used.update_parallax_pref() + parent.mob.hud_used.update_parallax_pref(parent.mob) if("save") save_preferences() @@ -1535,10 +1535,8 @@ var/list/preferences_datums = list() if("load") load_preferences() load_character() - attempt_vr(parent.prefs_vr,"load_vore","") if("changeslot") - attempt_vr(parent.prefs_vr,"load_vore","") if(!load_character(text2num(href_list["num"]))) random_character() real_name = random_unique_name(gender) @@ -1562,9 +1560,9 @@ var/list/preferences_datums = list() var/firstspace = findtext(real_name, " ") var/name_length = length(real_name) if(!firstspace) //we need a surname - real_name += " [pick(last_names)]" + real_name += " [pick(GLOB.last_names)]" else if(firstspace == name_length) - real_name += "[pick(last_names)]" + real_name += "[pick(GLOB.last_names)]" character.real_name = real_name character.name = character.real_name diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index b4006ea5a9..4f8155f680 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -106,7 +106,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car //It's only really meant to avoid annoying frequent players //if your savefile is 3 months out of date, then 'tough shit'. /datum/preferences/proc/update_character(current_version, savefile/S) - if(pref_species && !(pref_species.id in roundstart_species)) + if(pref_species && !(pref_species.id in GLOB.roundstart_species)) var/rando_race = pick(config.roundstart_races) pref_species = new rando_race() @@ -126,17 +126,17 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car if(current_version < 17) features["legs"] = "Normal Legs" if(current_version < 18)//this should lower the amount of lag when you select or change something. - features["mam_body_markings"] = sanitize_inlist(features["mam_body_markings"], mam_body_markings_list) - features["mam_ears"] = sanitize_inlist(features["mam_ears"], mam_ears_list) - features["mam_tail"] = sanitize_inlist(features["mam_tail"], mam_tails_list) - features["taur"] = sanitize_inlist(features["taur"], taur_list) + features["mam_body_markings"] = sanitize_inlist(features["mam_body_markings"], GLOB.mam_body_markings_list) + features["mam_ears"] = sanitize_inlist(features["mam_ears"], GLOB.mam_ears_list) + features["mam_tail"] = sanitize_inlist(features["mam_tail"], GLOB.mam_tails_list) + features["taur"] = sanitize_inlist(features["taur"], GLOB.taur_list) //Xeno features - features["xenotail"] = sanitize_inlist(features["xenotail"], xeno_tail_list) - features["xenohead"] = sanitize_inlist(features["xenohead"], xeno_head_list) - features["xenodorsal"] = sanitize_inlist(features["xenodorsal"], xeno_dorsal_list) + features["xenotail"] = sanitize_inlist(features["xenotail"], GLOB.xeno_tail_list) + features["xenohead"] = sanitize_inlist(features["xenohead"], GLOB.xeno_head_list) + features["xenodorsal"] = sanitize_inlist(features["xenodorsal"], GLOB.xeno_dorsal_list) //cock features features["has_cock"] = sanitize_integer(features["has_cock"], 0, 1, 0) - features["cock_shape"] = sanitize_inlist(features["cock_shape"], cock_shapes_list, "Human") + features["cock_shape"] = sanitize_inlist(features["cock_shape"], GLOB.cock_shapes_list, "Human") features["cock_color"] = sanitize_hexcolor(features["cock_color"], 3, 0) features["cock_length"] = sanitize_integer(features["cock_length"], COCK_SIZE_MIN, COCK_SIZE_MAX, 6) //balls features @@ -144,12 +144,12 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car features["balls_color"] = sanitize_hexcolor(features["balls_color"], 3, 0) features["balls_size"] = sanitize_integer(features["balls_size"], BALLS_SIZE_MIN, BALLS_SIZE_MAX, BALLS_SIZE_DEF) features["balls_sack_size"] = sanitize_integer(features["balls_sack_size"], BALLS_SACK_SIZE_MIN, BALLS_SACK_SIZE_MAX, BALLS_SACK_SIZE_DEF) - features["balls_fluid"] = sanitize_inlist(features["balls_fluid"], cum_id_list, "semen") + features["balls_fluid"] = sanitize_inlist(features["balls_fluid"], GLOB.cum_id_list, "semen") //breasts features features["has_breasts"] = sanitize_integer(features["has_breasts"], 0, 1, 0) - features["breasts_size"] = sanitize_inlist(features["breasts_size"], breasts_size_list, "C") + features["breasts_size"] = sanitize_inlist(features["breasts_size"], GLOB.breasts_size_list, "C") features["breasts_color"] = sanitize_hexcolor(features["breasts_color"], 3, 0) - features["breasts_fluid"] = sanitize_inlist(features["breasts_fluid"], milk_id_list, "milk") + features["breasts_fluid"] = sanitize_inlist(features["breasts_fluid"], GLOB.milk_id_list, "milk") //vagina features features["has_vag"] = sanitize_integer(features["has_vag"], 0, 1, 0) features["vag_color"] = sanitize_hexcolor(features["vag_color"], 3, 0) @@ -225,10 +225,10 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car toggles = sanitize_integer(toggles, 0, 65535, initial(toggles)) clientfps = sanitize_integer(clientfps, 0, 1000, 0) parallax = sanitize_integer(parallax, PARALLAX_INSANE, PARALLAX_DISABLE, null) - ghost_form = sanitize_inlist(ghost_form, ghost_forms, initial(ghost_form)) - ghost_orbit = sanitize_inlist(ghost_orbit, ghost_orbits, initial(ghost_orbit)) - ghost_accs = sanitize_inlist(ghost_accs, ghost_accs_options, GHOST_ACCS_DEFAULT_OPTION) - ghost_others = sanitize_inlist(ghost_others, ghost_others_options, GHOST_OTHERS_DEFAULT_OPTION) + ghost_form = sanitize_inlist(ghost_form, GLOB.ghost_forms, initial(ghost_form)) + ghost_orbit = sanitize_inlist(ghost_orbit, GLOB.ghost_orbits, initial(ghost_orbit)) + ghost_accs = sanitize_inlist(ghost_accs, GLOB.ghost_accs_options, GHOST_ACCS_DEFAULT_OPTION) + ghost_others = sanitize_inlist(ghost_others, GLOB.ghost_others_options, GHOST_OTHERS_DEFAULT_OPTION) return 1 @@ -294,8 +294,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car //Species var/species_id S["species"] >> species_id - if(config.mutant_races && species_id && (species_id in roundstart_species)) - var/newtype = roundstart_species[species_id] + if(config.mutant_races && species_id && (species_id in GLOB.roundstart_species)) + var/newtype = GLOB.roundstart_species[species_id] pref_species = new newtype() else var/rando_race = pick(config.roundstart_races) @@ -406,16 +406,16 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car be_random_body = sanitize_integer(be_random_body, 0, 1, initial(be_random_body)) gender = sanitize_gender(gender) if(gender == MALE) - hair_style = sanitize_inlist(hair_style, hair_styles_male_list) - facial_hair_style = sanitize_inlist(facial_hair_style, facial_hair_styles_male_list) -// underwear = sanitize_inlist(underwear, underwear_m) -// undershirt = sanitize_inlist(undershirt, undershirt_m) + hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_male_list) + facial_hair_style = sanitize_inlist(facial_hair_style, GLOB.facial_hair_styles_male_list) +// underwear = sanitize_inlist(underwear, GLOB.underwear_m) +// undershirt = sanitize_inlist(undershirt, GLOB.undershirt_m) else - hair_style = sanitize_inlist(hair_style, hair_styles_female_list) - facial_hair_style = sanitize_inlist(facial_hair_style, facial_hair_styles_female_list) -// underwear = sanitize_inlist(underwear, underwear_f) -// undershirt = sanitize_inlist(undershirt, undershirt_f) -// socks = sanitize_inlist(socks, socks_list) + hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_female_list) + facial_hair_style = sanitize_inlist(facial_hair_style, GLOB.facial_hair_styles_female_list) +// underwear = sanitize_inlist(underwear, GLOB.underwear_f) +// undershirt = sanitize_inlist(undershirt, GLOB.undershirt_f) +// socks = sanitize_inlist(socks, GLOB.socks_list) underwear = "Nude" undershirt = "Nude" socks = "Nude" @@ -423,19 +423,19 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car hair_color = sanitize_hexcolor(hair_color, 3, 0) facial_hair_color = sanitize_hexcolor(facial_hair_color, 3, 0) eye_color = sanitize_hexcolor(eye_color, 3, 0) - skin_tone = sanitize_inlist(skin_tone, skin_tones) - backbag = sanitize_inlist(backbag, backbaglist, initial(backbag)) - uplink_spawn_loc = sanitize_inlist(uplink_spawn_loc, uplink_spawn_loc_list, initial(uplink_spawn_loc)) + skin_tone = sanitize_inlist(skin_tone, GLOB.skin_tones) + backbag = sanitize_inlist(backbag, GLOB.backbaglist, initial(backbag)) + uplink_spawn_loc = sanitize_inlist(uplink_spawn_loc, GLOB.uplink_spawn_loc_list, initial(uplink_spawn_loc)) features["mcolor"] = sanitize_hexcolor(features["mcolor"], 3, 0) - features["tail_lizard"] = sanitize_inlist(features["tail_lizard"], tails_list_lizard) - features["tail_human"] = sanitize_inlist(features["tail_human"], tails_list_human, "None") - features["snout"] = sanitize_inlist(features["snout"], snouts_list) - features["horns"] = sanitize_inlist(features["horns"], horns_list) - features["ears"] = sanitize_inlist(features["ears"], ears_list, "None") - features["frills"] = sanitize_inlist(features["frills"], frills_list) - features["spines"] = sanitize_inlist(features["spines"], spines_list) - features["body_markings"] = sanitize_inlist(features["body_markings"], body_markings_list) - features["feature_lizard_legs"] = sanitize_inlist(features["legs"], legs_list, "Normal Legs") + features["tail_lizard"] = sanitize_inlist(features["tail_lizard"], GLOB.tails_list_lizard) + features["tail_human"] = sanitize_inlist(features["tail_human"], GLOB.tails_list_human, "None") + features["snout"] = sanitize_inlist(features["snout"], GLOB.snouts_list) + features["horns"] = sanitize_inlist(features["horns"], GLOB.horns_list) + features["ears"] = sanitize_inlist(features["ears"], GLOB.ears_list, "None") + features["frills"] = sanitize_inlist(features["frills"], GLOB.frills_list) + features["spines"] = sanitize_inlist(features["spines"], GLOB.spines_list) + features["body_markings"] = sanitize_inlist(features["body_markings"], GLOB.body_markings_list) + features["feature_lizard_legs"] = sanitize_inlist(features["legs"], GLOB.legs_list, "Normal Legs") joblessrole = sanitize_integer(joblessrole, 1, 3, initial(joblessrole)) job_civilian_high = sanitize_integer(job_civilian_high, 0, 65535, initial(job_civilian_high)) diff --git a/code/modules/client/preferences_toggles.dm b/code/modules/client/preferences_toggles.dm index 57cd0328f9..8ee179cdab 100644 --- a/code/modules/client/preferences_toggles.dm +++ b/code/modules/client/preferences_toggles.dm @@ -6,7 +6,7 @@ prefs.chat_toggles ^= CHAT_GHOSTEARS to_chat(src, "As a ghost, you will now [(prefs.chat_toggles & CHAT_GHOSTEARS) ? "see all speech in the world" : "only see speech from nearby mobs"].") prefs.save_preferences() - feedback_add_details("admin_verb","TGE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("preferences_verb","Toggle Ghost Ears|[prefs.chat_toggles & CHAT_GHOSTEARS]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/verb/toggle_ghost_sight() set name = "Show/Hide GhostSight" @@ -15,7 +15,7 @@ prefs.chat_toggles ^= CHAT_GHOSTSIGHT to_chat(src, "As a ghost, you will now [(prefs.chat_toggles & CHAT_GHOSTSIGHT) ? "see all emotes in the world" : "only see emotes from nearby mobs"].") prefs.save_preferences() - feedback_add_details("admin_verb","TGS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("preferences_verb","Toggle Ghost Sight|[prefs.chat_toggles & CHAT_GHOSTSIGHT]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/verb/toggle_ghost_whispers() set name = "Show/Hide GhostWhispers" @@ -24,7 +24,7 @@ prefs.chat_toggles ^= CHAT_GHOSTWHISPER to_chat(src, "As a ghost, you will now [(prefs.chat_toggles & CHAT_GHOSTWHISPER) ? "see all whispers in the world" : "only see whispers from nearby mobs"].") prefs.save_preferences() - feedback_add_details("admin_verb","TGW") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("preferences_verb","Toggle Ghost Whispers|[prefs.chat_toggles & CHAT_GHOSTWHISPER]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/verb/toggle_ghost_radio() set name = "Show/Hide GhostRadio" @@ -33,7 +33,7 @@ prefs.chat_toggles ^= CHAT_GHOSTRADIO to_chat(src, "As a ghost, you will now [(prefs.chat_toggles & CHAT_GHOSTRADIO) ? "see radio chatter" : "not see radio chatter"].") prefs.save_preferences() - feedback_add_details("admin_verb","TGR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! //social experiment, increase the generation whenever you copypaste this shamelessly GENERATION 1 + feedback_add_details("preferences_verb","Toggle Ghost Radio|[prefs.chat_toggles & CHAT_GHOSTRADIO]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! //social experiment, increase the generation whenever you copypaste this shamelessly GENERATION 1 /client/verb/toggle_ghost_pda() set name = "Show/Hide GhostPDA" @@ -42,89 +42,26 @@ prefs.chat_toggles ^= CHAT_GHOSTPDA to_chat(src, "As a ghost, you will now [(prefs.chat_toggles & CHAT_GHOSTPDA) ? "see all pda messages in the world" : "only see pda messages from nearby mobs"].") prefs.save_preferences() - feedback_add_details("admin_verb","TGP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/toggle_hear_radio() - set name = "Show/Hide RadioChatter" - set category = "Preferences" - set desc = "Toggle seeing radiochatter from nearby radios and speakers" - if(!holder) return - prefs.chat_toggles ^= CHAT_RADIO - prefs.save_preferences() - to_chat(usr, "You will [(prefs.chat_toggles & CHAT_RADIO) ? "now" : "no longer"] see radio chatter from nearby radios or speakers") - feedback_add_details("admin_verb","THR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("preferences_verb","Toggle Ghost PDA|[prefs.chat_toggles & CHAT_GHOSTPDA]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +//please be aware that the following two verbs have inverted stat output, so that "Toggle Deathrattle|1" still means you activated it /client/verb/toggle_deathrattle() set name = "Toggle Deathrattle" set category = "Preferences" - set desc = "Toggle recieving a message in deadchat when sentient mobs \ - die." + set desc = "Toggle recieving a message in deadchat when sentient mobs die." prefs.toggles ^= DISABLE_DEATHRATTLE prefs.save_preferences() to_chat(usr, "You will [(prefs.toggles & DISABLE_DEATHRATTLE) ? "no longer" : "now"] get messages when a sentient mob dies.") - feedback_add_details("admin_verb", "TDR") // If you are copy-pasting this, maybe you should spend some time reading the comments. + feedback_add_details("preferences_verb", "Toggle Deathrattle|[!(prefs.toggles & DISABLE_DEATHRATTLE)]") //If you are copy-pasting this, maybe you should spend some time reading the comments. /client/verb/toggle_arrivalrattle() set name = "Toggle Arrivalrattle" set category = "Preferences" - set desc = "Toggle recieving a message in deadchat when someone joins \ - the station." + set desc = "Toggle recieving a message in deadchat when someone joins the station." prefs.toggles ^= DISABLE_ARRIVALRATTLE to_chat(usr, "You will [(prefs.toggles & DISABLE_ARRIVALRATTLE) ? "no longer" : "now"] get messages when someone joins the station.") prefs.save_preferences() - feedback_add_details("admin_verb", "TAR") // If you are copy-pasting this, maybe you should rethink where your life went so wrong. - -/client/proc/toggleadminhelpsound() - set name = "Hear/Silence Adminhelps" - set category = "Preferences" - set desc = "Toggle hearing a notification when admin PMs are received" - if(!holder) - return - prefs.toggles ^= SOUND_ADMINHELP - prefs.save_preferences() - to_chat(usr, "You will [(prefs.toggles & SOUND_ADMINHELP) ? "now" : "no longer"] hear a sound when adminhelps arrive.") - feedback_add_details("admin_verb","AHS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/toggleannouncelogin() - set name = "Do/Don't Announce Login" - set category = "Preferences" - set desc = "Toggle if you want an announcement to admins when you login during a round" - if(!holder) - return - prefs.toggles ^= ANNOUNCE_LOGIN - prefs.save_preferences() - to_chat(usr, "You will [(prefs.toggles & ANNOUNCE_LOGIN) ? "now" : "no longer"] have an announcement to other admins when you login.") - feedback_add_details("admin_verb","TAL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/deadchat() - set name = "Show/Hide Deadchat" - set category = "Preferences" - set desc ="Toggles seeing deadchat" - prefs.chat_toggles ^= CHAT_DEAD - prefs.save_preferences() - to_chat(src, "You will [(prefs.chat_toggles & CHAT_DEAD) ? "now" : "no longer"] see deadchat.") - feedback_add_details("admin_verb","TDV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/toggleprayers() - set name = "Show/Hide Prayers" - set category = "Preferences" - set desc = "Toggles seeing prayers" - prefs.chat_toggles ^= CHAT_PRAYER - prefs.save_preferences() - to_chat(src, "You will [(prefs.chat_toggles & CHAT_PRAYER) ? "now" : "no longer"] see prayerchat.") - feedback_add_details("admin_verb","TP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggleprayersounds() - set name = "Hear/Silence Prayer Sounds" - set category = "Preferences" - set desc = "Toggles hearing pray sounds." - prefs.toggles ^= SOUND_PRAYERS - prefs.save_preferences() - if(prefs.toggles & SOUND_PRAYERS) - to_chat(src, "You will now hear prayer sounds.") - else - to_chat(src, "You will no longer prayer sounds.") - feedback_add_details("admin_verb", "PSounds") + feedback_add_details("preferences_verb", "Toggle Arrivalrattle|[!(prefs.toggles & DISABLE_ARRIVALRATTLE)]") //If you are copy-pasting this, maybe you should rethink where your life went so wrong. /client/verb/togglemidroundantag() set name = "Toggle Midround Antagonist" @@ -133,7 +70,7 @@ prefs.toggles ^= MIDROUND_ANTAG prefs.save_preferences() to_chat(src, "You will [(prefs.toggles & MIDROUND_ANTAG) ? "now" : "no longer"] be considered for midround antagonist positions.") - feedback_add_details("admin_verb","TMidroundA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("preferences_verb","Toggle Midround Antag|[prefs.toggles & MIDROUND_ANTAG]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/verb/toggletitlemusic() set name = "Hear/Silence LobbyMusic" @@ -147,9 +84,8 @@ playtitlemusic() else to_chat(src, "You will no longer hear music in the game lobby.") - if(isnewplayer(mob)) - mob.stopLobbySound() - feedback_add_details("admin_verb","TLobby") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + mob.stop_sound_channel(CHANNEL_LOBBYMUSIC) + feedback_add_details("preferences_verb","Toggle Lobby Music|[prefs.toggles & SOUND_LOBBY]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/verb/togglemidis() set name = "Hear/Silence Midis" @@ -159,22 +95,17 @@ prefs.save_preferences() if(prefs.toggles & SOUND_MIDI) to_chat(src, "You will now hear any sounds uploaded by admins.") - if(admin_sound) - to_chat(src, admin_sound) else - to_chat(src, "You will no longer hear sounds uploaded by admins; any currently playing midis have been disabled.") - if(admin_sound && !(admin_sound.status & SOUND_PAUSED)) - admin_sound.status |= SOUND_PAUSED - to_chat(src, admin_sound) - admin_sound.status ^= SOUND_PAUSED - feedback_add_details("admin_verb","TMidi") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + to_chat(src, "You will no longer hear sounds uploaded by admins") + mob.stop_sound_channel(CHANNEL_ADMIN) + feedback_add_details("preferences_verb","Toggle Hearing Midis|[prefs.toggles & SOUND_MIDI]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/verb/stop_client_sounds() set name = "Stop Sounds" set category = "Preferences" set desc = "Kills all currently playing sounds, use if admin taste in midis a shite" src << sound(null) - feedback_add_details("admin_verb","SAPS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("preferences_verb","Stop Self Sounds") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/verb/listen_ooc() set name = "Show/Hide OOC" @@ -183,7 +114,7 @@ prefs.chat_toggles ^= CHAT_OOC prefs.save_preferences() to_chat(src, "You will [(prefs.chat_toggles & CHAT_OOC) ? "now" : "no longer"] see messages on the OOC channel.") - feedback_add_details("admin_verb","TOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("preferences_verb","Toggle Seeing OOC|[prefs.chat_toggles & CHAT_OOC]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/verb/Toggle_Soundscape() //All new ambience should be added here so it works with this verb until someone better at things comes up with a fix that isn't awful set name = "Hear/Silence Ambience" @@ -197,7 +128,7 @@ to_chat(src, "You will no longer hear ambient sounds.") src << sound(null, repeat = 0, wait = 0, volume = 0, channel = 1) src << sound(null, repeat = 0, wait = 0, volume = 0, channel = 2) - feedback_add_details("admin_verb","TAmbi") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("preferences_verb","Toggle Ambience|[prefs.toggles & SOUND_AMBIENCE]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! // This needs a toggle because you people are awful and spammed terrible music /client/verb/toggle_instruments() @@ -210,7 +141,7 @@ to_chat(src, "You will now hear people playing musical instruments.") else to_chat(src, "You will no longer hear musical instruments.") - feedback_add_details("admin_verb","TInstru") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("preferences_verb","Toggle Instruments|[prefs.toggles & SOUND_INSTRUMENTS]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! //Lots of people get headaches from the normal ship ambience, this is to prevent that /client/verb/toggle_ship_ambience() @@ -225,18 +156,18 @@ to_chat(src, "You will no longer hear ship ambience.") src << sound(null, repeat = 0, wait = 0, volume = 0, channel = 2) src.ambience_playing = 0 - feedback_add_details("admin_verb", "SAmbi") //If you are copy-pasting this, I bet you read this comment expecting to see the same thing :^) + feedback_add_details("preferences_verb", "Toggle Ship Ambience|[prefs.toggles & SOUND_SHIP_AMBIENCE]") //If you are copy-pasting this, I bet you read this comment expecting to see the same thing :^) -var/global/list/ghost_forms = list("ghost","ghostking","ghostian2","skeleghost","ghost_red","ghost_black", \ +GLOBAL_LIST_INIT(ghost_forms, list("ghost","ghostking","ghostian2","skeleghost","ghost_red","ghost_black", \ "ghost_blue","ghost_yellow","ghost_green","ghost_pink", \ "ghost_cyan","ghost_dblue","ghost_dred","ghost_dgreen", \ "ghost_dcyan","ghost_grey","ghost_dyellow","ghost_dpink", "ghost_purpleswirl","ghost_funkypurp","ghost_pinksherbert","ghost_blazeit",\ - "ghost_mellow","ghost_rainbow","ghost_camo","ghost_fire", "catghost") + "ghost_mellow","ghost_rainbow","ghost_camo","ghost_fire", "catghost")) /client/proc/pick_form() if(!is_content_unlocked()) alert("This setting is for accounts with BYOND premium only.") return - var/new_form = input(src, "Thanks for supporting BYOND - Choose your ghostly form:","Thanks for supporting BYOND",null) as null|anything in ghost_forms + var/new_form = input(src, "Thanks for supporting BYOND - Choose your ghostly form:","Thanks for supporting BYOND",null) as null|anything in GLOB.ghost_forms if(new_form) prefs.ghost_form = new_form prefs.save_preferences() @@ -244,13 +175,13 @@ var/global/list/ghost_forms = list("ghost","ghostking","ghostian2","skeleghost", var/mob/dead/observer/O = mob O.update_icon(new_form) -var/global/list/ghost_orbits = list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOST_ORBIT_SQUARE,GHOST_ORBIT_HEXAGON,GHOST_ORBIT_PENTAGON) +GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOST_ORBIT_SQUARE,GHOST_ORBIT_HEXAGON,GHOST_ORBIT_PENTAGON)) /client/proc/pick_ghost_orbit() if(!is_content_unlocked()) alert("This setting is for accounts with BYOND premium only.") return - var/new_orbit = input(src, "Thanks for supporting BYOND - Choose your ghostly orbit:","Thanks for supporting BYOND",null) as null|anything in ghost_orbits + var/new_orbit = input(src, "Thanks for supporting BYOND - Choose your ghostly orbit:","Thanks for supporting BYOND",null) as null|anything in GLOB.ghost_orbits if(new_orbit) prefs.ghost_orbit = new_orbit prefs.save_preferences() @@ -304,7 +235,7 @@ var/global/list/ghost_orbits = list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS prefs.save_preferences() if(isobserver(mob)) var/mob/dead/observer/O = mob - O.updateghostsight() + O.update_sight() /client/verb/toggle_intent_style() set name = "Toggle Intent Selection Style" @@ -313,7 +244,7 @@ var/global/list/ghost_orbits = list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS prefs.toggles ^= INTENT_STYLE to_chat(src, "[(prefs.toggles & INTENT_STYLE) ? "Clicking directly on intents selects them." : "Clicking on intents rotates selection clockwise."]") prefs.save_preferences() - feedback_add_details("admin_verb","ITENTS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("preferences_verb","Toggle Intent Selection|[prefs.toggles & INTENT_STYLE]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/verb/setup_character() set name = "Game Preferences" @@ -332,6 +263,7 @@ var/global/list/ghost_orbits = list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS prefs.save_preferences() if(isobserver(mob)) mob.hud_used.show_hud() + feedback_add_details("preferences_verb","Toggle Ghost HUD|[prefs.ghost_hud]") /client/verb/toggle_inquisition() // warning: unexpected inquisition set name = "Toggle Inquisitiveness" @@ -344,6 +276,7 @@ var/global/list/ghost_orbits = list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS to_chat(src, "You will now examine everything you click on.") else to_chat(src, "You will no longer examine things you click on.") + feedback_add_details("preferences_verb","Toggle Ghost Inquisitiveness|[prefs.inquisitive_ghost]") /client/verb/toggle_announcement_sound() set name = "Hear/Silence Announcements" @@ -352,4 +285,67 @@ var/global/list/ghost_orbits = list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS prefs.toggles ^= SOUND_ANNOUNCEMENTS to_chat(src, "You will now [(prefs.toggles & SOUND_ANNOUNCEMENTS) ? "hear announcement sounds" : "no longer hear announcements"].") prefs.save_preferences() - feedback_add_details("admin_verb","TAS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("preferences_verb","Toggle Announcement Sound|[prefs.toggles & SOUND_ANNOUNCEMENTS]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +//Admin Preferences +/client/proc/toggleadminhelpsound() + set name = "Hear/Silence Adminhelps" + set category = "Preferences" + set desc = "Toggle hearing a notification when admin PMs are received" + if(!holder) + return + prefs.toggles ^= SOUND_ADMINHELP + prefs.save_preferences() + to_chat(usr, "You will [(prefs.toggles & SOUND_ADMINHELP) ? "now" : "no longer"] hear a sound when adminhelps arrive.") + feedback_add_details("admin_toggle","Toggle Adminhelp Sound|[prefs.toggles & SOUND_ADMINHELP]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/proc/toggleannouncelogin() + set name = "Do/Don't Announce Login" + set category = "Preferences" + set desc = "Toggle if you want an announcement to admins when you login during a round" + if(!holder) + return + prefs.toggles ^= ANNOUNCE_LOGIN + prefs.save_preferences() + to_chat(usr, "You will [(prefs.toggles & ANNOUNCE_LOGIN) ? "now" : "no longer"] have an announcement to other admins when you login.") + feedback_add_details("admin_toggle","Toggle Login Announcement|[prefs.toggles & ANNOUNCE_LOGIN]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/proc/toggle_hear_radio() + set name = "Show/Hide Radio Chatter" + set category = "Preferences" + set desc = "Toggle seeing radiochatter from nearby radios and speakers" + if(!holder) return + prefs.chat_toggles ^= CHAT_RADIO + prefs.save_preferences() + to_chat(usr, "You will [(prefs.chat_toggles & CHAT_RADIO) ? "now" : "no longer"] see radio chatter from nearby radios or speakers") + feedback_add_details("admin_toggle","Toggle Radio Chatter|[prefs.chat_toggles & CHAT_RADIO]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/proc/deadchat() + set name = "Show/Hide Deadchat" + set category = "Preferences" + set desc ="Toggles seeing deadchat" + prefs.chat_toggles ^= CHAT_DEAD + prefs.save_preferences() + to_chat(src, "You will [(prefs.chat_toggles & CHAT_DEAD) ? "now" : "no longer"] see deadchat.") + feedback_add_details("admin_toggle","Toggle Deadchat Visibility|[prefs.chat_toggles & CHAT_DEAD]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/proc/toggleprayers() + set name = "Show/Hide Prayers" + set category = "Preferences" + set desc = "Toggles seeing prayers" + prefs.chat_toggles ^= CHAT_PRAYER + prefs.save_preferences() + to_chat(src, "You will [(prefs.chat_toggles & CHAT_PRAYER) ? "now" : "no longer"] see prayerchat.") + feedback_add_details("admin_toggle","Toggle Prayer Visibility|[prefs.chat_toggles & CHAT_PRAYER]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggleprayersounds() + set name = "Hear/Silence Prayer Sounds" + set category = "Preferences" + set desc = "Toggles hearing pray sounds." + prefs.toggles ^= SOUND_PRAYERS + prefs.save_preferences() + if(prefs.toggles & SOUND_PRAYERS) + to_chat(src, "You will now hear prayer sounds.") + else + to_chat(src, "You will no longer prayer sounds.") + feedback_add_details("admin_toggle", "Toggle Prayer Sounds|[prefs.toggles & SOUND_PRAYERS]") diff --git a/code/modules/client/preferences_vr.dm b/code/modules/client/preferences_vr.dm deleted file mode 100644 index 0f9b6935d3..0000000000 --- a/code/modules/client/preferences_vr.dm +++ /dev/null @@ -1,8 +0,0 @@ -//File isn't currently being used. -/datum/preferences - var/biological_gender = MALE - var/identifying_gender = MALE - -/datum/preferences/proc/set_biological_gender(var/gender) - biological_gender = gender - identifying_gender = gender \ No newline at end of file diff --git a/code/modules/client/verbs/looc.dm b/code/modules/client/verbs/looc.dm index 265126d4ad..0d81a64f2d 100644 --- a/code/modules/client/verbs/looc.dm +++ b/code/modules/client/verbs/looc.dm @@ -3,7 +3,7 @@ set desc = "Local OOC, seen only by those in view." set category = "OOC" - if(say_disabled) //This is here to try to identify lag problems + if(GLOB.say_disabled) //This is here to try to identify lag problems usr << "\red Speech is currently admin-disabled." return @@ -20,10 +20,10 @@ return if(!holder) - if(!ooc_allowed) + if(!GLOB.ooc_allowed) src << "\red OOC is globally muted" return - if(!dooc_allowed && (mob.stat == DEAD)) + if(!GLOB.dooc_allowed && (mob.stat == DEAD)) usr << "\red OOC for dead mobs has been turned off." return if(prefs.muted & MUTE_OOC) @@ -43,10 +43,10 @@ if(!M.client) continue var/client/C = M.client - if (C in admins) + if (C in GLOB.admins) continue //they are handled after that - if (istype(M,/mob/dead/observer)) + if (isobserver(M)) continue //Also handled later. if(C.prefs.toggles & CHAT_OOC) @@ -59,7 +59,7 @@ // display_name = holder.fakekey C << "LOOC: [src.mob.name]: [msg]" - for(var/client/C in admins) + for(var/client/C in GLOB.admins) if(C.prefs.toggles & CHAT_OOC) var/prefix = "(R)LOOC" if (C.mob in heard) @@ -70,7 +70,7 @@ if(!G.client) continue var/client/C = G.client - if (C in admins) + if (C in GLOB.admins) continue //handled earlier. if(C.prefs.toggles & CHAT_OOC) var/prefix = "(G)LOOC" diff --git a/code/modules/client/verbs/ooc.dm b/code/modules/client/verbs/ooc.dm index 2200bf5de7..79b21dccee 100644 --- a/code/modules/client/verbs/ooc.dm +++ b/code/modules/client/verbs/ooc.dm @@ -2,7 +2,7 @@ set name = "OOC" //Gave this shit a shorter name so you only have to time out "ooc" rather than "ooc message" to use it --NeoFite set category = "OOC" - if(say_disabled) //This is here to try to identify lag problems + if(GLOB.say_disabled) //This is here to try to identify lag problems to_chat(usr, "Speech is currently admin-disabled.") return @@ -30,10 +30,10 @@ return if(!holder) - if(!ooc_allowed) + if(!GLOB.ooc_allowed) to_chat(src, "OOC is globally muted.") return - if(!dooc_allowed && (mob.stat == DEAD)) + if(!GLOB.dooc_allowed && (mob.stat == DEAD)) to_chat(usr, "OOC for dead mobs has been turned off.") return if(prefs.muted & MUTE_OOC) @@ -57,9 +57,9 @@ var/keyname = key if(prefs.unlock_content) if(prefs.toggles & MEMBER_PUBLIC) - keyname = "[keyname]" + keyname = "[keyname]" - for(var/client/C in clients) + for(var/client/C in GLOB.clients) if(C.prefs.chat_toggles & CHAT_OOC) if(holder) if(!holder.fakekey || C.holder) @@ -68,33 +68,33 @@ else to_chat(C, "OOC: [keyname][holder.fakekey ? "/([holder.fakekey])" : ""]: [msg]") else - to_chat(C, "OOC: [holder.fakekey ? holder.fakekey : key]: [msg]") + to_chat(C, "OOC: [holder.fakekey ? holder.fakekey : key]: [msg]") else if(!(key in C.prefs.ignoring)) - to_chat(C, "OOC: [keyname]: [msg]") + to_chat(C, "OOC: [keyname]: [msg]") /proc/toggle_ooc(toggle = null) if(toggle != null) //if we're specifically en/disabling ooc - if(toggle != ooc_allowed) - ooc_allowed = toggle + if(toggle != GLOB.ooc_allowed) + GLOB.ooc_allowed = toggle else return else //otherwise just toggle it - ooc_allowed = !ooc_allowed - to_chat(world, "The OOC channel has been globally [ooc_allowed ? "enabled" : "disabled"].") + GLOB.ooc_allowed = !GLOB.ooc_allowed + to_chat(world, "The OOC channel has been globally [GLOB.ooc_allowed ? "enabled" : "disabled"].") -var/global/normal_ooc_colour = OOC_COLOR +GLOBAL_VAR_INIT(normal_ooc_colour, OOC_COLOR) /client/proc/set_ooc(newColor as color) set name = "Set Player OOC Color" set desc = "Modifies player OOC Color" set category = "Fun" - normal_ooc_colour = sanitize_ooccolor(newColor) + GLOB.normal_ooc_colour = sanitize_ooccolor(newColor) /client/proc/reset_ooc() set name = "Reset Player OOC Color" set desc = "Returns player OOC Color to default" set category = "Fun" - normal_ooc_colour = OOC_COLOR + GLOB.normal_ooc_colour = OOC_COLOR /client/verb/colorooc() set name = "Set Your OOC Color" @@ -108,7 +108,7 @@ var/global/normal_ooc_colour = OOC_COLOR if(new_ooccolor) prefs.ooccolor = sanitize_ooccolor(new_ooccolor) prefs.save_preferences() - feedback_add_details("admin_verb","OC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Set OOC Color") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return /client/verb/resetcolorooc() @@ -129,8 +129,8 @@ var/global/normal_ooc_colour = OOC_COLOR set category = "Admin" set desc ="Check the admin notice if it has been set" - if(admin_notice) - to_chat(src, "Admin Notice:\n \t [admin_notice]") + if(GLOB.admin_notice) + to_chat(src, "Admin Notice:\n \t [GLOB.admin_notice]") else to_chat(src, "There are no admin notices at the moment.") @@ -139,8 +139,8 @@ var/global/normal_ooc_colour = OOC_COLOR set category = "OOC" set desc ="Check the Message of the Day" - if(join_motd) - to_chat(src, "
    [join_motd]
    ") + if(GLOB.join_motd) + to_chat(src, "
    [GLOB.join_motd]
    ") else to_chat(src, "The Message of the Day has not been set.") @@ -169,7 +169,7 @@ var/global/normal_ooc_colour = OOC_COLOR set category = "OOC" set desc ="Ignore a player's messages on the OOC channel" - var/selection = input("Please, select a player!", "Ignore", null, null) as null|anything in sortKey(clients) + var/selection = input("Please, select a player!", "Ignore", null, null) as null|anything in sortKey(GLOB.clients) if(!selection) return if(selection == src) diff --git a/code/modules/client/verbs/who.dm b/code/modules/client/verbs/who.dm index 1b621de06b..65a3fc87ac 100644 --- a/code/modules/client/verbs/who.dm +++ b/code/modules/client/verbs/who.dm @@ -2,25 +2,25 @@ set name = "Who" set category = "OOC" - var/msg = "" + var/msg = "Current Population:\n" var/list/Lines = list() - if(length(admins) > 0) + if(length(GLOB.admins) > 0) Lines += "Admins:" - for(var/client/C in sortList(admins)) + for(var/client/C in sortList(GLOB.admins)) if(!C.holder.fakekey) Lines += "\t [C.key][show_info(C)]" - if(length(mentors) > 0) + if(length(GLOB.mentors) > 0) Lines += "Mentors:" - for(var/client/C in sortList(clients)) - var/mentor = mentor_datums[C.ckey] + for(var/client/C in sortList(GLOB.clients)) + var/mentor = GLOB.mentor_datums[C.ckey] if(mentor) Lines += "\t [C.key][show_info(C)]" Lines += "Players:" - for(var/client/C in sortList(clients)) + for(var/client/C in sortList(GLOB.clients)) if(!check_mentor_other(C) || (C.holder && C.holder.fakekey)) Lines += "\t [C.key][show_info(C)]" @@ -68,7 +68,7 @@ var/msg = "Current Admins:\n" if(holder) - for(var/client/C in admins) + for(var/client/C in GLOB.admins) msg += "\t[C] is a [C.holder.rank]" if(C.holder.fakekey) @@ -85,7 +85,7 @@ msg += " (AFK)" msg += "\n" else - for(var/client/C in admins) + for(var/client/C in GLOB.admins) if(C.is_afk()) continue //Don't show afk admins to adminwho if(!C.holder.fakekey) @@ -97,7 +97,7 @@ set category = "Mentor" set name = "Mentorwho" var/msg = "Current Mentors:\n" - for(var/client/C in mentors) + for(var/client/C in GLOB.mentors) var/suffix = "" if(holder) if(isobserver(C.mob)) diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index b33f1c29d5..b15378c3b3 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -79,47 +79,42 @@ if(button) button.name = "Change [chameleon_name] Appearance" - chameleon_blacklist |= typecacheof(target.type) for(var/V in typesof(chameleon_type)) - if(ispath(V, /obj/item)) + if(ispath(V) && ispath(V, /obj/item)) var/obj/item/I = V if(chameleon_blacklist[V] || (initial(I.flags) & ABSTRACT)) continue - chameleon_list += I + if(!initial(I.icon_state) || !initial(I.item_state)) + continue + var/chameleon_item_name = "[initial(I.name)] ([initial(I.icon_state)])" + chameleon_list[chameleon_item_name] = I + /datum/action/item_action/chameleon/change/proc/select_look(mob/user) - var/list/item_names = list() var/obj/item/picked_item - for(var/U in chameleon_list) - var/obj/item/I = U - item_names += initial(I.name) var/picked_name - picked_name = input("Select [chameleon_name] to change into", "Chameleon [chameleon_name]", picked_name) in item_names + picked_name = input("Select [chameleon_name] to change into", "Chameleon [chameleon_name]", picked_name) as null|anything in chameleon_list if(!picked_name) return - for(var/V in chameleon_list) - var/obj/item/I = V - if(initial(I.name) == picked_name) - picked_item = V - break + picked_item = chameleon_list[picked_name] if(!picked_item) return update_look(user, picked_item) /datum/action/item_action/chameleon/change/proc/random_look(mob/user) - var/picked_item = pick(chameleon_list) + var/picked_name = pick(chameleon_list) // If a user is provided, then this item is in use, and we // need to update our icons and stuff if(user) - update_look(user, picked_item) + update_look(user, chameleon_list[picked_name]) // Otherwise, it's likely a random initialisation, so we // don't have to worry else - update_item(picked_item) + update_item(chameleon_list[picked_name]) /datum/action/item_action/chameleon/change/proc/update_look(mob/user, obj/item/picked_item) if(istype(target, /obj/item/weapon/gun/energy/laser/chameleon)) @@ -441,6 +436,7 @@ chameleon_gun_vars = list() ammo_copy_vars = list("firing_effect_type") chameleon_ammo_vars = list() + recharge_newshot() get_chameleon_projectile(/obj/item/weapon/gun/energy/laser) /obj/item/weapon/gun/energy/laser/chameleon/emp_act(severity) @@ -480,7 +476,7 @@ if(!istype(P)) CRASH("[P] is not /obj/item/projectile!") return FALSE - chameleon_projectile_vars = list("name" = "practice laser", "icon" = 'icons/obj/projectiles.dmi', "icon_state" = "laser") + chameleon_projectile_vars = list("name" = "practice laser", "icon" = 'icons/obj/projectiles.dmi', "icon_state" = "laser", "nodamage" = TRUE) for(var/V in projectile_copy_vars) if(P.vars[V]) chameleon_projectile_vars[V] = P.vars[V] diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 96a5731ceb..81eea35aba 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -119,6 +119,8 @@ /obj/item/clothing/dropped(mob/user) ..() + if(!istype(user)) + return if(user_vars_remembered && user_vars_remembered.len) for(var/variable in user_vars_remembered) if(variable in user.vars) @@ -141,15 +143,29 @@ ..() if(damaged_clothes) to_chat(user, "It looks damaged!") + if(pockets) + var/list/how_cool_are_your_threads = list("") + if(pockets.priority) + how_cool_are_your_threads += "Your [src]'s storage opens when clicked.\n" + else + how_cool_are_your_threads += "Your [src]'s storage opens when dragged to yourself.\n" + how_cool_are_your_threads += "Your [src] can store [pockets.storage_slots] item[pockets.storage_slots > 1 ? "s" : ""].\n" + how_cool_are_your_threads += "Your [src] can store items that are [weightclass2text(pockets.max_w_class)] or smaller.\n" + if(pockets.quickdraw) + how_cool_are_your_threads += "You can quickly remove an item from your [src] using Alt-Click.\n" + if(pockets.silent) + how_cool_are_your_threads += "Adding or Removing items from your [src] makes no noise.\n" + how_cool_are_your_threads += "" + to_chat(user, how_cool_are_your_threads.Join()) /obj/item/clothing/obj_break(damage_flag) if(!damaged_clothes) update_clothes_damaged_state(TRUE) -var/list/damaged_clothes_icons = list() /obj/item/clothing/proc/update_clothes_damaged_state(damaging = TRUE) var/index = "\ref[initial(icon)]-[initial(icon_state)]" + var/static/list/damaged_clothes_icons = list() if(damaging) damaged_clothes = 1 var/icon/damaged_clothes_icon = damaged_clothes_icons[index] @@ -197,6 +213,7 @@ var/list/damaged_clothes_icons = list() var/darkness_view = 2//Base human is 2 var/invis_view = SEE_INVISIBLE_LIVING var/invis_override = 0 //Override to allow glasses to set higher than normal see_invis + var/lighting_alpha var/emagged = 0 var/list/icon/current = list() //the current hud icons var/vision_correction = 0 //does wearing these glasses correct some of our vision defects? @@ -369,6 +386,8 @@ BLIND // can't see anything slowdown = SHOES_SLOWDOWN var/blood_state = BLOOD_STATE_NOT_BLOODY var/list/bloody_shoes = list(BLOOD_STATE_HUMAN = 0,BLOOD_STATE_XENO = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0) + var/offset = 0 + var/equipped_before_drop = FALSE /obj/item/clothing/shoes/worn_overlays(isinhands = FALSE) . = list() @@ -384,6 +403,24 @@ BLIND // can't see anything if(bloody) . += image("icon"='icons/effects/blood.dmi', "icon_state"="shoeblood") +/obj/item/clothing/shoes/equipped(mob/user, slot) + . = ..() + if(offset && slot_flags & slotdefine2slotbit(slot)) + user.pixel_y += offset + worn_y_dimension -= (offset * 2) + user.update_inv_shoes() + equipped_before_drop = TRUE + +/obj/item/clothing/shoes/proc/restore_offsets(mob/user) + equipped_before_drop = FALSE + user.pixel_y -= offset + worn_y_dimension = world.icon_size + +/obj/item/clothing/shoes/dropped(mob/user) + if(offset && equipped_before_drop) + restore_offsets(user) + . = ..() + /obj/item/clothing/shoes/update_clothes_damaged_state(damaging = TRUE) ..() if(ismob(loc)) @@ -612,7 +649,7 @@ BLIND // can't see anything var/icon/female_s = icon("icon"='icons/mob/uniform.dmi', "icon_state"="[(type == FEMALE_UNIFORM_FULL) ? "female_full" : "female_top"]") female_clothing_icon.Blend(female_s, ICON_MULTIPLY) female_clothing_icon = fcopy_rsc(female_clothing_icon) - female_clothing_icons[index] = female_clothing_icon + GLOB.female_clothing_icons[index] = female_clothing_icon /obj/item/clothing/under/verb/toggle() set name = "Adjust Suit Sensors" diff --git a/code/modules/clothing/glasses/engine_goggles.dm b/code/modules/clothing/glasses/engine_goggles.dm index cd079db247..9c6c960448 100644 --- a/code/modules/clothing/glasses/engine_goggles.dm +++ b/code/modules/clothing/glasses/engine_goggles.dm @@ -24,7 +24,7 @@ STOP_PROCESSING(SSobj, src) vision_flags = SEE_TURFS darkness_view = 1 - invis_view = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE to_chat(loc, "You toggle the goggles' scanning mode to \[Meson].") invis_update() diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 9af1a4715c..2f6089bc56 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -37,7 +37,7 @@ origin_tech = "magnets=1;engineering=2" darkness_view = 2 vision_flags = SEE_TURFS - invis_view = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE glass_colour_type = /datum/client_colour/glass_colour/lightgreen /obj/item/clothing/glasses/meson/night @@ -47,6 +47,7 @@ item_state = "nvgmeson" origin_tech = "magnets=4;engineering=5;plasmatech=4" darkness_view = 8 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE glass_colour_type = /datum/client_colour/glass_colour/green /obj/item/clothing/glasses/meson/gar @@ -84,7 +85,7 @@ item_state = "glasses" origin_tech = "materials=4;magnets=4;plasmatech=4;engineering=4" darkness_view = 8 - invis_view = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE glass_colour_type = /datum/client_colour/glass_colour/green /obj/item/clothing/glasses/eyepatch @@ -322,7 +323,7 @@ darkness_view = 8 scan_reagents = 1 flags = NODROP - invis_view = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE /obj/item/clothing/glasses/godeye/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(istype(W, src) && W != src && W.loc == user) diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 0a6d7423fc..a46af93f96 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -8,13 +8,13 @@ /obj/item/clothing/glasses/hud/equipped(mob/living/carbon/human/user, slot) ..() if(hud_type && slot == slot_glasses) - var/datum/atom_hud/H = huds[hud_type] + var/datum/atom_hud/H = GLOB.huds[hud_type] H.add_hud_to(user) /obj/item/clothing/glasses/hud/dropped(mob/living/carbon/human/user) ..() if(hud_type && istype(user) && user.glasses == src) - var/datum/atom_hud/H = huds[hud_type] + var/datum/atom_hud/H = GLOB.huds[hud_type] H.remove_hud_from(user) /obj/item/clothing/glasses/hud/emp_act(severity) @@ -43,7 +43,7 @@ item_state = "glasses" origin_tech = "magnets=4;biotech=4;plasmatech=4;engineering=5" darkness_view = 8 - invis_view = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE glass_colour_type = /datum/client_colour/glass_colour/green /obj/item/clothing/glasses/hud/health/sunglasses @@ -71,7 +71,7 @@ item_state = "glasses" origin_tech = "magnets=4;powerstorage=4;plasmatech=4;engineering=5" darkness_view = 8 - invis_view = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE glass_colour_type = /datum/client_colour/glass_colour/green /obj/item/clothing/glasses/hud/security @@ -125,7 +125,7 @@ icon_state = "securityhudnight" origin_tech = "magnets=4;combat=4;plasmatech=4;engineering=5" darkness_view = 8 - invis_view = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE glass_colour_type = /datum/client_colour/glass_colour/green /obj/item/clothing/glasses/hud/security/sunglasses/gars @@ -161,7 +161,7 @@ return if (hud_type) - var/datum/atom_hud/H = huds[hud_type] + var/datum/atom_hud/H = GLOB.huds[hud_type] H.remove_hud_from(user) if (hud_type == DATA_HUD_MEDICAL_ADVANCED) @@ -172,7 +172,7 @@ hud_type = DATA_HUD_SECURITY_ADVANCED if (hud_type) - var/datum/atom_hud/H = huds[hud_type] + var/datum/atom_hud/H = GLOB.huds[hud_type] H.add_hud_to(user) /obj/item/clothing/glasses/hud/toggle/thermal diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 30767f2bcc..3bf866cc2c 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -21,6 +21,7 @@ icon_state = "tophat" item_state = "that" dog_fashion = /datum/dog_fashion/head + throwforce = 1 /obj/item/clothing/head/canada name = "striped red tophat" diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm index 3e82a2e02b..83a8747252 100644 --- a/code/modules/clothing/outfits/ert.dm +++ b/code/modules/clothing/outfits/ert.dm @@ -14,7 +14,7 @@ L.implant(H, null, 1) var/obj/item/device/radio/R = H.ears - R.set_frequency(CENTCOM_FREQ) + R.set_frequency(GLOB.CENTCOM_FREQ) R.freqlock = 1 var/obj/item/weapon/card/id/W = H.wear_id @@ -188,7 +188,7 @@ var/obj/item/weapon/card/id/W = H.wear_id W.icon_state = "centcom" W.access = get_centcom_access("Centcom Official") - W.access += access_weapons + W.access += GLOB.access_weapons W.assignment = "Centcom Official" W.registered_name = H.real_name W.update_label() diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index 2f7fcc99ef..944d3a624e 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -239,7 +239,7 @@ W.update_label() var/obj/item/device/radio/headset/R = H.ears - R.set_frequency(CENTCOM_FREQ) + R.set_frequency(GLOB.CENTCOM_FREQ) R.freqlock = 1 /datum/outfit/wizard @@ -355,7 +355,7 @@ return var/obj/item/device/radio/R = H.ears - R.set_frequency(CENTCOM_FREQ) + R.set_frequency(GLOB.CENTCOM_FREQ) R.freqlock = 1 var/obj/item/weapon/implant/mindshield/L = new/obj/item/weapon/implant/mindshield(H)//Here you go Deuryn diff --git a/code/modules/clothing/spacesuits/flightsuit.dm b/code/modules/clothing/spacesuits/flightsuit.dm index bd33082aa4..275ad542b5 100644 --- a/code/modules/clothing/spacesuits/flightsuit.dm +++ b/code/modules/clothing/spacesuits/flightsuit.dm @@ -24,6 +24,8 @@ slot_flags = SLOT_BACK resistance_flags = FIRE_PROOF + var/processing_mode = FLIGHTSUIT_PROCESSING_FULL + var/obj/item/clothing/suit/space/hardsuit/flightsuit/suit = null var/mob/living/carbon/human/wearer = null var/slowdown_ground = 1 @@ -104,14 +106,15 @@ //Start/Stop processing the item to use momentum and flight mechanics. -/obj/item/device/flightpack/New() +/obj/item/device/flightpack/Initialize() ion_trail = new ion_trail.set_up(src) START_PROCESSING(SSflightpacks, src) - ..() update_parts() + sync_processing(SSflightpacks) + ..() -/obj/item/device/flightpack/full/New() +/obj/item/device/flightpack/full/Initialize() part_manip = new /obj/item/weapon/stock_parts/manipulator/pico(src) part_scan = new /obj/item/weapon/stock_parts/scanning_module/phasic(src) part_cap = new /obj/item/weapon/stock_parts/capacitor/super(src) @@ -120,6 +123,18 @@ assembled = TRUE ..() +/obj/item/device/flightpack/proc/sync_processing(datum/controller/subsystem/processing/flightpacks/FPS) + processing_mode = FPS.flightsuit_processing + if(processing_mode == FLIGHTSUIT_PROCESSING_NONE) + momentum_x = 0 + momentum_y = 0 + momentum_speed_x = 0 + momentum_speed_y = 0 + momentum_speed = 0 + boost_charge = 0 + boost = FALSE + update_slowdown() + /obj/item/device/flightpack/proc/update_parts() boost_chargerate = initial(boost_chargerate) boost_drain = initial(boost_drain) @@ -339,7 +354,7 @@ suit.slowdown = slowdown_air /obj/item/device/flightpack/process() - if(!suit) + if(!suit || (processing_mode == FLIGHTSUIT_PROCESSING_NONE)) return FALSE update_slowdown() update_icon() @@ -451,7 +466,7 @@ wearer.visible_message("[wearer] is knocked flying by the impact!") /obj/item/device/flightpack/proc/flight_impact(atom/unmovablevictim, crashdir) //Yes, victim. - if((unmovablevictim == wearer) || crashing) + if((unmovablevictim == wearer) || crashing || (processing_mode == FLIGHTSUIT_PROCESSING_NONE)) return FALSE crashing = TRUE var/crashpower = 0 @@ -563,9 +578,12 @@ spawn() A.open() wearer.visible_message("[wearer] rolls sideways and slips past [A]") - wearer.forceMove(get_turf(A)) + var/turf/target = get_turf(A) + if(istype(A, /obj/machinery/door/window) && (get_turf(wearer) == get_turf(A))) + target = get_step(A, A.dir) + wearer.forceMove(target) if(dragging_through) - dragging_through.forceMove(get_turf(A)) + dragging_through.forceMove(target) wearer.pulling = dragging_through return pass @@ -573,30 +591,8 @@ /obj/item/device/flightpack/proc/mobknockback(mob/living/victim, power, direction) if(!ismob(victim)) return FALSE - var/knockmessage = "[victim] is knocked back by [wearer] as they narrowly avoid a collision!" - if(power == 1) - knockmessage = "[wearer] soars into [victim], pushing them away!" - var/knockback = 0 - var/stun = boost * 2 + (power - 2) - if((stun >= 0) || (power == 3)) - knockmessage += " [wearer] dashes across [victim] at full impulse, knocking them [stun ? "down" : "away"]!" //Impulse... - knockmessage += "" - knockback += power - knockback += (part_manip.rating / 2) - knockback += (part_bin.rating / 2) - knockback += boost*2 - switch(power) - if(1) - knockback = 1 - if(2) - knockback /= 1.5 - var/throwdir = pick(alldirs) - var/turf/target = get_step(victim, throwdir) - for(var/i in 1 to (knockback-1)) - target = get_step(target, throwdir) - wearer.visible_message(knockmessage) - victim.throw_at(target, knockback, 1) - victim.Weaken(stun) + wearer.forceMove(get_turf(victim)) + wearer.visible_message("[wearer] flies over [victim]!") /obj/item/device/flightpack/proc/victimknockback(atom/movable/victim, power, direction) if(!victim) @@ -621,7 +617,7 @@ for(var/i in 1 to knockback) target = get_step(target, direction) for(var/i in 1 to knockback/3) - target = get_step(target, pick(alldirs)) + target = get_step(target, pick(GLOB.alldirs)) if(knockback) victim.throw_at(target, knockback, part_manip.rating) if(isobj(victim)) @@ -639,7 +635,7 @@ if(move) while(momentum_x != 0 || momentum_y != 0) sleep(2) - step(wearer, pick(cardinal)) + step(wearer, pick(GLOB.cardinal)) momentum_decay() adjust_momentum(0, 0, 10) wearer.visible_message("[wearer]'s flight suit crashes into the ground!") @@ -1270,13 +1266,13 @@ /obj/item/clothing/head/helmet/space/hardsuit/flightsuit/equipped(mob/living/carbon/human/wearer, slot) ..() for(var/hudtype in datahuds) - var/datum/atom_hud/H = huds[hudtype] + var/datum/atom_hud/H = GLOB.huds[hudtype] H.add_hud_to(wearer) /obj/item/clothing/head/helmet/space/hardsuit/flightsuit/dropped(mob/living/carbon/human/wearer) ..() for(var/hudtype in datahuds) - var/datum/atom_hud/H = huds[hudtype] + var/datum/atom_hud/H = GLOB.huds[hudtype] H.remove_hud_from(wearer) if(zoom) toggle_zoom(wearer, TRUE) diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index b9c4a117cb..6cc485a34c 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -430,13 +430,13 @@ to_chat(user, ("Your [user.glasses] prevents you using [src]'s diagnostic visor HUD.")) else onboard_hud_enabled = 1 - var/datum/atom_hud/DHUD = huds[DATA_HUD_DIAGNOSTIC] + var/datum/atom_hud/DHUD = GLOB.huds[DATA_HUD_DIAGNOSTIC] DHUD.add_hud_to(user) /obj/item/clothing/head/helmet/space/hardsuit/rd/dropped(mob/living/carbon/human/user) ..() if(onboard_hud_enabled && !(user.glasses && istype(user.glasses, /obj/item/clothing/glasses/hud/diagnostic))) - var/datum/atom_hud/DHUD = huds[DATA_HUD_DIAGNOSTIC] + var/datum/atom_hud/DHUD = GLOB.huds[DATA_HUD_DIAGNOSTIC] DHUD.remove_hud_from(user) /obj/item/clothing/suit/space/hardsuit/rd diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index 870cbecfc1..26dffe271b 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -308,3 +308,33 @@ Contains: desc = "Peering into the eyes of the helmet is enough to seal damnation." icon_state = "hardsuit0-beserker" item_state = "hardsuit0-beserker" + +/obj/item/clothing/head/helmet/space/fragile + name = "emergency space helmet" + desc = "A bulky, air-tight helmet meant to protect the user during emergency situations. It doesn't look very durable." + icon_state = "syndicate-helm-orange" + item_state = "syndicate-helm-orange" + armor = list(melee = 5, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 10, fire = 0, acid = 0) + strip_delay = 65 + +/obj/item/clothing/suit/space/fragile + name = "emergency space suit" + desc = "A bulky, air-tight suit meant to protect the user during emergency situations. It doesn't look very durable." + var/torn = FALSE + icon_state = "syndicate-orange" + item_state = "syndicate-orange" + slowdown = 2 + armor = list(melee = 5, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 10, fire = 0, acid = 0) + strip_delay = 65 + +/obj/item/clothing/suit/space/fragile/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance) + if(!torn && prob(50)) + to_chat(owner, "[src] tears from the damage, breaking the air-tight seal!") + src.flags -= STOPSPRESSUREDMAGE + src.name = "torn [src]." + src.desc = "A bulky suit meant to protect the user during emergency situations, at least until someone tore a hole in the suit." + src.torn = TRUE + playsound(loc, 'sound/weapons/slashmiss.ogg', 50, 1) + playsound(loc, 'sound/effects/refill.ogg', 50, 1) + + diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 2c75fb5284..5b8a4ab50e 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -179,7 +179,7 @@ var/image/I = image(icon = 'icons/mob/robots.dmi' , icon_state = "robot", loc = H) I.override = 1 I.add_overlay(image(icon = 'icons/mob/robots.dmi' , icon_state = "robot_e")) //gotta look realistic - H.add_alt_appearance("standard_borg_disguise", I, silicon_mobs+H) //you look like a robot to robots! (including yourself because you're totally a robot) + H.add_alt_appearance("standard_borg_disguise", I, GLOB.silicon_mobs+H) //you look like a robot to robots! (including yourself because you're totally a robot) /obj/item/clothing/suit/snowman diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index 93ad51bd30..7e48b495f0 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -28,7 +28,7 @@ desc = "A terribly ragged and frayed grey jumpsuit. It looks like it hasn't been washed in over a decade." /obj/item/clothing/under/color/grey/glorf/hit_reaction(mob/living/carbon/human/owner) - owner.forcesay(hit_appends) + owner.forcesay(GLOB.hit_appends) return 0 /obj/item/clothing/under/color/blue diff --git a/code/modules/crafting/craft.dm b/code/modules/crafting/craft.dm index 356f260bfa..77d1e1d6d9 100644 --- a/code/modules/crafting/craft.dm +++ b/code/modules/crafting/craft.dm @@ -253,7 +253,7 @@ qdel(DL) -/datum/personal_crafting/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = not_incapacitated_turf_state) +/datum/personal_crafting/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.not_incapacitated_turf_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "personal_crafting", "Crafting Menu", 700, 800, master_ui, state) @@ -273,7 +273,7 @@ var/list/surroundings = get_surroundings(user) var/list/can_craft = list() var/list/cant_craft = list() - for(var/rec in crafting_recipes) + for(var/rec in GLOB.crafting_recipes) var/datum/crafting_recipe/R = rec if(R.category != cur_category) continue diff --git a/code/modules/crafting/guncrafting.dm b/code/modules/crafting/guncrafting.dm index eba8c30197..d96be9be10 100644 --- a/code/modules/crafting/guncrafting.dm +++ b/code/modules/crafting/guncrafting.dm @@ -2,11 +2,11 @@ // PARTS // -/obj/item/weaponcrafting/reciever +/obj/item/weaponcrafting/receiver name = "modular receiver" desc = "A prototype modular receiver and trigger assembly for a firearm." icon = 'icons/obj/improvised.dmi' - icon_state = "reciever" + icon_state = "receiver" /obj/item/weaponcrafting/stock name = "rifle stock" diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index c02bdcd475..d1a663cfb2 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -254,7 +254,7 @@ /datum/crafting_recipe/ishotgun name = "Improvised Shotgun" result = /obj/item/weapon/gun/ballistic/revolver/doublebarrel/improvised - reqs = list(/obj/item/weaponcrafting/reciever = 1, + reqs = list(/obj/item/weaponcrafting/receiver = 1, /obj/item/pipe = 1, /obj/item/weaponcrafting/stock = 1, /obj/item/stack/packageWrap = 5) @@ -450,5 +450,5 @@ name = "Pressure Plate" result = /obj/item/device/pressure_plate time = 5 - reqs = list(/obj/item/stack/sheet/plasteel = 1, /obj/item/stack/tile = 1, /obj/item/stack/cable_coil = 2) + reqs = list(/obj/item/stack/sheet/plasteel = 1, /obj/item/stack/tile/plasteel = 1, /obj/item/stack/cable_coil = 2) category = CAT_MISC diff --git a/code/modules/emoji/emoji_parse.dm b/code/modules/emoji/emoji_parse.dm index 364a17e95a..3a0281f3f0 100644 --- a/code/modules/emoji/emoji_parse.dm +++ b/code/modules/emoji/emoji_parse.dm @@ -1,11 +1,8 @@ -var/list/emojis - /proc/emoji_parse(text) . = text if(!config.emojis) return - if(!emojis) - emojis = icon_states(icon('icons/emoji.dmi')) + var/static/list/emojis = icon_states(icon('icons/emoji.dmi')) var/parsed = "" var/pos = 1 var/search = 0 diff --git a/code/modules/error_handler/error_handler.dm b/code/modules/error_handler/error_handler.dm index 7c88c604b6..b48dd40e09 100644 --- a/code/modules/error_handler/error_handler.dm +++ b/code/modules/error_handler/error_handler.dm @@ -1,18 +1,20 @@ -var/global/list/error_last_seen = list() -var/global/list/error_cooldown = list() /* Error_cooldown items will either be positive(cooldown time) or negative(silenced error) - If negative, starts at -1, and goes down by 1 each time that error gets skipped*/ -var/global/total_runtimes = 0 -var/global/total_runtimes_skipped = 0 +GLOBAL_VAR_INIT(total_runtimes, 0) +GLOBAL_VAR_INIT(total_runtimes_skipped, 0) #ifdef DEBUG /world/Error(exception/E, datum/e_src) if(!istype(E)) //Something threw an unusual exception log_world("\[[time_stamp()]] Uncaught exception: [E]") return ..() + + var/static/list/error_last_seen = list() + var/static/list/error_cooldown = list() /* Error_cooldown items will either be positive(cooldown time) or negative(silenced error) + If negative, starts at -1, and goes down by 1 each time that error gets skipped*/ + if(!error_last_seen) // A runtime is occurring too early in start-up initialization return ..() - total_runtimes++ + GLOB.total_runtimes++ var/erroruid = "[E.file][E.line]" var/last_seen = error_last_seen[erroruid] @@ -24,7 +26,7 @@ var/global/total_runtimes_skipped = 0 if(cooldown < 0) error_cooldown[erroruid]-- //Used to keep track of skip count for this error - total_runtimes_skipped++ + GLOB.total_runtimes_skipped++ return //Error is currently silenced, skip handling it //Handle cooldowns and silencing spammy errors var/silencing = FALSE @@ -54,7 +56,7 @@ var/global/total_runtimes_skipped = 0 error_cooldown[erroruid] = 0 if(skipcount > 0) world.log << "\[[time_stamp()]] Skipped [skipcount] runtimes in [E.file],[E.line]." - error_cache.log_error(E, skip_count = skipcount) + GLOB.error_cache.log_error(E, skip_count = skipcount) error_last_seen[erroruid] = world.time error_cooldown[erroruid] = cooldown @@ -87,8 +89,8 @@ var/global/total_runtimes_skipped = 0 desclines.Add(usrinfo) if(silencing) desclines += " (This error will now be silenced for [configured_error_silence_time / 600] minutes)" - if(error_cache) - error_cache.log_error(E, desclines) + if(GLOB.error_cache) + GLOB.error_cache.log_error(E, desclines) world.log << "\[[time_stamp()]] Runtime in [E.file],[E.line]: [E]" for(var/line in desclines) @@ -106,7 +108,7 @@ var/global/total_runtimes_skipped = 0 split[i] = "\[[time2text(world.timeofday,"hh:mm:ss")]\][split[i]]" E.desc = jointext(split, "\n") if(config && config.log_runtimes) - world.log = runtime_diary + world.log = GLOB.runtime_diary ..(E) world.log = null diff --git a/code/modules/error_handler/error_viewer.dm b/code/modules/error_handler/error_viewer.dm index 11d7532023..eee95fe0af 100644 --- a/code/modules/error_handler/error_viewer.dm +++ b/code/modules/error_handler/error_viewer.dm @@ -8,10 +8,10 @@ // right here: #ifdef DEBUG -/var/datum/error_viewer/error_cache/error_cache = new() +GLOBAL_DATUM_INIT(error_cache, /datum/error_viewer/error_cache, new) #else // If debugging is disabled, there's nothing useful to log, so don't bother. -/var/datum/error_viewer/error_cache/error_cache = null +GLOBAL_DATUM(error_cache, /datum/error_viewer/error_cache) #endif // - error_source datums exist for each line (of code) that generates an error, @@ -80,7 +80,7 @@ /datum/error_viewer/error_cache/show_to(user, datum/error_viewer/back_to, linear) var/html = build_header() - html += "[global.total_runtimes] runtimes, [global.total_runtimes_skipped] skipped

    " + html += "[GLOB.total_runtimes] runtimes, [GLOB.total_runtimes_skipped] skipped

    " if (!linear) html += "organized | [make_link("linear", null, 1)]
    " var/datum/error_viewer/error_source/error_source @@ -137,7 +137,7 @@ /datum/error_viewer/error_source/show_to(user, datum/error_viewer/back_to, linear) if (!istype(back_to)) - back_to = error_cache + back_to = GLOB.error_cache var/html = build_header(back_to) for (var/datum/error_viewer/error_entry/error_entry in errors) diff --git a/code/modules/events/_event.dm b/code/modules/events/_event.dm index e90b24fa5e..9b97dddb0e 100644 --- a/code/modules/events/_event.dm +++ b/code/modules/events/_event.dm @@ -15,7 +15,7 @@ var/max_occurrences = 20 //The maximum number of times this event can occur (naturally), it can still be forced. //By setting this to 0 you can effectively disable an event. - var/holidayID = "" //string which should be in the SSevents.holidays list if you wish this event to be holiday-specific + var/holidayID = "" //string which should be in the SSeventss.holidays list if you wish this event to be holiday-specific //anything with a (non-null) holidayID which does not match holiday, cannot run. var/wizardevent = 0 @@ -43,7 +43,7 @@ return FALSE if(earliest_start >= world.time) return FALSE - if(wizardevent != SSevent.wizardmode) + if(wizardevent != SSevents.wizardmode) return FALSE if(players_amt < min_players) return FALSE @@ -51,7 +51,7 @@ return FALSE if(gamemode_whitelist.len && !(gamemode in gamemode_whitelist)) return FALSE - if(holidayID && (!SSevent.holidays || !SSevent.holidays[holidayID])) + if(holidayID && (!SSevents.holidays || !SSevents.holidays[holidayID])) return FALSE return TRUE @@ -78,7 +78,7 @@ triggering = FALSE message_admins("[key_name_admin(usr)] cancelled event [name].") log_admin_private("[key_name(usr)] cancelled event [name].") - feedback_add_details("admin_verb","CancelEvent: [typepath]") + feedback_add_details("admin_verb","Cancel Event: [typepath]") /datum/round_event_control/proc/runEvent(random) var/datum/round_event/E = new typepath() @@ -175,12 +175,12 @@ //which should be the only place it's referenced. //Called when start(), announce() and end() has all been called. /datum/round_event/proc/kill() - SSevent.running -= src + SSevents.running -= src //Sets up the event then adds the event to the the list of running events /datum/round_event/New(my_processing = TRUE) setup() processing = my_processing - SSevent.running += src + SSevents.running += src return ..() diff --git a/code/modules/events/abductor.dm b/code/modules/events/abductor.dm index 34e43fdbd9..0377f0e935 100644 --- a/code/modules/events/abductor.dm +++ b/code/modules/events/abductor.dm @@ -19,11 +19,11 @@ return NOT_ENOUGH_PLAYERS //Oh god why we can't have static functions // I feel your pain, bro - var/number = ticker.mode.abductor_teams + 1 + var/number = SSticker.mode.abductor_teams + 1 var/datum/game_mode/abduction/temp - if(ticker.mode.config_tag == "abduction") - temp = ticker.mode + if(SSticker.mode.config_tag == "abduction") + temp = SSticker.mode else temp = new @@ -47,10 +47,10 @@ temp.make_abductor_team(number,preset_scientist=scientist_mind,preset_agent=agent_mind) temp.post_setup_team(number) - ticker.mode.abductor_teams++ + SSticker.mode.abductor_teams++ - if(ticker.mode.config_tag != "abduction") - ticker.mode.abductors |= temp.abductors + if(SSticker.mode.config_tag != "abduction") + SSticker.mode.abductors |= temp.abductors spawned_mobs += list(agent, scientist) return SUCCESSFUL_SPAWN diff --git a/code/modules/events/alien_infestation.dm b/code/modules/events/alien_infestation.dm index 67651c6bee..e43349934f 100644 --- a/code/modules/events/alien_infestation.dm +++ b/code/modules/events/alien_infestation.dm @@ -36,7 +36,7 @@ /datum/round_event/ghost_role/alien_infestation/spawn_role() var/list/vents = list() - for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent in machines) + for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent in GLOB.machines) if(QDELETED(temp_vent)) continue if(temp_vent.loc.z == ZLEVEL_STATION && !temp_vent.welded) diff --git a/code/modules/events/blob.dm b/code/modules/events/blob.dm index b03a0a98e1..80142edbc7 100644 --- a/code/modules/events/blob.dm +++ b/code/modules/events/blob.dm @@ -24,14 +24,14 @@ /datum/round_event/ghost_role/blob/spawn_role() - if(!blobstart.len) + if(!GLOB.blobstart.len) return MAP_ERROR var/list/candidates = get_candidates("blob", null, ROLE_BLOB) if(!candidates.len) return NOT_ENOUGH_PLAYERS var/mob/dead/observer/new_blob = pick(candidates) - var/obj/structure/blob/core/BC = new/obj/structure/blob/core(pick(blobstart), new_blob.client, new_rate) - BC.overmind.blob_points = min(20 + player_list.len, BC.overmind.max_blob_points) + var/obj/structure/blob/core/BC = new/obj/structure/blob/core(pick(GLOB.blobstart), new_blob.client, new_rate) + BC.overmind.blob_points = min(20 + GLOB.player_list.len, BC.overmind.max_blob_points) spawned_mobs += BC.overmind message_admins("[key_name_admin(BC.overmind)] has been made into a blob overmind by an event.") log_game("[key_name(BC.overmind)] was spawned as a blob overmind by an event.") diff --git a/code/modules/events/brand_intelligence.dm b/code/modules/events/brand_intelligence.dm index d70c38722a..b42ea9d554 100644 --- a/code/modules/events/brand_intelligence.dm +++ b/code/modules/events/brand_intelligence.dm @@ -26,7 +26,7 @@ /datum/round_event/brand_intelligence/start() - for(var/obj/machinery/vending/V in machines) + for(var/obj/machinery/vending/V in GLOB.machines) if(V.z != 1) continue vendingMachines.Add(V) diff --git a/code/modules/events/camerafailure.dm b/code/modules/events/camerafailure.dm index 695b82a192..1ba0ac2f55 100644 --- a/code/modules/events/camerafailure.dm +++ b/code/modules/events/camerafailure.dm @@ -12,10 +12,10 @@ /datum/round_event/camera_failure/tick() var/iterations = 1 - var/obj/machinery/camera/C = pick(cameranet.cameras) + var/obj/machinery/camera/C = pick(GLOB.cameranet.cameras) while(prob(round(100/iterations))) while(!("SS13" in C.network)) - C = pick(cameranet.cameras) + C = pick(GLOB.cameranet.cameras) if(C.status) C.toggle_cam(null, 0) iterations *= 2.5 diff --git a/code/modules/events/carp_migration.dm b/code/modules/events/carp_migration.dm index dcf1da09ce..34e5d5e9a2 100644 --- a/code/modules/events/carp_migration.dm +++ b/code/modules/events/carp_migration.dm @@ -18,7 +18,7 @@ /datum/round_event/carp_migration/start() - for(var/obj/effect/landmark/C in landmarks_list) + for(var/obj/effect/landmark/C in GLOB.landmarks_list) if(C.name == "carpspawn") if(prob(95)) new /mob/living/simple_animal/hostile/carp(C.loc) diff --git a/code/modules/events/communications_blackout.dm b/code/modules/events/communications_blackout.dm index 97ccf60895..fdf894092d 100644 --- a/code/modules/events/communications_blackout.dm +++ b/code/modules/events/communications_blackout.dm @@ -8,13 +8,13 @@ /datum/round_event/communications_blackout/announce() var/alert = pick( "Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you*%fj00)`5vc-BZZT", \ - "Ionospheric anomalies detected. Temporary telecommunication failu*3mga;b4;'1v-BZZZT", \ + "Ionospheric anomalies detected. Temporary telecommunication failu*3mga;b4;'1v�-BZZZT", \ "Ionospheric anomalies detected. Temporary telec#MCi46:5.;@63-BZZZZT", \ "Ionospheric anomalies dete'fZ\\kg5_0-BZZZZZT", \ - "Ionospheri:% MCayj^j<.3-BZZZZZZT", \ - "#4nd%;f4y6,>%-BZZZZZZZT") + "Ionospheri:%� MCayj^j<.3-BZZZZZZT", \ + "#4nd%;f4y6,>�%-BZZZZZZZT") - for(var/mob/living/silicon/ai/A in ai_list) //AIs are always aware of communication blackouts. + for(var/mob/living/silicon/ai/A in GLOB.ai_list) //AIs are always aware of communication blackouts. to_chat(A, "
    [alert]
    ") if(prob(30)) //most of the time, we don't want an announcement, so as to allow AIs to fake blackouts. @@ -22,5 +22,5 @@ /datum/round_event/communications_blackout/start() - for(var/obj/machinery/telecomms/T in telecomms_list) + for(var/obj/machinery/telecomms/T in GLOB.telecomms_list) T.emp_act(1) diff --git a/code/modules/events/devil.dm b/code/modules/events/devil.dm index 527927ce42..e4a90fc184 100644 --- a/code/modules/events/devil.dm +++ b/code/modules/events/devil.dm @@ -14,7 +14,7 @@ /datum/round_event/ghost_role/devil/spawn_role() //selecting a spawn_loc - var/list/spawn_locs = latejoin + var/list/spawn_locs = GLOB.latejoin var/spawn_loc = pick(spawn_locs) if(!spawn_loc) return MAP_ERROR @@ -32,8 +32,8 @@ var/mob/living/carbon/human/devil = create_event_devil(spawn_loc) Mind.transfer_to(devil) - ticker.mode.finalize_devil(Mind, FALSE) - ticker.mode.add_devil_objectives(src, 2) + SSticker.mode.finalize_devil(Mind, FALSE) + SSticker.mode.add_devil_objectives(src, 2) Mind.announceDevilLaws() Mind.announce_objectives() @@ -58,5 +58,5 @@ var/datum/mind/Mind = new /datum/mind(key) Mind.assigned_role = "devil" Mind.special_role = "devil" - ticker.mode.devils |= Mind + SSticker.mode.devils |= Mind return Mind diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm index e410ea2ad7..ff097f1f21 100644 --- a/code/modules/events/disease_outbreak.dm +++ b/code/modules/events/disease_outbreak.dm @@ -21,7 +21,7 @@ if(!virus_type) virus_type = pick(/datum/disease/dnaspread, /datum/disease/advance/flu, /datum/disease/advance/cold, /datum/disease/brainrot, /datum/disease/magnitis) - for(var/mob/living/carbon/human/H in shuffle(living_mob_list)) + for(var/mob/living/carbon/human/H in shuffle(GLOB.living_mob_list)) var/turf/T = get_turf(H) if(!T) continue diff --git a/code/modules/events/dust.dm b/code/modules/events/dust.dm index cd9be28fbe..20df9e5d0c 100644 --- a/code/modules/events/dust.dm +++ b/code/modules/events/dust.dm @@ -12,7 +12,7 @@ announceWhen = 0 /datum/round_event/space_dust/start() - spawn_meteors(1, meteorsC) + spawn_meteors(1, GLOB.meteorsC) /datum/round_event_control/sandstorm name = "Sandstorm" @@ -27,4 +27,4 @@ announceWhen = 0 /datum/round_event/sandstorm/tick() - spawn_meteors(10, meteorsC) \ No newline at end of file + spawn_meteors(10, GLOB.meteorsC) \ No newline at end of file diff --git a/code/modules/events/electrical_storm.dm b/code/modules/events/electrical_storm.dm index db23439a04..528e7668eb 100644 --- a/code/modules/events/electrical_storm.dm +++ b/code/modules/events/electrical_storm.dm @@ -3,7 +3,7 @@ typepath = /datum/round_event/electrical_storm earliest_start = 6000 min_players = 5 - weight = 5 + weight = 15 alertadmins = 0 /datum/round_event/electrical_storm @@ -20,7 +20,7 @@ for(var/i=1, i <= lightsoutAmount, i++) var/list/possibleEpicentres = list() - for(var/obj/effect/landmark/newEpicentre in landmarks_list) + for(var/obj/effect/landmark/newEpicentre in GLOB.landmarks_list) if(newEpicentre.name == "lightsout" && !(newEpicentre in epicentreList)) possibleEpicentres += newEpicentre if(possibleEpicentres.len) diff --git a/code/modules/events/false_alarm.dm b/code/modules/events/false_alarm.dm index e498a2e0b4..0e4970ef6a 100644 --- a/code/modules/events/false_alarm.dm +++ b/code/modules/events/false_alarm.dm @@ -4,25 +4,18 @@ weight = 20 max_occurrences = 5 +/datum/round_event_control/falsealarm/canSpawnEvent(players_amt, gamemode) + return ..() && length(gather_false_events()) + /datum/round_event/falsealarm announceWhen = 0 endWhen = 1 /datum/round_event/falsealarm/announce() - var/list/events_list = list() - var/players_amt = get_active_player_count(alive_check = 1, afk_check = 1, human_check = 1) - var/gamemode = ticker.mode.config_tag - - for(var/datum/round_event_control/E in SSevent.control) - if(!E.canSpawnEvent(players_amt, gamemode)) - continue - - var/datum/round_event/event = E.typepath - if(initial(event.announceWhen) <= 0) - continue - events_list += E + var/gamemode = SSticker.mode.config_tag + var/events_list = gather_false_events(players_amt, gamemode) var/datum/round_event_control/event_control = pick(events_list) if(event_control) var/datum/round_event/Event = new event_control.typepath() @@ -30,4 +23,15 @@ Event.kill() //do not process this event - no starts, no ticks, no ends Event.announce() //just announce it like it's happening +/proc/gather_false_events(players_amt, gamemode) + . = list() + for(var/datum/round_event_control/E in SSevents.control) + if(istype(E,/datum/round_event_control/falsealarm)) + continue + if(!E.canSpawnEvent(players_amt, gamemode)) + continue + var/datum/round_event/event = E.typepath + if(initial(event.announceWhen) <= 0) + continue + . += E diff --git a/code/modules/events/grid_check.dm b/code/modules/events/grid_check.dm index a7a6a3564e..d66ce62c3e 100644 --- a/code/modules/events/grid_check.dm +++ b/code/modules/events/grid_check.dm @@ -13,7 +13,7 @@ /datum/round_event/grid_check/start() - for(var/P in apcs_list) + for(var/P in GLOB.apcs_list) var/obj/machinery/power/apc/C = P if(C.cell && C.z == ZLEVEL_STATION) C.energy_fail(rand(30,120)) \ No newline at end of file diff --git a/code/modules/events/holiday/halloween.dm b/code/modules/events/holiday/halloween.dm index 304ed6de7b..8f634003f5 100644 --- a/code/modules/events/holiday/halloween.dm +++ b/code/modules/events/holiday/halloween.dm @@ -8,7 +8,7 @@ /datum/round_event/spooky/start() ..() - for(var/mob/living/carbon/human/H in mob_list) + for(var/mob/living/carbon/human/H in GLOB.mob_list) var/obj/item/weapon/storage/backpack/b = locate() in H.contents new /obj/item/weapon/storage/spooky(b) if(ishuman(H) || islizard(H)) @@ -17,9 +17,9 @@ else H.set_species(/datum/species/zombie) - for(var/mob/living/simple_animal/pet/dog/corgi/Ian/Ian in mob_list) + for(var/mob/living/simple_animal/pet/dog/corgi/Ian/Ian in GLOB.mob_list) Ian.place_on_head(new /obj/item/weapon/bedsheet(Ian)) - for(var/mob/living/simple_animal/parrot/Poly/Poly in mob_list) + for(var/mob/living/simple_animal/parrot/Poly/Poly in GLOB.mob_list) new /mob/living/simple_animal/parrot/Poly/ghost(Poly.loc) qdel(Poly) @@ -35,7 +35,7 @@ earliest_start = 0 /datum/round_event/carp_migration/eyeballs/start() - for(var/obj/effect/landmark/C in landmarks_list) + for(var/obj/effect/landmark/C in GLOB.landmarks_list) if(C.name == "carpspawn") new /mob/living/simple_animal/hostile/carp/eyeball(C.loc) @@ -52,7 +52,7 @@ /datum/round_event/meteor_wave/spooky/tick() if(IsMultiple(activeFor, 4)) - spawn_meteors(3, meteorsSPOOKY) //meteor list types defined in gamemode/meteor/meteors.dm + spawn_meteors(3, GLOB.meteorsSPOOKY) //meteor list types defined in gamemode/meteor/meteors.dm //Creepy clown invasion /datum/round_event_control/creepy_clowns @@ -66,7 +66,7 @@ endWhen = 40 /datum/round_event/creepy_clowns/start() - for(var/mob/living/carbon/human/H in living_mob_list) + for(var/mob/living/carbon/human/H in GLOB.living_mob_list) if(!H.client || !istype(H)) return to_chat(H, "Honk...") @@ -77,7 +77,7 @@ /datum/round_event/creepy_clowns/tick() if(IsMultiple(activeFor, 4)) - for(var/mob/living/carbon/human/H in living_mob_list) + for(var/mob/living/carbon/human/H in GLOB.living_mob_list) if (prob(66)) playsound(H.loc, pick('sound/spookoween/scary_horn.ogg','sound/spookoween/scary_horn2.ogg', 'sound/spookoween/scary_horn3.ogg'), 100, 1) if (prob(33)) diff --git a/code/modules/events/holiday/vday.dm b/code/modules/events/holiday/vday.dm index 697414ee07..c53854a8e8 100644 --- a/code/modules/events/holiday/vday.dm +++ b/code/modules/events/holiday/vday.dm @@ -14,14 +14,14 @@ /datum/round_event/valentines/start() ..() - for(var/mob/living/carbon/human/H in living_mob_list) + for(var/mob/living/carbon/human/H in GLOB.living_mob_list) H.put_in_hands(new /obj/item/weapon/valentine) var/obj/item/weapon/storage/backpack/b = locate() in H.contents new /obj/item/weapon/reagent_containers/food/snacks/candyheart(b) var/list/valentines = list() - for(var/mob/living/M in player_list) + for(var/mob/living/M in GLOB.player_list) if(!M.stat && M.client && M.mind) valentines |= M @@ -45,12 +45,12 @@ to_chat(L, "You didn't get a date! They're all having fun without you! you'll show them though...") var/datum/objective/martyr/normiesgetout = new normiesgetout.owner = L.mind - ticker.mode.traitors |= L.mind + SSticker.mode.traitors |= L.mind L.mind.objectives += normiesgetout /proc/forge_valentines_objective(mob/living/lover,mob/living/date) - ticker.mode.traitors |= lover.mind + SSticker.mode.traitors |= lover.mind lover.mind.special_role = "valentine" var/datum/objective/protect/protect_objective = new /datum/objective/protect diff --git a/code/modules/events/holiday/xmas.dm b/code/modules/events/holiday/xmas.dm index 1aa4f7585e..c5f74ed68e 100644 --- a/code/modules/events/holiday/xmas.dm +++ b/code/modules/events/holiday/xmas.dm @@ -30,9 +30,9 @@ for(var/turf/open/floor/T in orange(1,xmas)) for(var/i=1,i<=rand(1,5),i++) new /obj/item/weapon/a_gift(T) - for(var/mob/living/simple_animal/pet/dog/corgi/Ian/Ian in mob_list) + for(var/mob/living/simple_animal/pet/dog/corgi/Ian/Ian in GLOB.mob_list) Ian.place_on_head(new /obj/item/clothing/head/helmet/space/santahat(Ian)) - for(var/obj/machinery/computer/security/telescreen/entertainment/Monitor in machines) + for(var/obj/machinery/computer/security/telescreen/entertainment/Monitor in GLOB.machines) Monitor.icon_state = "entertainment_xmas" /datum/round_event/presents/announce() @@ -60,7 +60,7 @@ "What do you get from eating tree decorations?\n\nTinsilitis!", "What do snowmen wear on their heads?\n\nIce caps!", "Why is Christmas just like life on ss13?\n\nYou do all the work and the fat guy gets all the credit.", - "Why doesnt Santa have any children?\n\nBecause he only comes down the chimney.") + "Why doesn�t Santa have any children?\n\nBecause he only comes down the chimney.") new /obj/item/clothing/head/festive(target.loc) user.update_icons() cracked = 1 @@ -103,11 +103,11 @@ priority_announce("Santa is coming to town!", "Unknown Transmission") /datum/round_event/santa/start() - for(var/mob/M in dead_mob_list) + for(var/mob/M in GLOB.dead_mob_list) spawn(0) var/response = alert(M, "Santa is coming to town! Do you want to be santa?", "Ho ho ho!", "Yes", "No") if(response == "Yes" && M && M.client && M.stat == DEAD && !santa) - santa = new /mob/living/carbon/human(pick(blobstart)) + santa = new /mob/living/carbon/human(pick(GLOB.blobstart)) santa.key = M.key qdel(M) diff --git a/code/modules/events/immovable_rod.dm b/code/modules/events/immovable_rod.dm index 2ef42bb25f..a7a7d70720 100644 --- a/code/modules/events/immovable_rod.dm +++ b/code/modules/events/immovable_rod.dm @@ -20,7 +20,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1 priority_announce("What the fuck was that?!", "General Alert") /datum/round_event/immovable_rod/start() - var/startside = pick(cardinal) + var/startside = pick(GLOB.cardinal) var/turf/startT = spaceDebrisStartLoc(startside, 1) var/turf/endT = spaceDebrisFinishLoc(startside, 1) new /obj/effect/immovablerod(startT, endT) @@ -47,7 +47,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1 notify_ghosts("\A [src] is inbound!", enter_link="(Click to orbit)", source=src, action=NOTIFY_ORBIT) - poi_list += src + GLOB.poi_list += src if(end && end.z==z_original) walk_towards(src, destination, 1) @@ -58,7 +58,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1 ghost.ManualFollow(src) /obj/effect/immovablerod/Destroy() - poi_list -= src + GLOB.poi_list -= src . = ..() /obj/effect/immovablerod/Move() diff --git a/code/modules/events/ion_storm.dm b/code/modules/events/ion_storm.dm index 463be427c3..de2ab7183b 100644 --- a/code/modules/events/ion_storm.dm +++ b/code/modules/events/ion_storm.dm @@ -32,7 +32,7 @@ /datum/round_event/ion_storm/start() //AI laws - for(var/mob/living/silicon/ai/M in living_mob_list) + for(var/mob/living/silicon/ai/M in GLOB.living_mob_list) M.laws_sanity_check() if(M.stat != 2 && M.see_in_dark != 0) if(prob(replaceLawsetChance)) @@ -55,7 +55,7 @@ M.post_lawchange() if(botEmagChance) - for(var/mob/living/simple_animal/bot/bot in living_mob_list) + for(var/mob/living/simple_animal/bot/bot in GLOB.living_mob_list) if(prob(botEmagChance)) bot.emag_act() diff --git a/code/modules/events/mass_hallucination.dm b/code/modules/events/mass_hallucination.dm index 2bf1231e8f..a90df9a3a0 100644 --- a/code/modules/events/mass_hallucination.dm +++ b/code/modules/events/mass_hallucination.dm @@ -6,5 +6,5 @@ min_players = 1 /datum/round_event/mass_hallucination/start() - for(var/mob/living/carbon/C in living_mob_list) + for(var/mob/living/carbon/C in GLOB.living_mob_list) C.hallucination += rand(20, 50) \ No newline at end of file diff --git a/code/modules/events/meteor_wave.dm b/code/modules/events/meteor_wave.dm index 1cd401ca5b..01f9aa3975 100644 --- a/code/modules/events/meteor_wave.dm +++ b/code/modules/events/meteor_wave.dm @@ -27,15 +27,15 @@ "catastrophic" = 10)) switch(wave_name) if("normal") - wave_type = meteors_normal + wave_type = GLOB.meteors_normal if("threatening") - wave_type = meteors_threatening + wave_type = GLOB.meteors_threatening if("catastrophic") - wave_type = meteors_catastrophic + wave_type = GLOB.meteors_catastrophic if("meaty") - wave_type = meteorsB + wave_type = GLOB.meteorsB if("space dust") - wave_type = meteorsC + wave_type = GLOB.meteorsC else WARNING("Wave name of [wave_name] not recognised.") kill() diff --git a/code/modules/events/operative.dm b/code/modules/events/operative.dm index c5545c75f1..4db2029ce7 100644 --- a/code/modules/events/operative.dm +++ b/code/modules/events/operative.dm @@ -16,7 +16,7 @@ var/mob/dead/selected = pick_n_take(candidates) var/list/spawn_locs = list() - for(var/obj/effect/landmark/L in landmarks_list) + for(var/obj/effect/landmark/L in GLOB.landmarks_list) if(L.name in list("ninjaspawn","carpspawn")) spawn_locs += L.loc if(!spawn_locs.len) @@ -32,10 +32,10 @@ var/datum/mind/Mind = new /datum/mind(selected.key) Mind.assigned_role = "Lone Operative" Mind.special_role = "Lone Operative" - ticker.mode.traitors |= Mind + SSticker.mode.traitors |= Mind Mind.active = 1 - var/obj/machinery/nuclearbomb/selfdestruct/nuke = locate() in machines + var/obj/machinery/nuclearbomb/selfdestruct/nuke = locate() in GLOB.machines if(nuke) var/nuke_code if(!nuke.r_code || nuke.r_code == "ADMIN") diff --git a/code/modules/events/portal_storm.dm b/code/modules/events/portal_storm.dm index 68dc656719..8f95552a4b 100644 --- a/code/modules/events/portal_storm.dm +++ b/code/modules/events/portal_storm.dm @@ -50,14 +50,14 @@ for(var/hostile in hostile_types) number_of_hostiles += hostile_types[hostile] - var/list/b_spawns = generic_event_spawns.Copy() + var/list/b_spawns = GLOB.generic_event_spawns.Copy() while(number_of_bosses > boss_spawn.len) var/turf/F = get_turf(pick_n_take(b_spawns)) if(!F) F = safepick(get_area_turfs(pick(station_areas))) boss_spawn += F - var/list/h_spawns = generic_event_spawns.Copy() + var/list/h_spawns = GLOB.generic_event_spawns.Copy() while(number_of_hostiles > hostiles_spawn.len) var/turf/T = get_turf(pick_n_take(h_spawns)) if(!T) diff --git a/code/modules/events/processor_overload.dm b/code/modules/events/processor_overload.dm index d1f07d0598..e0673cb741 100644 --- a/code/modules/events/processor_overload.dm +++ b/code/modules/events/processor_overload.dm @@ -15,7 +15,7 @@ "Exospheri:%£ QCbyj^j[alert]
    ") @@ -27,7 +27,7 @@ /datum/round_event/processor_overload/start() - for(var/obj/machinery/telecomms/T in telecomms_list) + for(var/obj/machinery/telecomms/T in GLOB.telecomms_list) if(istype(T, /obj/machinery/telecomms/processor)) var/obj/machinery/telecomms/processor/P = T if(prob(10)) diff --git a/code/modules/events/sentience.dm b/code/modules/events/sentience.dm index 8dbd9bf0c8..64175e11e9 100644 --- a/code/modules/events/sentience.dm +++ b/code/modules/events/sentience.dm @@ -29,11 +29,11 @@ // find our chosen mob to breathe life into // Mobs have to be simple animals, mindless and on station var/list/potential = list() - for(var/mob/living/simple_animal/L in living_mob_list) + for(var/mob/living/simple_animal/L in GLOB.living_mob_list) var/turf/T = get_turf(L) if(T.z != ZLEVEL_STATION) continue - if(!(L in player_list) && !L.mind) + if(!(L in GLOB.player_list) && !L.mind) potential += L if(!potential.len) @@ -49,8 +49,10 @@ spawned_animals++ SA.key = SG.key - SA.languages_spoken |= HUMAN - SA.languages_understood |= HUMAN + + SA.grant_language(/datum/language/common) + SET_SECONDARY_FLAG(SA, OMNITONGUE) + SA.sentience_act() SA.maxHealth = max(SA.maxHealth, 200) diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index c50b2dc919..5dc56ceac8 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -434,14 +434,14 @@ var/list/growth_queue = list() var/spread_multiplier = 5 var/spread_cap = 30 - var/list/mutations_list = list() + var/list/GLOB.mutations_list = list() var/mutativeness = 1 /obj/effect/spacevine_controller/New(loc, list/muts, potency, production) add_atom_colour("#ffffff", FIXED_COLOUR_PRIORITY) spawn_spacevine_piece(loc, , muts) START_PROCESSING(SSobj, src) - init_subtypes(/datum/spacevine_mutation/, mutations_list) + init_subtypes(/datum/spacevine_mutation/, GLOB.mutations_list) if(potency != null) mutativeness = potency / 10 if(production != null) @@ -476,7 +476,7 @@ var/parentcolor = parent.atom_colours[FIXED_COLOUR_PRIORITY] SV.add_atom_colour(parentcolor, FIXED_COLOUR_PRIORITY) if(prob(mutativeness)) - var/datum/spacevine_mutation/randmut = pick(mutations_list - SV.mutations) + var/datum/spacevine_mutation/randmut = pick(GLOB.mutations_list - SV.mutations) randmut.add_mutation_to_vinepiece(SV) for(var/datum/spacevine_mutation/SM in SV.mutations) @@ -547,7 +547,7 @@ buckle_mob(V, 1) /obj/structure/spacevine/proc/spread() - var/direction = pick(cardinal) + var/direction = pick(GLOB.cardinal) var/turf/stepturf = get_step(src,direction) for(var/datum/spacevine_mutation/SM in mutations) SM.on_spread(src, stepturf) diff --git a/code/modules/events/spontaneous_appendicitis.dm b/code/modules/events/spontaneous_appendicitis.dm index 8e00502cbd..eb66be3038 100644 --- a/code/modules/events/spontaneous_appendicitis.dm +++ b/code/modules/events/spontaneous_appendicitis.dm @@ -7,7 +7,7 @@ min_players = 5 // To make your chance of getting help a bit higher. /datum/round_event/spontaneous_appendicitis/start() - for(var/mob/living/carbon/human/H in shuffle(living_mob_list)) + for(var/mob/living/carbon/human/H in shuffle(GLOB.living_mob_list)) var/foundAlready = 0 //don't infect someone that already has the virus for(var/datum/disease/D in H.viruses) foundAlready = 1 diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm index 14ceb2cb23..2039e58caa 100644 --- a/code/modules/events/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -10,8 +10,7 @@ var/interval = 2 var/list/vents = list() var/list/gunk = list("water","carbon","flour","radium","toxin","cleaner","nutriment","condensedcapsaicin","mushroomhallucinogen","lube", - "plantbgone","banana","charcoal","space_drugs","morphine","holywater","ethanol","hot_coco","sacid", - "aphro","aphro+","anaphro","anaphro+","semen") + "plantbgone","banana","charcoal","space_drugs","morphine","holywater","ethanol","hot_coco","sacid") /datum/round_event/vent_clog/announce() priority_announce("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "Atmospherics alert") @@ -19,7 +18,7 @@ /datum/round_event/vent_clog/setup() endWhen = rand(25, 100) - for(var/obj/machinery/atmospherics/components/unary/vent_scrubber/temp_vent in machines) + for(var/obj/machinery/atmospherics/components/unary/vent_scrubber/temp_vent in GLOB.machines) if(temp_vent.loc.z == ZLEVEL_STATION && !temp_vent.welded) var/datum/pipeline/temp_vent_parent = temp_vent.PARENT1 if(temp_vent_parent.other_atmosmch.len > 20) diff --git a/code/modules/events/wizard/aid.dm b/code/modules/events/wizard/aid.dm index 8bf84cd0b8..799b9fe8cf 100644 --- a/code/modules/events/wizard/aid.dm +++ b/code/modules/events/wizard/aid.dm @@ -9,7 +9,7 @@ /datum/round_event/wizard/robelesscasting/start() - for(var/mob/living/L in mob_list) //Hey if a corgi has magic missle he should get the same benifit as anyone + for(var/mob/living/L in GLOB.mob_list) //Hey if a corgi has magic missle he should get the same benifit as anyone if(L.mind && L.mind.spell_list.len != 0) var/spell_improved = 0 for(var/obj/effect/proc_holder/spell/S in L.mind.spell_list) @@ -29,7 +29,7 @@ earliest_start = 0 /datum/round_event/wizard/improvedcasting/start() - for(var/mob/living/L in mob_list) + for(var/mob/living/L in GLOB.mob_list) if(L.mind && L.mind.spell_list.len != 0) for(var/obj/effect/proc_holder/spell/S in L.mind.spell_list) S.name = initial(S.name) diff --git a/code/modules/events/wizard/blobies.dm b/code/modules/events/wizard/blobies.dm index 6953370e45..bffa138933 100644 --- a/code/modules/events/wizard/blobies.dm +++ b/code/modules/events/wizard/blobies.dm @@ -7,5 +7,5 @@ /datum/round_event/wizard/blobies/start() - for(var/mob/living/carbon/human/H in dead_mob_list) + for(var/mob/living/carbon/human/H in GLOB.dead_mob_list) new /mob/living/simple_animal/hostile/blob/blobspore(H.loc) diff --git a/code/modules/events/wizard/curseditems.dm b/code/modules/events/wizard/curseditems.dm index 593ad93d8a..2d0b5251d5 100644 --- a/code/modules/events/wizard/curseditems.dm +++ b/code/modules/events/wizard/curseditems.dm @@ -37,10 +37,10 @@ ruins_spaceworthiness = 1 ruins_wizard_loadout = 1 - for(var/mob/living/carbon/human/H in living_mob_list) + for(var/mob/living/carbon/human/H in GLOB.living_mob_list) if(ruins_spaceworthiness && (H.z != 1 || isspaceturf(H.loc) || isplasmaman(H))) continue //#savetheminers - if(ruins_wizard_loadout && H.mind && ((H.mind in ticker.mode.wizards) || (H.mind in ticker.mode.apprentices))) + if(ruins_wizard_loadout && H.mind && ((H.mind in SSticker.mode.wizards) || (H.mind in SSticker.mode.apprentices))) continue if(item_set == "catgirls2015") //Wizard code means never having to say you're sorry H.gender = FEMALE @@ -54,7 +54,7 @@ I.flags |= NODROP I.name = "cursed " + I.name - for(var/mob/living/carbon/human/H in living_mob_list) + for(var/mob/living/carbon/human/H in GLOB.living_mob_list) var/datum/effect_system/smoke_spread/smoke = new smoke.set_up(0, H.loc) smoke.start() diff --git a/code/modules/events/wizard/departmentrevolt.dm b/code/modules/events/wizard/departmentrevolt.dm index 0d74fcd350..83f05fae2c 100644 --- a/code/modules/events/wizard/departmentrevolt.dm +++ b/code/modules/events/wizard/departmentrevolt.dm @@ -35,14 +35,14 @@ nation += pick("stan", "topia", "land", "nia", "ca", "tova", "dor", "ador", "tia", "sia", "ano", "tica", "tide", "cis", "marea", "co", "taoide", "slavia", "stotzka") - for(var/mob/living/carbon/human/H in mob_list) + for(var/mob/living/carbon/human/H in GLOB.mob_list) if(H.mind) var/datum/mind/M = H.mind - if(M.assigned_role && !(M in ticker.mode.traitors)) + if(M.assigned_role && !(M in SSticker.mode.traitors)) for(var/job in jobs_to_revolt) if(M.assigned_role == job) citizens += H - ticker.mode.traitors += M + SSticker.mode.traitors += M M.special_role = "separatist" H.log_message("Was made into a separatist, long live [nation]!", INDIVIDUAL_ATTACK_LOG) to_chat(H, "You are a separatist! [nation] forever! Protect the soverignty of your newfound land with your comrades in arms!") diff --git a/code/modules/events/wizard/fakeexplosion.dm b/code/modules/events/wizard/fakeexplosion.dm index 3cc8b68bd0..2dec270472 100644 --- a/code/modules/events/wizard/fakeexplosion.dm +++ b/code/modules/events/wizard/fakeexplosion.dm @@ -6,6 +6,6 @@ earliest_start = 0 /datum/round_event/wizard/fake_explosion/start() - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) M << 'sound/machines/Alarm.ogg' - addtimer(CALLBACK(ticker, /datum/controller/subsystem/ticker/.proc/station_explosion_cinematic, 1, "fake"), 100) //:o) \ No newline at end of file + addtimer(CALLBACK(SSticker, /datum/controller/subsystem/ticker/.proc/station_explosion_cinematic, 1, "fake"), 100) //:o) \ No newline at end of file diff --git a/code/modules/events/wizard/ghost.dm b/code/modules/events/wizard/ghost.dm index 1227833de2..d29c6c0534 100644 --- a/code/modules/events/wizard/ghost.dm +++ b/code/modules/events/wizard/ghost.dm @@ -20,7 +20,7 @@ earliest_start = 0 /datum/round_event/wizard/possession/start() - for(var/mob/dead/observer/G in player_list) + for(var/mob/dead/observer/G in GLOB.player_list) G.verbs += /mob/dead/observer/verb/boo G.verbs += /mob/dead/observer/verb/possess to_chat(G, "You suddenly feel a welling of new spooky powers...") diff --git a/code/modules/events/wizard/greentext.dm b/code/modules/events/wizard/greentext.dm index 8251f5ae7e..a2db78ee67 100644 --- a/code/modules/events/wizard/greentext.dm +++ b/code/modules/events/wizard/greentext.dm @@ -7,7 +7,7 @@ /datum/round_event/wizard/greentext/start() - var/list/holder_canadates = player_list.Copy() + var/list/holder_canadates = GLOB.player_list.Copy() for(var/mob/M in holder_canadates) if(!ishuman(M)) holder_canadates -= M @@ -33,7 +33,7 @@ /obj/item/weapon/greentext/New() ..() - poi_list |= src + GLOB.poi_list |= src /obj/item/weapon/greentext/equipped(mob/living/user as mob) to_chat(user, "So long as you leave this place with greentext in hand you know will be happy...") @@ -60,8 +60,8 @@ /obj/item/weapon/greentext/process() if(new_holder && new_holder.z == ZLEVEL_CENTCOM)//you're winner! to_chat(new_holder, "At last it feels like victory is assured!") - if(!(new_holder in ticker.mode.traitors)) - ticker.mode.traitors += new_holder.mind + if(!(new_holder in SSticker.mode.traitors)) + SSticker.mode.traitors += new_holder.mind new_holder.mind.special_role = "winner" var/datum/objective/O = new /datum/objective("Succeed") O.completed = 1 //YES! @@ -82,8 +82,8 @@ return QDEL_HINT_LETMELIVE . = ..() - poi_list.Remove(src) - for(var/mob/M in mob_list) + GLOB.poi_list.Remove(src) + for(var/mob/M in GLOB.mob_list) var/message = "A dark temptation has passed from this world" if(M in color_altered_mobs) message += " and you're finally able to forgive yourself" diff --git a/code/modules/events/wizard/imposter.dm b/code/modules/events/wizard/imposter.dm index d112bd698b..ffec648771 100644 --- a/code/modules/events/wizard/imposter.dm +++ b/code/modules/events/wizard/imposter.dm @@ -7,7 +7,7 @@ /datum/round_event/wizard/imposter/start() - for(var/datum/mind/M in ticker.mode.wizards) + for(var/datum/mind/M in SSticker.mode.wizards) if(!ishuman(M.current)) continue var/mob/living/carbon/human/W = M.current @@ -43,7 +43,7 @@ I.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/turf_teleport/blink(null)) I.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt(null)) - ticker.mode.apprentices += I.mind + SSticker.mode.apprentices += I.mind I.mind.special_role = "imposter" var/datum/objective/protect/protect_objective = new /datum/objective/protect @@ -51,7 +51,7 @@ 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) + SSticker.mode.update_wiz_icons_added(I.mind) I.log_message("Is an imposter!", INDIVIDUAL_ATTACK_LOG) to_chat(I, "You are an imposter! Trick and confuse the crew to misdirect malice from your handsome original!") diff --git a/code/modules/events/wizard/invincible.dm b/code/modules/events/wizard/invincible.dm index f8436773ec..adb0a107b2 100644 --- a/code/modules/events/wizard/invincible.dm +++ b/code/modules/events/wizard/invincible.dm @@ -7,6 +7,6 @@ /datum/round_event/wizard/invincible/start() - for(var/mob/living/carbon/human/H in living_mob_list) + for(var/mob/living/carbon/human/H in GLOB.living_mob_list) H.reagents.add_reagent("adminordrazine", 40) //100 ticks of absolute invinciblity (barring gibs) to_chat(H, "You feel invincible, nothing can hurt you!") \ No newline at end of file diff --git a/code/modules/events/wizard/magicarp.dm b/code/modules/events/wizard/magicarp.dm index fe89f02b91..3d0461d3cf 100644 --- a/code/modules/events/wizard/magicarp.dm +++ b/code/modules/events/wizard/magicarp.dm @@ -16,7 +16,7 @@ priority_announce("Unknown magical entities have been detected near [station_name()], please stand-by.", "Lifesign Alert") /datum/round_event/wizard/magicarp/start() - for(var/obj/effect/landmark/C in landmarks_list) + for(var/obj/effect/landmark/C in GLOB.landmarks_list) if(C.name == "carpspawn") if(prob(5)) new /mob/living/simple_animal/hostile/carp/ranged/chaos(C.loc) diff --git a/code/modules/events/wizard/petsplosion.dm b/code/modules/events/wizard/petsplosion.dm index 30d6d631ac..d69549e205 100644 --- a/code/modules/events/wizard/petsplosion.dm +++ b/code/modules/events/wizard/petsplosion.dm @@ -12,6 +12,6 @@ /datum/round_event/wizard/petsplosion/tick() if(activeFor >= 30 * countdown) // 0 seconds : 2 animals | 30 seconds : 4 animals | 1 minute : 8 animals countdown += 1 - for(var/mob/living/simple_animal/F in living_mob_list) //If you cull the heard before the next replication, things will be easier for you + for(var/mob/living/simple_animal/F in GLOB.living_mob_list) //If you cull the heard before the next replication, things will be easier for you if(!ishostile(F)) new F.type(F.loc) \ No newline at end of file diff --git a/code/modules/events/wizard/race.dm b/code/modules/events/wizard/race.dm index 03952d03ae..298d92dd3c 100644 --- a/code/modules/events/wizard/race.dm +++ b/code/modules/events/wizard/race.dm @@ -20,7 +20,7 @@ if(prob(50)) all_the_same = 1 - for(var/mob/living/carbon/human/H in mob_list) //yes, even the dead + for(var/mob/living/carbon/human/H in GLOB.mob_list) //yes, even the dead H.set_species(new_species) H.real_name = new_species.random_name(H.gender,1) H.dna.unique_enzymes = H.dna.generate_unique_enzymes() diff --git a/code/modules/events/wizard/shuffle.dm b/code/modules/events/wizard/shuffle.dm index 145c099066..e1db066674 100644 --- a/code/modules/events/wizard/shuffle.dm +++ b/code/modules/events/wizard/shuffle.dm @@ -12,7 +12,7 @@ var/list/moblocs = list() var/list/mobs = list() - for(var/mob/living/carbon/human/H in living_mob_list) + for(var/mob/living/carbon/human/H in GLOB.living_mob_list) if(H.z != 1) continue //lets not try to strand people in space or stuck in the wizards den moblocs += H.loc @@ -30,7 +30,7 @@ do_teleport(H, moblocs[moblocs.len]) moblocs.len -= 1 - for(var/mob/living/carbon/human/H in living_mob_list) + for(var/mob/living/carbon/human/H in GLOB.living_mob_list) var/datum/effect_system/smoke_spread/smoke = new smoke.set_up(0, H.loc) smoke.start() @@ -48,7 +48,7 @@ var/list/mobnames = list() var/list/mobs = list() - for(var/mob/living/carbon/human/H in living_mob_list) + for(var/mob/living/carbon/human/H in GLOB.living_mob_list) mobnames += H.real_name mobs += H @@ -64,7 +64,7 @@ H.real_name = mobnames[mobnames.len] mobnames.len -= 1 - for(var/mob/living/carbon/human/H in living_mob_list) + for(var/mob/living/carbon/human/H in GLOB.living_mob_list) var/datum/effect_system/smoke_spread/smoke = new smoke.set_up(0, H.loc) smoke.start() @@ -81,8 +81,8 @@ /datum/round_event/wizard/shuffleminds/start() var/list/mobs = list() - for(var/mob/living/carbon/human/H in living_mob_list) - if(H.stat || !H.mind || (H.mind in ticker.mode.wizards) || (H.mind in ticker.mode.apprentices)) + for(var/mob/living/carbon/human/H in GLOB.living_mob_list) + if(H.stat || !H.mind || (H.mind in SSticker.mode.wizards) || (H.mind in SSticker.mode.apprentices)) continue //the wizard(s) are spared on this one mobs += H @@ -98,7 +98,7 @@ swapper.cast(list(H), mobs[mobs.len], 1) mobs -= mobs[mobs.len] - for(var/mob/living/carbon/human/H in living_mob_list) + for(var/mob/living/carbon/human/H in GLOB.living_mob_list) var/datum/effect_system/smoke_spread/smoke = new smoke.set_up(0, H.loc) smoke.start() diff --git a/code/modules/events/wormholes.dm b/code/modules/events/wormholes.dm index 04313515b7..29837075ac 100644 --- a/code/modules/events/wormholes.dm +++ b/code/modules/events/wormholes.dm @@ -39,7 +39,7 @@ O.loc = T /datum/round_event/wormholes/end() - portals.Remove(wormholes) + GLOB.portals.Remove(wormholes) for(var/obj/effect/portal/wormhole/O in wormholes) O.loc = null wormholes.Cut() @@ -67,8 +67,8 @@ if(istype(M, /atom/movable)) var/turf/target - if(portals.len) - var/obj/effect/portal/P = pick(portals) + if(GLOB.portals.len) + var/obj/effect/portal/P = pick(GLOB.portals) if(P && isturf(P.loc)) target = P.loc if(!target) diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 4516461cb5..d735d8e534 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -148,7 +148,7 @@ Gunshots/explosions/opening doors/less rare audio (done) /obj/effect/hallucination/fake_flood/proc/Expand() for(var/turf/FT in flood_turfs) - for(var/dir in cardinal) + for(var/dir in GLOB.cardinal) var/turf/T = get_step(FT, dir) if((T in flood_turfs) || !FT.CanAtmosPass(T)) continue @@ -216,7 +216,7 @@ Gunshots/explosions/opening doors/less rare audio (done) /obj/effect/hallucination/simple/clown/Initialize(mapload, var/mob/living/carbon/T,duration) ..(loc, T) - name = pick(clown_names) + name = pick(GLOB.clown_names) QDEL_IN(src,duration) /obj/effect/hallucination/simple/clown/scary @@ -441,7 +441,7 @@ Gunshots/explosions/opening doors/less rare audio (done) target = T var/image/A = null var/kind = force_kind ? force_kind : pick("clown","corgi","carp","skeleton","demon","zombie") - for(var/mob/living/carbon/human/H in living_mob_list) + for(var/mob/living/carbon/human/H in GLOB.living_mob_list) if(H == target) continue if(skip_nearby && (H in view(target))) @@ -518,7 +518,7 @@ Gunshots/explosions/opening doors/less rare audio (done) var/mob/living/carbon/human/clone = null var/clone_weapon = null - for(var/mob/living/carbon/human/H in living_mob_list) + for(var/mob/living/carbon/human/H in GLOB.living_mob_list) if(H.stat || H.lying) continue clone = H @@ -527,7 +527,24 @@ Gunshots/explosions/opening doors/less rare audio (done) if(!clone) return + var/static/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/ballistic, /obj/item/ammo_box/a357,\ + /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow, /obj/item/weapon/melee/energy/sword/saber,\ + /obj/item/weapon/storage/box/syndicate, /obj/item/weapon/storage/box/emps,\ + /obj/item/weapon/cartridge/syndicate, /obj/item/clothing/under/chameleon,\ + /obj/item/clothing/shoes/chameleon, /obj/item/weapon/card/id/syndicate,\ + /obj/item/clothing/mask/chameleon, /obj/item/clothing/glasses/thermal,\ + /obj/item/device/chameleon, /obj/item/weapon/card/emag, /obj/item/weapon/grenade/plastic/x4,\ + /obj/item/weapon/storage/toolbox/syndicate, /obj/item/weapon/aiModule,\ + /obj/item/device/radio/headset/syndicate, /obj/item/weapon/grenade/plastic/c4,\ + /obj/item/device/powersink, /obj/item/weapon/storage/box/syndie_kit,\ + /obj/item/toy/syndicateballoon, /obj/item/weapon/gun/energy/laser/captain,\ + /obj/item/weapon/hand_tele, /obj/item/weapon/rcd, /obj/item/weapon/tank/jetpack,\ + /obj/item/clothing/under/rank/captain, /obj/item/device/aicard,\ + /obj/item/clothing/shoes/magboots, /obj/item/areaeditor/blueprints, /obj/item/weapon/disk/nuclear,\ + /obj/item/clothing/suit/space/nasavoid, /obj/item/weapon/tank) + var/obj/effect/fake_attacker/F = new/obj/effect/fake_attacker(get_turf(target),target) + for(var/obj/item/I in clone.held_items) if(!(locate(I) in non_fakeattack_weapons)) clone_weapon = I.name @@ -655,21 +672,7 @@ Gunshots/explosions/opening doors/less rare audio (done) to_chat(target, I) QDEL_IN(O, 300) -var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/ballistic, /obj/item/ammo_box/a357,\ - /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow, /obj/item/weapon/melee/energy/sword/saber,\ - /obj/item/weapon/storage/box/syndicate, /obj/item/weapon/storage/box/emps,\ - /obj/item/weapon/cartridge/syndicate, /obj/item/clothing/under/chameleon,\ - /obj/item/clothing/shoes/chameleon, /obj/item/weapon/card/id/syndicate,\ - /obj/item/clothing/mask/chameleon, /obj/item/clothing/glasses/thermal,\ - /obj/item/device/chameleon, /obj/item/weapon/card/emag, /obj/item/weapon/grenade/plastic/x4,\ - /obj/item/weapon/storage/toolbox/syndicate, /obj/item/weapon/aiModule,\ - /obj/item/device/radio/headset/syndicate, /obj/item/weapon/grenade/plastic/c4,\ - /obj/item/device/powersink, /obj/item/weapon/storage/box/syndie_kit,\ - /obj/item/toy/syndicateballoon, /obj/item/weapon/gun/energy/laser/captain,\ - /obj/item/weapon/hand_tele, /obj/item/weapon/rcd, /obj/item/weapon/tank/jetpack,\ - /obj/item/clothing/under/rank/captain, /obj/item/device/aicard,\ - /obj/item/clothing/shoes/magboots, /obj/item/areaeditor/blueprints, /obj/item/weapon/disk/nuclear,\ - /obj/item/clothing/suit/space/nasavoid, /obj/item/weapon/tank) + /obj/effect/hallucination/bolts var/list/doors = list() @@ -703,10 +706,11 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/ballistic, /obj/item ..() target = T var/speak_messages = list("I'm watching you...","[target.first_name()]!","Get out!","Kchck-Chkck? Kchchck!","Did you hear that?","What did you do ?","Why?","Give me that!","HELP!!","EI NATH!!", "RUN!!", "Kill me!","O bidai nabora se'sma!", "[text2ratvar("Divinity, grant...")]") - var/radio_messages = list("Xenos!","Singularity loose!","Comms down!","They are arming the nuke!","They butchered Ian!","H-help!","[pick("Cult", "Wizard", "Ling", "Ops", "Revenant", "Murderer", "Harm", "I hear flashing", "Help")] in [pick(teleportlocs)][prob(50)?"!":"!!"]","Where's [target.first_name()]?","Call the shuttle!","AI rogue!!") + var/radio_messages = list("Xenos!","Singularity loose!","Comms down!","They are arming the nuke!","They butchered Ian!","H-help!","[pick("Cult", "Wizard", "Ling", "Ops", "Revenant", "Murderer", "Harm", "I hear flashing", "Help")] in [pick(GLOB.teleportlocs)][prob(50)?"!":"!!"]","Where's [target.first_name()]?","Call the shuttle!","AI rogue!!") var/list/mob/living/carbon/people = list() var/list/mob/living/carbon/person = null + var/datum/language/understood_language = target.get_random_understood_language() for(var/mob/living/carbon/H in view(target)) if(H == target) continue @@ -718,17 +722,17 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/ballistic, /obj/item people += H if(person) //Basic talk var/image/speech_overlay = image('icons/mob/talk.dmi', person, "default0", layer = ABOVE_MOB_LAYER) - to_chat(target, target.compose_message(person,person.languages_understood,pick(speak_messages),null,person.get_spans())) + to_chat(target, target.compose_message(person,understood_language,pick(speak_messages),null,person.get_spans())) if(target.client) target.client.images |= speech_overlay sleep(30) target.client.images.Remove(speech_overlay) else // Radio talk var/list/humans = list() - for(var/mob/living/carbon/human/H in living_mob_list) + for(var/mob/living/carbon/human/H in GLOB.living_mob_list) humans += H person = pick(humans) - to_chat(target, target.compose_message(person,person.languages_understood,pick(radio_messages),"1459",person.get_spans())) + to_chat(target, target.compose_message(person,understood_language,pick(radio_messages),"1459",person.get_spans())) qdel(src) /obj/effect/hallucination/message @@ -1005,7 +1009,7 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/ballistic, /obj/item to_chat(src, "[mind.name] has died at [area.name].") if(prob(50)) var/list/dead_people = list() - for(var/mob/dead/observer/G in player_list) + for(var/mob/dead/observer/G in GLOB.player_list) dead_people += G var/mob/dead/observer/fakemob = pick(dead_people) if(fakemob) diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index 4c74464e5d..7c3d130244 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -372,12 +372,12 @@ var/turf/bombturf = get_turf(src) var/area/bombarea = get_area(bombturf) var/message = "[ADMIN_LOOKUP(user)] has primed a [name] for detonation at [ADMIN_COORDJMP(bombturf)]." - bombers += message + GLOB.bombers += message message_admins(message) log_game("[key_name(user)] has primed a [name] for detonation at [bombarea] [COORD(bombturf)].") to_chat(user, "You light [src] on fire.") - add_overlay(fire_overlay) + add_overlay(GLOB.fire_overlay) if(!isGlass) spawn(50) if(active) @@ -399,5 +399,5 @@ to_chat(user, "The flame's spread too far on it!") return to_chat(user, "You snuff out the flame on [src].") - cut_overlay(fire_overlay) + cut_overlay(GLOB.fire_overlay) active = 0 diff --git a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm index 244b675a2b..7e2deff368 100644 --- a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm +++ b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm @@ -15,528 +15,20 @@ /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/on_reagent_change() cut_overlays() - if (reagents.reagent_list.len > 0) - switch(reagents.get_master_reagent_id()) - if("beer") - icon_state = "beerglass" - name = "glass of beer" - desc = "A freezing pint of beer." - if("beer2") - icon_state = "beerglass" - name = "glass of beer" - desc = "A freezing pint of beer." - if("greenbeer") - icon_state = "greenbeerglass" - name = "glass of green beer" - desc = "A freezing pint of green beer. Festive." - if("ale") - icon_state = "aleglass" - name = "glass of ale" - desc = "A freezing pint of delicious Ale." - if("milk") - icon_state = "glass_white" - name = "glass of milk" - desc = "White and nutritious goodness!" - if("cream") - icon_state = "glass_white" - name = "glass of cream" - desc = "Ewwww..." - if("hot_coco") - icon_state = "chocolateglass" - name = "glass of chocolate" - desc = "Tasty." - if("lemonjuice") - icon_state = "lemonglass" - name = "glass of lemon juice" - desc = "Sour..." - if("holywater") - icon_state = "glass_clear" - name = "glass of Holy Water" - desc = "A glass of holy water." - if("potato") - icon_state = "glass_brown" - name = "glass of potato juice" - desc = "Bleh..." - if("watermelonjuice") - icon_state = "glass_red" - name = "glass of watermelon juice" - desc = "A glass of watermelon juice." - if("cola") - icon_state = "glass_brown" - name = "glass of space Cola" - desc = "A glass of refreshing Space Cola." - if("nuka_cola") - icon_state = "nuka_colaglass" - name = "Nuka Cola" - desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland." - if("orangejuice") - icon_state = "glass_orange" - name = "glass of orange juice" - desc = "Vitamins! Yay!" - if("tomatojuice") - icon_state = "glass_red" - name = "glass of tomato juice" - desc = "Are you sure this is tomato juice?" - if("blood") - icon_state = "glass_red" - name = "glass of tomato juice" - desc = "Are you sure this is tomato juice?" - if("limejuice") - icon_state = "glass_green" - name = "glass of lime juice" - desc = "A glass of sweet-sour lime juice." - if("whiskey") - icon_state = "whiskeyglass" - name = "glass of whiskey" - desc = "The silky, smokey whiskey goodness inside the glass makes the drink look very classy." - if("gin") - icon_state = "ginvodkaglass" - name = "glass of gin" - desc = "A crystal clear glass of Griffeater gin." - if("vodka") - icon_state = "ginvodkaglass" - name = "glass of vodka" - desc = "The glass contain wodka. Xynta." - if("goldschlager") - icon_state = "goldschlagerglass" - name = "glass of Goldschlager" - desc = "100% proof that teen girls will drink anything with gold in it." - if("wine") - icon_state = "wineglass" - name = "glass of wine" - desc = "A very classy looking drink." - if("cognac") - icon_state = "cognacglass" - name = "glass of cognac" - desc = "Damn, you feel like some kind of French aristocrat just by holding this." - if ("kahlua") - icon_state = "kahluaglass" - name = "glass of RR Coffee Liquor" - desc = "DAMN, THIS THING LOOKS ROBUST!" - if("vermouth") - icon_state = "vermouthglass" - name = "glass of vermouth" - desc = "You wonder why you're even drinking this straight." - if("tequila") - icon_state = "tequilaglass" - name = "glass of tequila" - desc = "Now all that's missing is the weird colored shades!" - if("patron") - icon_state = "patronglass" - name = "glass of patron" - desc = "Drinking patron in the bar, with all the subpar ladies." - if("rum") - icon_state = "rumglass" - name = "glass of rum" - desc = "Now you want to Pray for a pirate suit, don't you?" - if("gintonic") - icon_state = "gintonicglass" - name = "Gin and Tonic" - desc = "A mild but still great cocktail. Drink up, like a true Englishman." - if("whiskeycola") - icon_state = "whiskeycolaglass" - name = "Whiskey Cola" - desc = "An innocent-looking mixture of cola and Whiskey. Delicious." - if("whiterussian") - icon_state = "whiterussianglass" - name = "White Russian" - desc = "A very nice looking drink. But that's just, like, your opinion, man." - if("screwdrivercocktail") - icon_state = "screwdriverglass" - name = "Screwdriver" - desc = "A simple, yet superb mixture of Vodka and orange juice. Just the thing for the tired engineer." - if("bloodymary") - icon_state = "bloodymaryglass" - name = "Bloody Mary" - desc = "Tomato juice, mixed with Vodka and a lil' bit of lime. Tastes like liquid murder." - if("martini") - icon_state = "martiniglass" - name = "Classic Martini" - desc = "Damn, the bartender even stirred it, not shook it." - if("vodkamartini") - icon_state = "martiniglass" - name = "Vodka martini" - desc ="A bastardisation of the classic martini. Still great." - if("gargleblaster") - icon_state = "gargleblasterglass" - name = "Pan-Galactic Gargle Blaster" - desc = "Like having your brain smashed out by a slice of lemon wrapped around a large gold brick." - if("bravebull") - icon_state = "bravebullglass" - name = "Brave Bull" - desc = "Tequila and Coffee liqueur, brought together in a mouthwatering mixture. Drink up." - if("tequilasunrise") - icon_state = "tequilasunriseglass" - name = "tequila Sunrise" - desc = "Oh great, now you feel nostalgic about sunrises back on Terra..." - if("beepskysmash") - icon_state = "beepskysmashglass" - name = "Beepsky Smash" - desc = "Heavy, hot and strong. Just like the Iron fist of the LAW." - if("doctorsdelight") - icon_state = "doctorsdelightglass" - name = "Doctor's Delight" - desc = "The space doctor's favorite. Guaranteed to restore bodily injury; side effects include cravings and hunger." - if("manlydorf") - icon_state = "manlydorfglass" - name = "The Manly Dorf" - desc = "A manly concoction made from Ale and Beer. Intended for true men only." - if("irishcream") - icon_state = "irishcreamglass" - name = "Irish Cream" - desc = "It's cream, mixed with whiskey. What else would you expect from the Irish?" - if("cubalibre") - icon_state = "cubalibreglass" - name = "Cuba Libre" - desc = "A classic mix of rum and cola." - if("atomicbomb") - icon_state = "atomicbombglass" - name = "Atomic Bomb" - desc = "Nanotrasen cannot take legal responsibility for your actions after imbibing." - if("longislandicedtea") - icon_state = "longislandicedteaglass" - name = "Long Island Iced Tea" - desc = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only." - if("threemileisland") - icon_state = "threemileislandglass" - name = "Three Mile Island Ice Tea" - desc = "A glass of this is sure to prevent a meltdown." - if("margarita") - icon_state = "margaritaglass" - name = "Margarita" - desc = "On the rocks with salt on the rim. Arriba~!" - if("blackrussian") - icon_state = "blackrussianglass" - name = "Black Russian" - desc = "For the lactose-intolerant. Still as classy as a White Russian." - if("vodkatonic") - icon_state = "vodkatonicglass" - name = "Vodka and Tonic" - desc = "For when a gin and tonic isn't Russian enough." - if("manhattan") - icon_state = "manhattanglass" - name = "Manhattan" - desc = "The Detective's undercover drink of choice. He never could stomach gin..." - if("manhattan_proj") - icon_state = "proj_manhattanglass" - name = "Manhattan Project" - desc = "A scientist's drink of choice, for thinking how to blow up the station." - if("ginfizz") - icon_state = "ginfizzglass" - name = "Gin Fizz" - desc = "Refreshingly lemony, deliciously dry." - if("irishcoffee") - icon_state = "irishcoffeeglass" - name = "Irish Coffee" - desc = "Coffee and alcohol. More fun than a Mimosa to drink in the morning." - if("hooch") - icon_state = "glass_brown2" - name = "Hooch" - desc = "You've really hit rock bottom now... your liver packed its bags and left last night." - if("whiskeysoda") - icon_state = "whiskeysodaglass2" - name = "Whiskey Soda" - desc = "Ultimate refreshment." - if("tonic") - icon_state = "glass_clear" - name = "glass of Tonic Water" - desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away." - if("sodawater") - icon_state = "glass_clear" - name = "glass of Soda Water" - desc = "Soda water. Why not make a scotch and soda?" - if("water") - icon_state = "glass_clear" - name = "glass of Water" - desc = "The father of all refreshments." - if("spacemountainwind") - icon_state = "Space_mountain_wind_glass" - name = "glass of Space Mountain Wind" - desc = "Space Mountain Wind. As you know, there are no mountains in space, only wind." - if("thirteenloko") - icon_state = "thirteen_loko_glass" - name = "glass of Thirteen Loko" - desc = "This is a glass of Thirteen Loko, it appears to be of the highest quality. The drink, not the glass." - if("dr_gibb") - icon_state = "dr_gibb_glass" - name = "glass of Dr. Gibb" - desc = "Dr. Gibb. Not as dangerous as the name might imply." - if("space_up") - icon_state = "space-up_glass" - name = "glass of Space-up" - desc = "Space-up. It helps you keep your cool." - if("pwr_game") - icon_state = "glass_red" - name = "glass of Pwr Game" - desc = "Goes well with a Vlad's salad." - if("shamblers") - icon_state = "glass_red" - name = "glass of Shambler's Juice" - desc = "Mmm mm, shambly." - if("lemon_lime") - icon_state = "glass_yellow" - name = "glass of Lemon-Lime" - desc = "You're pretty certain a real fruit has never actually touched this." - if("moonshine") - icon_state = "glass_clear" - name = "Moonshine" - desc = "You've really hit rock bottom now... your liver packed its bags and left last night." - if("soymilk") - icon_state = "glass_white" - name = "glass of soy milk" - desc = "White and nutritious soy goodness!" - if("berryjuice") - icon_state = "berryjuice" - name = "glass of berry juice" - desc = "Berry juice. Or maybe it's jam. Who cares?" - if("poisonberryjuice") - icon_state = "poisonberryjuice" - name = "glass of berry juice" - desc = "Berry juice. Or maybe it's poison. Who cares?" - if("carrotjuice") - icon_state = "carrotjuice" - name = "glass of carrot juice" - desc = "It's just like a carrot but without crunching." - if("banana") - icon_state = "banana" - name = "glass of banana juice" - desc = "The raw essence of a banana. HONK." - if("bahama_mama") - icon_state = "bahama_mama" - name = "Bahama Mama" - desc = "Tropical cocktail." - if("singulo") - icon_state = "singulo" - name = "Singulo" - desc = "A blue-space beverage." - if("alliescocktail") - icon_state = "alliescocktail" - name = "Allies cocktail" - desc = "A drink made from your allies." - if("antifreeze") - icon_state = "antifreeze" - name = "Anti-freeze" - desc = "The ultimate refreshment." - if("barefoot") - icon_state = "b&p" - name = "Barefoot" - desc = "Barefoot and pregnant." - if("demonsblood") - icon_state = "demonsblood" - name = "Demons Blood" - desc = "Just looking at this thing makes the hair at the back of your neck stand up." - if("booger") - icon_state = "booger" - name = "Booger" - desc = "Ewww..." - if("snowwhite") - icon_state = "snowwhite" - name = "Snow White" - desc = "A cold refreshment." - if("aloe") - icon_state = "aloe" - name = "Aloe" - desc = "Very, very, very good." - if("andalusia") - icon_state = "andalusia" - name = "Andalusia" - desc = "A nice, strangely named drink." - if("sbiten") - icon_state = "sbitenglass" - name = "Sbiten" - desc = "A spicy mix of Vodka and Spice. Very hot." - if("red_mead") - icon_state = "red_meadglass" - name = "Red Mead" - desc = "A True Viking's Beverage, though its color is strange." - if("mead") - icon_state = "meadglass" - name = "Mead" - desc = "A Viking's Beverage, though a cheap one." - if("iced_beer") - icon_state = "iced_beerglass" - name = "Iced Beer" - desc = "A beer so frosty, the air around it freezes." - if("grog") - icon_state = "grogglass" - name = "Grog" - desc = "A fine and cepa drink for Space." - if("soy_latte") - icon_state = "soy_latte" - name = "Soy Latte" - desc = "A nice and refreshing beverage while you're reading." - if("cafe_latte") - icon_state = "cafe_latte" - name = "Cafe Latte" - desc = "A nice, strong and refreshing beverage while you're reading." - if("acidspit") - icon_state = "acidspitglass" - name = "Acid Spit" - desc = "A drink from Nanotrasen. Made from live aliens." - if("amasec") - icon_state = "amasecglass" - name = "Amasec" - desc = "Always handy before COMBAT!!!" - if("neurotoxin") - icon_state = "neurotoxinglass" - name = "Neurotoxin" - desc = "A drink that is guaranteed to knock you silly." - if("hippiesdelight") - icon_state = "hippiesdelightglass" - name = "Hippie's Delight" - desc = "A drink enjoyed by people during the 1960's." - if("bananahonk") - icon_state = "bananahonkglass" - name = "Banana Honk" - desc = "A drink from Clown Heaven." - if("silencer") - icon_state = "silencerglass" - name = "Silencer" - desc = "A drink from Mime Heaven." - if("nothing") - icon_state = "nothing" - name = "Nothing" - desc = "Absolutely nothing." - if("devilskiss") - icon_state = "devilskiss" - name = "Devils Kiss" - desc = "Creepy time!" - if("changelingsting") - icon_state = "changelingsting" - name = "Changeling Sting" - desc = "A stingy drink." - if("irishcarbomb") - icon_state = "irishcarbomb" - name = "Irish Car Bomb" - desc = "An Irish car bomb." - if("syndicatebomb") - icon_state = "syndicatebomb" - name = "Syndicate Bomb" - desc = "A syndicate bomb." - if("erikasurprise") - icon_state = "erikasurprise" - name = "Erika Surprise" - desc = "The surprise is, it's green!" - if("driestmartini") - icon_state = "driestmartiniglass" - name = "Driest Martini" - desc = "Only for the experienced. You think you see sand floating in the glass." - if("ice") - icon_state = "iceglass" - name = "glass of ice" - desc = "Generally, you're supposed to put something else in there too..." - if("icecoffee") - icon_state = "icedcoffeeglass" - name = "Iced Coffee" - desc = "A drink to perk you up and refresh you!" - if("icetea") - icon_state = "icedteaglass" - name = "Iced Tea" - desc = "All natural, antioxidant-rich flavour sensation." - if("coffee") - icon_state = "glass_brown" - name = "glass of coffee" - desc = "Don't drop it, or you'll send scalding liquid and glass shards everywhere." - if("tea") - icon_state = "teaglass" - name = "glass of tea" - desc = "Drinking it from here would not seem right." - if("bilk") - icon_state = "glass_brown" - name = "glass of bilk" - desc = "A brew of milk and beer. For those alcoholics who fear osteoporosis." - if("welding_fuel") - icon_state = "dr_gibb_glass" - name = "glass of welder fuel" - desc = "Unless you're an industrial tool, this is probably not safe for consumption." - if("b52") - icon_state = "b52glass" - name = "B-52" - desc = "Kahlua, Irish Cream, and cognac. You will get bombed." - if("toxinsspecial") - icon_state = "toxinsspecialglass" - name = "Toxins Special" - desc = "Whoah, this thing is on FIRE!" - if("chocolatepudding") - icon_state = "chocolatepudding" - name = "Chocolate Pudding" - desc = "Tasty." - if("vanillapudding") - icon_state = "vanillapudding" - name = "Vanilla Pudding" - desc = "Tasty." - if("cherryshake") - icon_state = "cherryshake" - name = "Cherry Shake" - desc = "A cherry flavored milkshake." - if("bluecherryshake") - icon_state = "bluecherryshake" - name = "Blue Cherry Shake" - desc = "An exotic blue milkshake." - if("drunkenblumpkin") - icon_state = "drunkenblumpkin" - name = "Drunken Blumpkin" - desc = "A drink for the drunks." - if("pumpkin_latte") - icon_state = "pumpkin_latte" - name = "Pumpkin Latte" - desc = "A mix of coffee and pumpkin juice." - if("gibbfloats") - icon_state = "gibbfloats" - name = "Gibbfloat" - desc = "Dr. Gibb with ice cream on top." - if("whiskey_sour") - icon_state = "whiskey_sour" - name = "Whiskey Sour" - desc = "Lemon juice mixed with whiskey and a dash of sugar. Surprisingly satisfying." - if("fetching_fizz") - icon_state = "fetching_fizz" - name = "Fetching Fizz" - desc = "Induces magnetism in the imbiber. Started as a barroom prank but evolved to become popular with miners and scrappers. Metallic aftertaste." - if("hearty_punch") - icon_state = "hearty_punch" - name = "Hearty Punch" - desc = "Aromatic beverage served piping hot. According to folk tales it can almost wake the dead." - if("absinthe") - icon_state = "absinthe" - name = "glass of absinthe" - desc = "It's as strong as it smells." - if("bacchus_blessing") - icon_state = "glass_brown2" - name = "Bacchus' Blessing" - desc = "You didn't think it was possible for a liquid to be so utterly revolting. Are you sure about this...?" - if("arnold_palmer") - icon_state = "arnold_palmer" - name = "Arnold Palmer" - desc = "You feel like taking a few golf swings after a few swigs of this." - if("hcider") - icon_state = "whiskeyglass" - name = "Hard Cider" - desc = "Tastes like autumn." - if("triple_citrus") - icon_state = "triplecitrus" //needs own sprite mine are trash - name = "glass of triple citrus" - desc = "A mixture of citrus juices. Tangy, yet smooth." - if("grappa") - icon_state = "grappa" - name = "glass of grappa" - desc = "A fine drink originally made to prevent waste by using the leftovers from winemaking." - if("eggnog") - icon_state = "glass_yellow" - name = "Eggnog" - desc = "For enjoying the most wonderful time of the year." - else - icon_state ="glass_brown" - var/image/I = image(icon, "glassoverlay") - I.color = mix_color_from_reagents(reagents.reagent_list) - add_overlay(I) - name = "glass of ..what?" - desc = "You can't really tell what this is." + if(reagents.reagent_list.len) + var/datum/reagent/R = reagents.get_master_reagent() + name = R.glass_name + desc = R.glass_desc + if(R.glass_icon_state) + icon_state = R.glass_icon_state + else + var/image/I = image(icon, "glassoverlay") + I.color = mix_color_from_reagents(reagents.reagent_list) + add_overlay(I) else icon_state = "glass_empty" name = "drinking glass" desc = "Your standard drinking glass." - return //Shot glasses!// // This lets us add shots in here instead of lumping them in with drinks because >logic // @@ -556,89 +48,27 @@ materials = list(MAT_GLASS=100) /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/on_reagent_change() + cut_overlays() + if (gulp_size < 15) gulp_size = 15 else gulp_size = max(round(reagents.total_volume / 15), 15) if (reagents.reagent_list.len > 0) - switch(reagents.get_master_reagent_id()) - if("vodka") - icon_state = "shotglassclear" - name = "shot of vodka" - desc = "Good for cold weather." - if("water") - icon_state = "shotglassclear" - name = "shot of water" - desc = "You're not sure why someone would drink this from a shot glass." - if("whiskey") - icon_state = "shotglassbrown" - name = "shot of whiskey" - desc = "Just like the old west." - if("hcider") - icon_state = "shotglassbrown" - name = "shot of hard cider" - desc = "Not meant to be drunk from a shot glass." - if("rum") - icon_state = "shotglassbrown" - name = "shot of rum" - desc = "You dirty pirate." - if("b52") - icon_state = "b52glass" - name = "B-52" - desc = "Kahlua, Irish Cream, and cognac. You will get bombed." - if("toxinsspecial") - icon_state = "toxinsspecialglass" - name = "Toxins Special" - desc = "Whoah, this thing is on FIRE!" - if ("vermouth") - icon_state = "shotglassclear" - name = "shot of vermouth" - desc = "This better be going in a martini." - if ("tequila") - icon_state = "shotglassgold" - name = "shot of tequila" - desc = "Bad decisions ahead!" - if ("patron") - icon_state = "shotglassclear" - name = "shot of patron" - desc = "The good stuff. Goes great with a lime wedge." - if ("kahlua") - icon_state = "shotglasscream" - name = "shot of coffee liqueur" - desc = "Doesn't look too appetizing..." - if ("nothing") - icon_state = "shotglass" - name = "shot of nothing" - desc = "The mime insists there's booze in the glass. You're not so sure." - if ("goldschlager") - icon_state = "shotglassgold" - name = "shot of goldschlager" - desc = "Yup. You're officially a college girl." - if ("cognac") - icon_state = "shotglassbrown" - name = "shot of cognac" - desc = "You get the feeling this would piss off a rich person somewhere." - if ("wine") - icon_state = "shotglassred" - name = "shot of wine" - desc = "What kind of craven oaf would drink wine from a shot glass?" - if ("blood") - icon_state = "shotglassred" - name = "shot of blood" - desc = "If you close your eyes it sort of tastes like wine..." - if ("liquidgibs") - icon_state = "shotglassred" - name = "shot of gibs" - desc = "...Let's not talk about this." - if ("absinthe") - icon_state = "shotglassgreen" - name = "shot of absinthe" - desc = "I am stuck in the cycles of my guilt..." - else - icon_state = "shotglassbrown" - name = "shot of... what?" - desc = "You can't really tell what's in the glass." + var/datum/reagent/largest_reagent = reagents.get_master_reagent() + name = "filled shot glass" + desc = "The challenge is not taking as many as you can, but guessing what it is before you pass out." + + if(largest_reagent.shot_glass_icon_state) + icon_state = largest_reagent.shot_glass_icon_state + else + icon_state = "shotglassclear" + var/image/I = image(icon, "shotglassoverlay") + I.color = mix_color_from_reagents(reagents.reagent_list) + add_overlay(I) + + else icon_state = "shotglass" name = "shot glass" diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index 35b41d45fd..96b8826971 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -215,6 +215,9 @@ /obj/item/weapon/reagent_containers/food/snacks/proc/initialize_slice(obj/item/weapon/reagent_containers/food/snacks/slice, reagents_per_slice) slice.create_reagents(slice.volume) reagents.trans_to(slice,reagents_per_slice) + if( name != initial(name) || desc != initial(desc) ) + slice.name = "slice of [src]" + slice.desc = "[desc]" /obj/item/weapon/reagent_containers/food/snacks/proc/generate_trash(atom/location) if(trash) diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm index 0ec4ee43a9..20de61d33d 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm @@ -99,16 +99,16 @@ insert ascii eagle on american flag background here reagents.trans_to(S, 2*(cook_time/15)) switch(cook_time) if(0 to 15) - S.color = rgb(166,103,54) + S.add_atom_colour(rgb(166,103,54), FIXED_COLOUR_PRIORITY) S.name = "lightly-fried [frying.name]" if(16 to 49) - S.color = rgb(103,63,24) + S.add_atom_colour(rgb(103,63,24), FIXED_COLOUR_PRIORITY) S.name = "fried [frying.name]" if(50 to 59) - S.color = rgb(63, 23, 4) + S.add_atom_colour(rgb(63,23,4), FIXED_COLOUR_PRIORITY) S.name = "deep-fried [frying.name]" if(60 to INFINITY) - S.color = rgb(33,19,9) + S.add_atom_colour(rgb(33,19,9), FIXED_COLOUR_PRIORITY) S.name = "the physical manifestation of the very concept of fried foods" S.desc = "A heavily fried...something. Who can tell anymore?" S.filling_color = S.color diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm index 13b7f4d8f5..9784a03a20 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm @@ -22,7 +22,7 @@ /obj/machinery/gibber/autogibber/New() ..() spawn(5) - for(var/i in cardinal) + for(var/i in GLOB.cardinal) var/obj/machinery/mineral/input/input_obj = locate( /obj/machinery/mineral/input, get_step(src.loc, i) ) if(input_obj) if(isturf(input_obj.loc)) @@ -31,7 +31,7 @@ break if(!input_plate) - diary << "a [src] didn't find an input plate." + GLOB.diary << "a [src] didn't find an input plate." return /obj/machinery/gibber/autogibber/Bumped(atom/A) diff --git a/code/modules/food_and_drinks/kitchen_machinery/processor.dm b/code/modules/food_and_drinks/kitchen_machinery/processor.dm index f64014446c..6274716f0d 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/processor.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/processor.dm @@ -299,7 +299,7 @@ /obj/machinery/processor/slime name = "Slime processor" - desc = "An industrial grinder with a sticker saying appropriated for science department. Keep hands clear of intake area while operating." + desc = "An industrial grinder with a sSSticker saying appropriated for science department. Keep hands clear of intake area while operating." /obj/machinery/processor/slime/New() ..() diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm index 068c41a405..1b41cd45cd 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm @@ -16,7 +16,7 @@ var/icon_on = "smartfridge" var/icon_off = "smartfridge-off" -/obj/machinery/smartfridge/New() +/obj/machinery/smartfridge/Initialize() ..() create_reagents() reagents.set_reacting(FALSE) diff --git a/code/modules/food_and_drinks/pizzabox.dm b/code/modules/food_and_drinks/pizzabox.dm index 75223d8970..1403fe02f0 100644 --- a/code/modules/food_and_drinks/pizzabox.dm +++ b/code/modules/food_and_drinks/pizzabox.dm @@ -109,7 +109,7 @@ bomb_defused = FALSE var/message = "[ADMIN_LOOKUPFLW(user)] has trapped a [src] with [bomb] set to [bomb_timer * 2] seconds." - bombers += message + GLOB.bombers += message message_admins(message) log_game("[key_name(user)] has trapped a [src] with [bomb] set to [bomb_timer * 2] seconds.") bomb.adminlog = "The [bomb.name] in [src.name] that [key_name(user)] activated has detonated!" diff --git a/code/modules/games/cas.dm b/code/modules/games/cas.dm index ed768a2063..4cc32d9d6a 100644 --- a/code/modules/games/cas.dm +++ b/code/modules/games/cas.dm @@ -4,7 +4,6 @@ // https://creativecommons.org/licenses/by-nc-sa/2.0/legalcode // Original code by Zuhayr, Polaris Station, ported with modifications -var/global/list/cards_against_space /obj/item/toy/cards/deck/cas name = "\improper CAS deck (white)" @@ -29,8 +28,7 @@ var/global/list/cards_against_space card_text_file = "strings/cas_black.txt" /obj/item/toy/cards/deck/cas/New() - if(!cards_against_space) //saves loading from the files every single time a new deck is created, but still lets each deck have a random assortment, it's purely an optimisation - cards_against_space = list("cas_white" = file2list("strings/cas_white.txt"),"cas_black" = file2list("strings/cas_black.txt")) + var/static/list/cards_against_space = list("cas_white" = file2list("strings/cas_white.txt"),"cas_black" = file2list("strings/cas_black.txt")) allcards = cards_against_space[card_face] var/list/possiblecards = allcards.Copy() if(possiblecards.len < decksize) // sanity check diff --git a/code/modules/holiday/easter.dm b/code/modules/holiday/easter.dm index 95fb66bcc7..29172c9b68 100644 --- a/code/modules/holiday/easter.dm +++ b/code/modules/holiday/easter.dm @@ -26,7 +26,7 @@ /datum/round_event/rabbitrelease/start() - for(var/obj/effect/landmark/R in landmarks_list) + for(var/obj/effect/landmark/R in GLOB.landmarks_list) if(R.name != "blobspawn") if(prob(35)) if(isspaceturf(R.loc)) diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm index 27c178e466..29d5fd7c28 100644 --- a/code/modules/holiday/holidays.dm +++ b/code/modules/holiday/holidays.dm @@ -142,11 +142,10 @@ begin_month = APRIL /datum/holiday/april_fools/celebrate() - if(ticker) - ticker.login_music = 'sound/ambience/clown.ogg' - for(var/mob/dead/new_player/P in mob_list) + if(SSticker) + SSticker.login_music = 'sound/ambience/clown.ogg' + for(var/mob/dead/new_player/P in GLOB.mob_list) if(P.client) - P.stopLobbySound() P.client.playtitlemusic() /datum/holiday/fourtwenty @@ -331,7 +330,7 @@ end_day = 31 /datum/holiday/festive_season/celebrate() - for(var/obj/effect/landmark/xmastree/XT in landmarks_list) + for(var/obj/effect/landmark/xmastree/XT in GLOB.landmarks_list) new XT.tree(get_turf(XT)) qdel(XT) diff --git a/code/modules/holodeck/area_copy.dm b/code/modules/holodeck/area_copy.dm index b34c19b4e2..09eee814b2 100644 --- a/code/modules/holodeck/area_copy.dm +++ b/code/modules/holodeck/area_copy.dm @@ -1,4 +1,7 @@ -/proc/DuplicateObject(var/atom/original, var/perfectcopy = TRUE, var/sameloc = FALSE, var/atom/newloc = null, var/nerf = FALSE, var/holoitem=FALSE) +//Vars that will not be copied when using /DuplicateObject +GLOBAL_LIST_INIT(duplicate_forbidden_vars,list("area","type","loc","locs","vars", "parent","parent_type", "verbs","ckey","key","power_supply","contents","reagents","stat","x","y","z","group","atmos_adjacent_turfs")) + +/proc/DuplicateObject(atom/original, perfectcopy = TRUE, sameloc = FALSE, atom/newloc = null, nerf = FALSE, holoitem=FALSE) if(!original) return null var/atom/O @@ -9,9 +12,7 @@ O = new original.type(newloc) if(perfectcopy && O && original) - var/global/list/forbidden_vars = list("type","loc","locs","vars", "parent","parent_type", "verbs","ckey","key","power_supply","contents","reagents","stat","x","y","z","group") - - for(var/V in original.vars - forbidden_vars) + for(var/V in original.vars - GLOB.duplicate_forbidden_vars) if(istype(original.vars[V],/list)) var/list/L = original.vars[V] O.vars[V] = L.Copy() @@ -90,23 +91,24 @@ var/old_icon_state1 = T.icon_state var/old_icon1 = T.icon - B.ChangeTurf(T.type) + B = B.ChangeTurf(T.type) B.setDir(old_dir1) B.icon = old_icon1 B.icon_state = old_icon_state1 for(var/obj/O in T) var/obj/O2 = DuplicateObject(O , perfectcopy=TRUE, newloc = B, nerf=nerf_weapons, holoitem=TRUE) - if(!O2) continue + if(!O2) + continue copiedobjs += O2.GetAllContents() for(var/mob/M in T) - if(istype(M, /mob/camera)) continue // If we need to check for more mobs, I'll add a variable + if(istype(M, /mob/camera)) + continue // If we need to check for more mobs, I'll add a variable var/mob/SM = DuplicateObject(M , perfectcopy=TRUE, newloc = B, holoitem=TRUE) copiedobjs += SM.GetAllContents() - var/global/list/forbidden_vars = list("type","stat","loc","locs","vars", "parent", "parent_type","verbs","ckey","key","x","y","z","contents", "light_range", "light_power", "light_color", "light", "light_sources") - for(var/V in T.vars - forbidden_vars) + for(var/V in T.vars - GLOB.duplicate_forbidden_vars) if(V == "air") var/turf/open/O1 = B var/turf/open/O2 = T diff --git a/code/modules/holodeck/computer.dm b/code/modules/holodeck/computer.dm index c5d7b56ca7..18be292e97 100644 --- a/code/modules/holodeck/computer.dm +++ b/code/modules/holodeck/computer.dm @@ -45,34 +45,42 @@ var/list/effects = list() var/last_change = 0 -/obj/machinery/computer/holodeck/New() - - if(ispath(holodeck_type,/area)) - linked = locate(holodeck_type) - if(ispath(offline_program,/area)) - offline_program = locate(offline_program) - // the following is necessary for power reasons - var/area/AS = get_area(src) - if(istype(AS,/area/holodeck)) - log_world("### MAPPING ERROR") - log_world("Holodeck computer cannot be in a holodeck.") - log_world("This would cause circular power dependency.") - qdel(src) // todo handle constructed computers - return //l-lewd... - else - linked.linked = src // todo detect multiple/constructed computers - ..() + /obj/machinery/computer/holodeck/Initialize(mapload) . = mapload //late-initialize, area_copy need turfs to have air if(!mapload) ..() + + if(ispath(holodeck_type,/area)) + var/list/possible = get_areas(holodeck_type,subtypes = FALSE) + linked = pop(possible) + if(ispath(offline_program,/area)) + var/list/possible = get_areas(offline_program,subtypes = FALSE) + offline_program = pop(possible) + // the following is necessary for power reasons + if(!linked || !offline_program) + log_world("No matching holodeck area found") + qdel(src) + return + var/area/AS = get_area(src) + if(istype(AS,/area/holodeck)) + log_world("### MAPPING ERROR") + log_world("Holodeck computer cannot be in a holodeck.") + log_world("This would cause circular power dependency.") + qdel(src) // todo handle constructed computers + return //l-lewd... + else + linked.linked = src // todo detect multiple/constructed computers + program_cache = list() emag_programs = list() for(var/typekey in subtypesof(program_type)) var/area/holodeck/A = locate(typekey) - if(!A || A == offline_program) continue - if(A.contents.len == 0) continue // not loaded + if(!A || A == offline_program) + continue + if(A.contents.len == 0) + continue // not loaded if(A.restricted) emag_programs += A else @@ -191,8 +199,9 @@ nerf(!emagged) /obj/machinery/computer/holodeck/Destroy() - emergency_shutdown() - linked.linked = null + if(linked) + emergency_shutdown() + linked.linked = null return ..() /obj/machinery/computer/holodeck/emp_act(severity) diff --git a/code/modules/holodeck/items.dm b/code/modules/holodeck/items.dm index d0c03602c7..6949ed6541 100644 --- a/code/modules/holodeck/items.dm +++ b/code/modules/holodeck/items.dm @@ -124,10 +124,10 @@ if(istype(I, /obj/item/projectile)) return if(prob(50)) - I.loc = src.loc - visible_message(" Swish! \the [I] lands in \the [src].") + I.forceMove(get_turf(src)) + visible_message("Swish! [I] lands in [src].") else - visible_message(" \the [I] bounces off of \the [src]'s rim!") + visible_message("[I] bounces off of [src]'s rim!") return 0 else return ..() diff --git a/code/modules/html_interface/html_interface.dm b/code/modules/html_interface/html_interface.dm index 10bc46f036..7979604a21 100644 --- a/code/modules/html_interface/html_interface.dm +++ b/code/modules/html_interface/html_interface.dm @@ -80,7 +80,7 @@ You have to use modules/client/asset_cache to ensure they get sent BEFORE the in */ -/var/list/html_interfaces = new/list() +GLOBAL_LIST_EMPTY(html_interfaces) /datum/html_interface // The atom we should report to. @@ -112,7 +112,7 @@ You have to use modules/client/asset_cache to ensure they get sent BEFORE the in var/static/list/asset_list /datum/html_interface/New(atom/ref, title, width = 700, height = 480, head = "") - html_interfaces.Add(src) + GLOB.html_interfaces.Add(src) . = ..() @@ -125,7 +125,7 @@ You have to use modules/client/asset_cache to ensure they get sent BEFORE the in /datum/html_interface/Destroy() src.closeAll() - html_interfaces.Remove(src) + GLOB.html_interfaces.Remove(src) return ..() diff --git a/code/modules/hydroponics/beekeeping/beebox.dm b/code/modules/hydroponics/beekeeping/beebox.dm index 5a62ff3f34..c0bbd617bc 100644 --- a/code/modules/hydroponics/beekeeping/beebox.dm +++ b/code/modules/hydroponics/beekeeping/beebox.dm @@ -63,7 +63,7 @@ var/datum/reagent/R = null if(random_reagent) R = pick(subtypesof(/datum/reagent)) - R = chemical_reagents_list[initial(R.id)] + R = GLOB.chemical_reagents_list[initial(R.id)] queen_bee = new(src) queen_bee.beehome = src diff --git a/code/modules/hydroponics/beekeeping/honey_frame.dm b/code/modules/hydroponics/beekeeping/honey_frame.dm index 74eec401d6..370b31da17 100644 --- a/code/modules/hydroponics/beekeeping/honey_frame.dm +++ b/code/modules/hydroponics/beekeeping/honey_frame.dm @@ -7,6 +7,7 @@ var/honeycomb_capacity = 10 //10 Honeycomb per frame by default, researchable frames perhaps? -/obj/item/honey_frame/New() +/obj/item/honey_frame/Initialize() + . = ..() pixel_x = rand(8,-8) pixel_y = rand(8,-8) diff --git a/code/modules/hydroponics/beekeeping/honeycomb.dm b/code/modules/hydroponics/beekeeping/honeycomb.dm index 63e85ae5dc..442dd84aaf 100644 --- a/code/modules/hydroponics/beekeeping/honeycomb.dm +++ b/code/modules/hydroponics/beekeeping/honeycomb.dm @@ -31,7 +31,7 @@ /obj/item/weapon/reagent_containers/honeycomb/proc/set_reagent(reagent) - var/datum/reagent/R = chemical_reagents_list[reagent] + var/datum/reagent/R = GLOB.chemical_reagents_list[reagent] if(istype(R)) name = "honeycomb ([R.name])" honey_color = R.color diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index e91c4d14a8..c614aa423b 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -19,8 +19,8 @@ var/max_yield = 2 var/min_production = 12 var/max_endurance = 10 // IMPT: ALSO AFFECTS LIFESPAN - var/max_wchance = 0 - var/max_wrate = 0 + var/min_wchance = 67 + var/min_wrate = 10 /obj/machinery/plantgenes/New() ..() @@ -55,18 +55,17 @@ max_endurance = initial(max_endurance) + (SM.rating * 25) // 35,60,85,100 Clamps at 10min 100max for(var/obj/item/weapon/stock_parts/micro_laser/ML in component_parts) - var/wratemod = ML.rating*2.5 - max_wrate = Floor(wratemod,1) // 2,5,7,10 Clamps at 10 - max_wchance = ML.rating*16+3 // 19,35,51,67 Clamps at 67 + var/wratemod = ML.rating * 2.5 + min_wrate = Floor(10-wratemod,1) // 7,5,2,0 Clamps at 0 and 10 You want this low + min_wchance = 67-(ML.rating*16) // 48,35,19,3 Clamps at 0 and 67 You want this low for(var/obj/item/weapon/circuitboard/machine/plantgenes/vaultcheck in component_parts) if(istype(vaultcheck, /obj/item/weapon/circuitboard/machine/plantgenes/vault)) // DUMB BOTANY TUTS max_potency = 100 max_yield = 10 min_production = 1 max_endurance = 100 - max_wchance = 67 - max_wrate = 10 - + min_wchance = 0 + min_wrate = 0 /obj/machinery/plantgenes/update_icon() ..() @@ -175,13 +174,13 @@ dat += "

    This device's extraction capabilities are currently limited to [min_production] production. " dat += "Target gene will be degraded to [min_production] production on extraction." else if(istype(target, /datum/plant_gene/core/weed_rate)) - if(gene.value > max_wrate) - dat += "

    This device's extraction capabilities are currently limited to [max_wrate] weed rate. " - dat += "Target gene will be degraded to [max_wrate] weed rate on extraction." + if(gene.value < min_wrate) + dat += "

    This device's extraction capabilities are currently limited to [min_wrate] weed rate. " + dat += "Target gene will be degraded to [min_wrate] weed rate on extraction." else if(istype(target, /datum/plant_gene/core/weed_chance)) - if(gene.value > max_wchance) - dat += "

    This device's extraction capabilities are currently limited to [max_wchance] weed chance. " - dat += "Target gene will be degraded to [max_wchance] weed chance on extraction." + if(gene.value < min_wchance) + dat += "

    This device's extraction capabilities are currently limited to [min_wchance] weed chance. " + dat += "Target gene will be degraded to [min_wchance] weed chance on extraction." if("replace") dat += "[target.get_name()] gene with [disk.gene.get_name()]?
    " @@ -350,9 +349,9 @@ else if(istype(G, /datum/plant_gene/core/yield)) gene.value = min(gene.value, max_yield) else if(istype(G, /datum/plant_gene/core/weed_rate)) - gene.value = min(gene.value, max_wrate) + gene.value = max(gene.value, min_wrate) else if(istype(G, /datum/plant_gene/core/weed_chance)) - gene.value = min(gene.value, max_wchance) + gene.value = max(gene.value, min_wchance) disk.update_name() qdel(seed) seed = null diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index e6e19f32a2..555df764b8 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -65,7 +65,7 @@ var/reag_txt = "" if(seed) for(var/reagent_id in seed.reagents_add) - var/datum/reagent/R = chemical_reagents_list[reagent_id] + var/datum/reagent/R = GLOB.chemical_reagents_list[reagent_id] var/amt = reagents.get_reagent_amount(reagent_id) reag_txt += "\n- [R.name]: [amt]" diff --git a/code/modules/hydroponics/grown/citrus.dm b/code/modules/hydroponics/grown/citrus.dm index 3a7ce53d16..133d0d71f4 100644 --- a/code/modules/hydroponics/grown/citrus.dm +++ b/code/modules/hydroponics/grown/citrus.dm @@ -109,7 +109,7 @@ var/area/A = get_area(user) user.visible_message("[user] primes the [src]!", "You prime the [src]!") var/message = "[ADMIN_LOOKUPFLW(user)] primed a combustible lemon for detonation at [A] [ADMIN_COORDJMP(user)]" - bombers += message + GLOB.bombers += message message_admins(message) log_game("[key_name(user)] primed a combustible lemon for detonation at [A] [COORD(user)].") if(iscarbon(user)) diff --git a/code/modules/hydroponics/grown/mushrooms.dm b/code/modules/hydroponics/grown/mushrooms.dm index 915c5792af..d12f9c52cf 100644 --- a/code/modules/hydroponics/grown/mushrooms.dm +++ b/code/modules/hydroponics/grown/mushrooms.dm @@ -240,7 +240,7 @@ return FALSE var/count = 0 var/maxcount = 1 - for(var/tempdir in cardinal) + for(var/tempdir in GLOB.cardinal) var/turf/closed/wall = get_step(user.loc, tempdir) if(istype(wall)) maxcount++ diff --git a/code/modules/hydroponics/grown/replicapod.dm b/code/modules/hydroponics/grown/replicapod.dm index 43566d5696..1a98a4715d 100644 --- a/code/modules/hydroponics/grown/replicapod.dm +++ b/code/modules/hydroponics/grown/replicapod.dm @@ -57,7 +57,7 @@ var/ckey_holder = null if(config.revival_pod_plants) if(ckey) - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) if(isobserver(M)) var/mob/dead/observer/O = M if(O.ckey == ckey && O.can_reenter_corpse) @@ -71,7 +71,7 @@ make_podman = !L.hellbound break else //If the player has ghosted from his corpse before blood was drawn, his ckey is no longer attached to the mob, so we need to match up the cloned player through the mind key - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) if(mind && M.mind && ckey(M.mind.key) == ckey(mind.key) && M.ckey && M.client && M.stat == 2 && !M.suiciding) if(isobserver(M)) var/mob/dead/observer/O = M diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index b2297e8375..2c995695d1 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -187,10 +187,10 @@ set_light(0) STOP_PROCESSING(SSobj, src) -/obj/structure/bonfire/buckle_mob(mob/living/M, force = 0) +/obj/structure/bonfire/buckle_mob(mob/living/M, force = FALSE, check_loc = TRUE) if(..()) M.pixel_y += 13 -/obj/structure/bonfire/unbuckle_mob(mob/living/buckled_mob, force=0) +/obj/structure/bonfire/unbuckle_mob(mob/living/buckled_mob, force=FALSE) if(..()) buckled_mob.pixel_y -= 13 diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 226b611f80..a034612092 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -93,7 +93,7 @@ while(processing_atoms.len) var/atom/a = processing_atoms[1] - for(var/step_dir in cardinal) + for(var/step_dir in GLOB.cardinal) var/obj/machinery/hydroponics/h = locate() in get_step(a, step_dir) // Soil plots aren't dense if(h && h.using_irrigation && h.density && !(h in connected) && !(h in processing_atoms)) @@ -279,7 +279,7 @@ /obj/machinery/hydroponics/proc/update_icon_hoses() var/n = 0 - for(var/Dir in cardinal) + for(var/Dir in GLOB.cardinal) var/obj/machinery/hydroponics/t = locate() in get_step(src,Dir) if(t && t.using_irrigation && using_irrigation) n += Dir diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm index 866818e1b8..15f5fc948d 100644 --- a/code/modules/hydroponics/plant_genes.dm +++ b/code/modules/hydroponics/plant_genes.dm @@ -107,7 +107,7 @@ reagent_id = reag_id name = "UNKNOWN" - var/datum/reagent/R = chemical_reagents_list[reag_id] + var/datum/reagent/R = GLOB.chemical_reagents_list[reag_id] if(R && R.id == reagent_id) name = R.name diff --git a/code/modules/hydroponics/sample.dm b/code/modules/hydroponics/sample.dm index 2d3a5d6b2a..a4ab2919be 100644 --- a/code/modules/hydroponics/sample.dm +++ b/code/modules/hydroponics/sample.dm @@ -1,26 +1,3 @@ -var/list/chem_t1_reagents = list( - "hydrogen", "oxygen", "silicon", - "phosphorus", "sulfur", "carbon", - "nitrogen", "water" -) - -var/list/chem_t2_reagents = list( - "lithium", "copper", "mercury", - "sodium", "iodine", "bromine" -) // "sugar", "sacid" removed because they are already in roundstart plants - -var/list/chem_t3_reagents = list( - "ethanol", "chlorine", "potassium", - "aluminium", "radium", "fluorine", - "iron", "welding_fuel", "silver", - "stable_plasma" -) - -var/list/chem_t4_reagents = list( - "oil", "ash", "acetone", - "saltpetre", "ammonia", "diethylamine" -) - /obj/item/seeds/sample name = "plant sample" icon_state = "sample-empty" diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index c9eb656670..42e424d109 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -163,7 +163,7 @@ T.reagents.add_reagent(reagent_id, 1 + round(potency * reagents_add[reagent_id], 1), list("blood_type"="O-")) continue - T.reagents.add_reagent(reagent_id, 1 + round(potency * reagents_add[reagent_id]), 1) + T.reagents.add_reagent(reagent_id, 1 + round(potency * reagents_add[reagent_id],1)) return 1 diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm index 98358355a8..0ab974126e 100644 --- a/code/modules/jobs/access.dm +++ b/code/modules/jobs/access.dm @@ -1,101 +1,101 @@ -/var/const/access_security = 1 // Security equipment -/var/const/access_brig = 2 // Brig timers and permabrig -/var/const/access_armory = 3 -/var/const/access_forensics_lockers= 4 -/var/const/access_medical = 5 -/var/const/access_morgue = 6 -/var/const/access_tox = 7 -/var/const/access_tox_storage = 8 -/var/const/access_genetics = 9 -/var/const/access_engine = 10 -/var/const/access_engine_equip= 11 -/var/const/access_maint_tunnels = 12 -/var/const/access_external_airlocks = 13 -/var/const/access_emergency_storage = 14 -/var/const/access_change_ids = 15 -/var/const/access_ai_upload = 16 -/var/const/access_teleporter = 17 -/var/const/access_eva = 18 -/var/const/access_heads = 19 -/var/const/access_captain = 20 -/var/const/access_all_personal_lockers = 21 -/var/const/access_chapel_office = 22 -/var/const/access_tech_storage = 23 -/var/const/access_atmospherics = 24 -/var/const/access_bar = 25 -/var/const/access_janitor = 26 -/var/const/access_crematorium = 27 -/var/const/access_kitchen = 28 -/var/const/access_robotics = 29 -/var/const/access_rd = 30 -/var/const/access_cargo = 31 -/var/const/access_construction = 32 -/var/const/access_chemistry = 33 -/var/const/access_cargo_bot = 34 -/var/const/access_hydroponics = 35 -/var/const/access_manufacturing = 36 -/var/const/access_library = 37 -/var/const/access_lawyer = 38 -/var/const/access_virology = 39 -/var/const/access_cmo = 40 -/var/const/access_qm = 41 -/var/const/access_court = 42 -/var/const/access_surgery = 45 -/var/const/access_theatre = 46 -/var/const/access_research = 47 -/var/const/access_mining = 48 -/var/const/access_mining_office = 49 //not in use -/var/const/access_mailsorting = 50 -/var/const/access_mint = 51 -/var/const/access_mint_vault = 52 -/var/const/access_heads_vault = 53 -/var/const/access_mining_station = 54 -/var/const/access_xenobiology = 55 -/var/const/access_ce = 56 -/var/const/access_hop = 57 -/var/const/access_hos = 58 -/var/const/access_RC_announce = 59 //Request console announcements -/var/const/access_keycard_auth = 60 //Used for events which require at least two people to confirm them -/var/const/access_tcomsat = 61 // has access to the entire telecomms satellite / machinery -/var/const/access_gateway = 62 -/var/const/access_sec_doors = 63 // Security front doors -/var/const/access_mineral_storeroom = 64 -/var/const/access_minisat = 65 -/var/const/access_weapons = 66 //Weapon authorization for secbots -/var/const/access_network = 67 -/var/const/access_cloning = 68 //Cloning room +GLOBAL_VAR_CONST(access_security, 1) // Security equipment +GLOBAL_VAR_CONST(access_brig, 2) // Brig timers and permabrig +GLOBAL_VAR_CONST(access_armory, 3) +GLOBAL_VAR_CONST(access_forensics_lockers, 4) +GLOBAL_VAR_CONST(access_medical, 5) +GLOBAL_VAR_CONST(access_morgue, 6) +GLOBAL_VAR_CONST(access_tox, 7) +GLOBAL_VAR_CONST(access_tox_storage, 8) +GLOBAL_VAR_CONST(access_genetics, 9) +GLOBAL_VAR_CONST(access_engine, 10) +GLOBAL_VAR_CONST(access_engine_equip, 11) +GLOBAL_VAR_CONST(access_maint_tunnels, 12) +GLOBAL_VAR_CONST(access_external_airlocks, 13) +GLOBAL_VAR_CONST(access_emergency_storage, 14) +GLOBAL_VAR_CONST(access_change_ids, 15) +GLOBAL_VAR_CONST(access_ai_upload, 16) +GLOBAL_VAR_CONST(access_teleporter, 17) +GLOBAL_VAR_CONST(access_eva, 18) +GLOBAL_VAR_CONST(access_heads, 19) +GLOBAL_VAR_CONST(access_captain, 20) +GLOBAL_VAR_CONST(access_all_personal_lockers, 21) +GLOBAL_VAR_CONST(access_chapel_office, 22) +GLOBAL_VAR_CONST(access_tech_storage, 23) +GLOBAL_VAR_CONST(access_atmospherics, 24) +GLOBAL_VAR_CONST(access_bar, 25) +GLOBAL_VAR_CONST(access_janitor, 26) +GLOBAL_VAR_CONST(access_crematorium, 27) +GLOBAL_VAR_CONST(access_kitchen, 28) +GLOBAL_VAR_CONST(access_robotics, 29) +GLOBAL_VAR_CONST(access_rd, 30) +GLOBAL_VAR_CONST(access_cargo, 31) +GLOBAL_VAR_CONST(access_construction, 32) +GLOBAL_VAR_CONST(access_chemistry, 33) +GLOBAL_VAR_CONST(access_cargo_bot, 34) +GLOBAL_VAR_CONST(access_hydroponics, 35) +GLOBAL_VAR_CONST(access_manufacturing, 36) +GLOBAL_VAR_CONST(access_library, 37) +GLOBAL_VAR_CONST(access_lawyer, 38) +GLOBAL_VAR_CONST(access_virology, 39) +GLOBAL_VAR_CONST(access_cmo, 40) +GLOBAL_VAR_CONST(access_qm, 41) +GLOBAL_VAR_CONST(access_court, 42) +GLOBAL_VAR_CONST(access_surgery, 45) +GLOBAL_VAR_CONST(access_theatre, 46) +GLOBAL_VAR_CONST(access_research, 47) +GLOBAL_VAR_CONST(access_mining, 48) +GLOBAL_VAR_CONST(access_mining_office, 49) //not in use +GLOBAL_VAR_CONST(access_mailsorting, 50) +GLOBAL_VAR_CONST(access_mint, 51) +GLOBAL_VAR_CONST(access_mint_vault, 52) +GLOBAL_VAR_CONST(access_heads_vault, 53) +GLOBAL_VAR_CONST(access_mining_station, 54) +GLOBAL_VAR_CONST(access_xenobiology, 55) +GLOBAL_VAR_CONST(access_ce, 56) +GLOBAL_VAR_CONST(access_hop, 57) +GLOBAL_VAR_CONST(access_hos, 58) +GLOBAL_VAR_CONST(access_RC_announce, 59) //Request console announcements +GLOBAL_VAR_CONST(access_keycard_auth, 60) //Used for events which require at least two people to confirm them +GLOBAL_VAR_CONST(access_tcomsat, 61) // has access to the entire telecomms satellite / machinery +GLOBAL_VAR_CONST(access_gateway, 62) +GLOBAL_VAR_CONST(access_sec_doors, 63) // Security front doors +GLOBAL_VAR_CONST(access_mineral_storeroom, 64) +GLOBAL_VAR_CONST(access_minisat, 65) +GLOBAL_VAR_CONST(access_weapons, 66) //Weapon authorization for secbots +GLOBAL_VAR_CONST(access_network, 67) +GLOBAL_VAR_CONST(access_cloning, 68) //Cloning room //BEGIN CENTCOM ACCESS /*Should leave plenty of room if we need to add more access levels. -/var/const/Mostly for admin fun times.*/ -/var/const/access_cent_general = 101//General facilities. -/var/const/access_cent_thunder = 102//Thunderdome. -/var/const/access_cent_specops = 103//Special Ops. -/var/const/access_cent_medical = 104//Medical/Research -/var/const/access_cent_living = 105//Living quarters. -/var/const/access_cent_storage = 106//Generic storage areas. -/var/const/access_cent_teleporter = 107//Teleporter. -/var/const/access_cent_captain = 109//Captain's office/ID comp/AI. -/var/const/access_cent_bar = 110 // The non-existent Centcom Bar + Mostly for admin fun times.*/ +GLOBAL_VAR_CONST(access_cent_general, 101)//General facilities. +GLOBAL_VAR_CONST(access_cent_thunder, 102)//Thunderdome. +GLOBAL_VAR_CONST(access_cent_specops, 103)//Special Ops. +GLOBAL_VAR_CONST(access_cent_medical, 104)//Medical/Research +GLOBAL_VAR_CONST(access_cent_living, 105)//Living quarters. +GLOBAL_VAR_CONST(access_cent_storage, 106)//Generic storage areas. +GLOBAL_VAR_CONST(access_cent_teleporter, 107)//Teleporter. +GLOBAL_VAR_CONST(access_cent_captain, 109)//Captain's office/ID comp/AI. +GLOBAL_VAR_CONST(access_cent_bar, 110) // The non-existent Centcom Bar //The Syndicate -/var/const/access_syndicate = 150//General Syndicate Access -/var/const/access_syndicate_leader = 151//Nuke Op Leader Access +GLOBAL_VAR_CONST(access_syndicate, 150)//General Syndicate Access +GLOBAL_VAR_CONST(access_syndicate_leader, 151)//Nuke Op Leader Access //Away Missions or Ruins /*For generic away-mission/ruin access. Why would normal crew have access to a long-abandoned derelict or a 2000 year-old temple? */ -/var/const/access_away_general = 200//General facilities. -/var/const/access_away_maint = 201//Away maintenance -/var/const/access_away_med = 202//Away medical -/var/const/access_away_sec = 203//Away security -/var/const/access_away_engine = 204//Away engineering -/var/const/access_away_generic1 = 205//Away generic access -/var/const/access_away_generic2 = 206 -/var/const/access_away_generic3 = 207 -/var/const/access_away_generic4 = 208 +GLOBAL_VAR_CONST(access_away_general, 200)//General facilities. +GLOBAL_VAR_CONST(access_away_maint, 201)//Away maintenance +GLOBAL_VAR_CONST(access_away_med, 202)//Away medical +GLOBAL_VAR_CONST(access_away_sec, 203)//Away security +GLOBAL_VAR_CONST(access_away_engine, 204)//Away engineering +GLOBAL_VAR_CONST(access_away_generic1, 205)//Away generic access +GLOBAL_VAR_CONST(access_away_generic2, 206) +GLOBAL_VAR_CONST(access_away_generic3, 207) +GLOBAL_VAR_CONST(access_away_generic4, 208) /obj/var/list/req_access = null /obj/var/req_access_txt = "0" @@ -203,21 +203,21 @@ /proc/get_centcom_access(job) switch(job) if("VIP Guest") - return list(access_cent_general) + return list(GLOB.access_cent_general) if("Custodian") - return list(access_cent_general, access_cent_living, access_cent_storage) + return list(GLOB.access_cent_general, GLOB.access_cent_living, GLOB.access_cent_storage) if("Thunderdome Overseer") - return list(access_cent_general, access_cent_thunder) + return list(GLOB.access_cent_general, GLOB.access_cent_thunder) if("Centcom Official") - return list(access_cent_general, access_cent_living) + return list(GLOB.access_cent_general, GLOB.access_cent_living) if("Medical Officer") - return list(access_cent_general, access_cent_living, access_cent_medical) + return list(GLOB.access_cent_general, GLOB.access_cent_living, GLOB.access_cent_medical) if("Death Commando") - return list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage) + return list(GLOB.access_cent_general, GLOB.access_cent_specops, GLOB.access_cent_living, GLOB.access_cent_storage) if("Research Officer") - return list(access_cent_general, access_cent_specops, access_cent_medical, access_cent_teleporter, access_cent_storage) + return list(GLOB.access_cent_general, GLOB.access_cent_specops, GLOB.access_cent_medical, GLOB.access_cent_teleporter, GLOB.access_cent_storage) if("Special Ops Officer") - return list(access_cent_general, access_cent_thunder, access_cent_specops, access_cent_living, access_cent_storage) + return list(GLOB.access_cent_general, GLOB.access_cent_thunder, GLOB.access_cent_specops, GLOB.access_cent_living, GLOB.access_cent_storage) if("Admiral") return get_all_centcom_access() if("Centcom Commander") @@ -231,56 +231,56 @@ if("Medical Response Officer") return get_ert_access("med") if("Centcom Bartender") - return list(access_cent_general, access_cent_living, access_cent_bar) + return list(GLOB.access_cent_general, GLOB.access_cent_living, GLOB.access_cent_bar) /proc/get_all_accesses() - return list(access_security, access_sec_doors, access_brig, access_armory, access_forensics_lockers, access_court, - access_medical, access_genetics, access_morgue, access_rd, - access_tox, access_tox_storage, access_chemistry, access_engine, access_engine_equip, access_maint_tunnels, - access_external_airlocks, access_change_ids, access_ai_upload, - access_teleporter, access_eva, access_heads, access_captain, access_all_personal_lockers, - access_tech_storage, access_chapel_office, access_atmospherics, access_kitchen, - access_bar, access_janitor, access_crematorium, access_robotics, access_cargo, access_construction, - access_hydroponics, access_library, access_lawyer, access_virology, access_cmo, access_qm, access_surgery, - access_theatre, access_research, access_mining, access_mailsorting, access_weapons, - access_heads_vault, access_mining_station, access_xenobiology, access_ce, access_hop, access_hos, access_RC_announce, - access_keycard_auth, access_tcomsat, access_gateway, access_mineral_storeroom, access_minisat, access_network, access_cloning) + return list(GLOB.access_security, GLOB.access_sec_doors, GLOB.access_brig, GLOB.access_armory, GLOB.access_forensics_lockers, GLOB.access_court, + GLOB.access_medical, GLOB.access_genetics, GLOB.access_morgue, GLOB.access_rd, + GLOB.access_tox, GLOB.access_tox_storage, GLOB.access_chemistry, GLOB.access_engine, GLOB.access_engine_equip, GLOB.access_maint_tunnels, + GLOB.access_external_airlocks, GLOB.access_change_ids, GLOB.access_ai_upload, + GLOB.access_teleporter, GLOB.access_eva, GLOB.access_heads, GLOB.access_captain, GLOB.access_all_personal_lockers, + GLOB.access_tech_storage, GLOB.access_chapel_office, GLOB.access_atmospherics, GLOB.access_kitchen, + GLOB.access_bar, GLOB.access_janitor, GLOB.access_crematorium, GLOB.access_robotics, GLOB.access_cargo, GLOB.access_construction, + GLOB.access_hydroponics, GLOB.access_library, GLOB.access_lawyer, GLOB.access_virology, GLOB.access_cmo, GLOB.access_qm, GLOB.access_surgery, + GLOB.access_theatre, GLOB.access_research, GLOB.access_mining, GLOB.access_mailsorting, GLOB.access_weapons, + GLOB.access_heads_vault, GLOB.access_mining_station, GLOB.access_xenobiology, GLOB.access_ce, GLOB.access_hop, GLOB.access_hos, GLOB.access_RC_announce, + GLOB.access_keycard_auth, GLOB.access_tcomsat, GLOB.access_gateway, GLOB.access_mineral_storeroom, GLOB.access_minisat, GLOB.access_network, GLOB.access_cloning) /proc/get_all_centcom_access() - return list(access_cent_general, access_cent_thunder, access_cent_specops, access_cent_medical, access_cent_living, access_cent_storage, access_cent_teleporter, access_cent_captain) + return list(GLOB.access_cent_general, GLOB.access_cent_thunder, GLOB.access_cent_specops, GLOB.access_cent_medical, GLOB.access_cent_living, GLOB.access_cent_storage, GLOB.access_cent_teleporter, GLOB.access_cent_captain) /proc/get_ert_access(class) switch(class) if("commander") return get_all_centcom_access() if("sec") - return list(access_cent_general, access_cent_specops, access_cent_living) + return list(GLOB.access_cent_general, GLOB.access_cent_specops, GLOB.access_cent_living) if("eng") - return list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage) + return list(GLOB.access_cent_general, GLOB.access_cent_specops, GLOB.access_cent_living, GLOB.access_cent_storage) if("med") - return list(access_cent_general, access_cent_specops, access_cent_medical, access_cent_living) + return list(GLOB.access_cent_general, GLOB.access_cent_specops, GLOB.access_cent_medical, GLOB.access_cent_living) /proc/get_all_syndicate_access() - return list(access_syndicate, access_syndicate) + return list(GLOB.access_syndicate, GLOB.access_syndicate) /proc/get_region_accesses(code) switch(code) if(0) return get_all_accesses() if(1) //station general - return list(access_kitchen,access_bar, access_hydroponics, access_janitor, access_chapel_office, access_crematorium, access_library, access_theatre, access_lawyer) + return list(GLOB.access_kitchen,GLOB.access_bar, GLOB.access_hydroponics, GLOB.access_janitor, GLOB.access_chapel_office, GLOB.access_crematorium, GLOB.access_library, GLOB.access_theatre, GLOB.access_lawyer) if(2) //security - return list(access_sec_doors, access_weapons, access_security, access_brig, access_armory, access_forensics_lockers, access_court, access_hos) + return list(GLOB.access_sec_doors, GLOB.access_weapons, GLOB.access_security, GLOB.access_brig, GLOB.access_armory, GLOB.access_forensics_lockers, GLOB.access_court, GLOB.access_hos) if(3) //medbay - return list(access_medical, access_genetics, access_cloning, access_morgue, access_chemistry, access_virology, access_surgery, access_cmo) + return list(GLOB.access_medical, GLOB.access_genetics, GLOB.access_cloning, GLOB.access_morgue, GLOB.access_chemistry, GLOB.access_virology, GLOB.access_surgery, GLOB.access_cmo) if(4) //research - return list(access_research, access_tox, access_tox_storage, access_genetics, access_robotics, access_xenobiology, access_minisat, access_rd, access_network) + return list(GLOB.access_research, GLOB.access_tox, GLOB.access_tox_storage, GLOB.access_genetics, GLOB.access_robotics, GLOB.access_xenobiology, GLOB.access_minisat, GLOB.access_rd, GLOB.access_network) if(5) //engineering and maintenance - return list(access_construction, access_maint_tunnels, access_engine, access_engine_equip, access_external_airlocks, access_tech_storage, access_atmospherics, access_tcomsat, access_minisat, access_ce) + return list(GLOB.access_construction, GLOB.access_maint_tunnels, GLOB.access_engine, GLOB.access_engine_equip, GLOB.access_external_airlocks, GLOB.access_tech_storage, GLOB.access_atmospherics, GLOB.access_tcomsat, GLOB.access_minisat, GLOB.access_ce) if(6) //supply - return list(access_mailsorting, access_mining, access_mining_station, access_mineral_storeroom, access_cargo, access_qm) + return list(GLOB.access_mailsorting, GLOB.access_mining, GLOB.access_mining_station, GLOB.access_mineral_storeroom, GLOB.access_cargo, GLOB.access_qm) if(7) //command - return list(access_heads, access_RC_announce, access_keycard_auth, access_change_ids, access_ai_upload, access_teleporter, access_eva, access_gateway, access_all_personal_lockers, access_heads_vault, access_hop, access_captain) + return list(GLOB.access_heads, GLOB.access_RC_announce, GLOB.access_keycard_auth, GLOB.access_change_ids, GLOB.access_ai_upload, GLOB.access_teleporter, GLOB.access_eva, GLOB.access_gateway, GLOB.access_all_personal_lockers, GLOB.access_heads_vault, GLOB.access_hop, GLOB.access_captain) /proc/get_region_accesses_name(code) switch(code) @@ -303,158 +303,158 @@ /proc/get_access_desc(A) switch(A) - if(access_cargo) + if(GLOB.access_cargo) return "Cargo Bay" - if(access_cargo_bot) + if(GLOB.access_cargo_bot) return "Delivery Chutes" - if(access_security) + if(GLOB.access_security) return "Security" - if(access_brig) + if(GLOB.access_brig) return "Holding Cells" - if(access_court) + if(GLOB.access_court) return "Courtroom" - if(access_forensics_lockers) + if(GLOB.access_forensics_lockers) return "Forensics" - if(access_medical) + if(GLOB.access_medical) return "Medical" - if(access_genetics) + if(GLOB.access_genetics) return "Genetics Lab" - if(access_morgue) + if(GLOB.access_morgue) return "Morgue" - if(access_tox) + if(GLOB.access_tox) return "R&D Lab" - if(access_tox_storage) + if(GLOB.access_tox_storage) return "Toxins Lab" - if(access_chemistry) + if(GLOB.access_chemistry) return "Chemistry Lab" - if(access_rd) + if(GLOB.access_rd) return "RD Office" - if(access_bar) + if(GLOB.access_bar) return "Bar" - if(access_janitor) + if(GLOB.access_janitor) return "Custodial Closet" - if(access_engine) + if(GLOB.access_engine) return "Engineering" - if(access_engine_equip) + if(GLOB.access_engine_equip) return "Power Equipment" - if(access_maint_tunnels) + if(GLOB.access_maint_tunnels) return "Maintenance" - if(access_external_airlocks) + if(GLOB.access_external_airlocks) return "External Airlocks" - if(access_emergency_storage) + if(GLOB.access_emergency_storage) return "Emergency Storage" - if(access_change_ids) + if(GLOB.access_change_ids) return "ID Console" - if(access_ai_upload) + if(GLOB.access_ai_upload) return "AI Chambers" - if(access_teleporter) + if(GLOB.access_teleporter) return "Teleporter" - if(access_eva) + if(GLOB.access_eva) return "EVA" - if(access_heads) + if(GLOB.access_heads) return "Bridge" - if(access_captain) + if(GLOB.access_captain) return "Captain" - if(access_all_personal_lockers) + if(GLOB.access_all_personal_lockers) return "Personal Lockers" - if(access_chapel_office) + if(GLOB.access_chapel_office) return "Chapel Office" - if(access_tech_storage) + if(GLOB.access_tech_storage) return "Technical Storage" - if(access_atmospherics) + if(GLOB.access_atmospherics) return "Atmospherics" - if(access_crematorium) + if(GLOB.access_crematorium) return "Crematorium" - if(access_armory) + if(GLOB.access_armory) return "Armory" - if(access_construction) + if(GLOB.access_construction) return "Construction" - if(access_kitchen) + if(GLOB.access_kitchen) return "Kitchen" - if(access_hydroponics) + if(GLOB.access_hydroponics) return "Hydroponics" - if(access_library) + if(GLOB.access_library) return "Library" - if(access_lawyer) + if(GLOB.access_lawyer) return "Law Office" - if(access_robotics) + if(GLOB.access_robotics) return "Robotics" - if(access_virology) + if(GLOB.access_virology) return "Virology" - if(access_cmo) + if(GLOB.access_cmo) return "CMO Office" - if(access_qm) + if(GLOB.access_qm) return "Quartermaster" - if(access_surgery) + if(GLOB.access_surgery) return "Surgery" - if(access_theatre) + if(GLOB.access_theatre) return "Theatre" - if(access_manufacturing) + if(GLOB.access_manufacturing) return "Manufacturing" - if(access_research) + if(GLOB.access_research) return "Science" - if(access_mining) + if(GLOB.access_mining) return "Mining" - if(access_mining_office) + if(GLOB.access_mining_office) return "Mining Office" - if(access_mailsorting) + if(GLOB.access_mailsorting) return "Cargo Office" - if(access_mint) + if(GLOB.access_mint) return "Mint" - if(access_mint_vault) + if(GLOB.access_mint_vault) return "Mint Vault" - if(access_heads_vault) + if(GLOB.access_heads_vault) return "Main Vault" - if(access_mining_station) + if(GLOB.access_mining_station) return "Mining EVA" - if(access_xenobiology) + if(GLOB.access_xenobiology) return "Xenobiology Lab" - if(access_hop) + if(GLOB.access_hop) return "HoP Office" - if(access_hos) + if(GLOB.access_hos) return "HoS Office" - if(access_ce) + if(GLOB.access_ce) return "CE Office" - if(access_RC_announce) + if(GLOB.access_RC_announce) return "RC Announcements" - if(access_keycard_auth) + if(GLOB.access_keycard_auth) return "Keycode Auth." - if(access_tcomsat) + if(GLOB.access_tcomsat) return "Telecommunications" - if(access_gateway) + if(GLOB.access_gateway) return "Gateway" - if(access_sec_doors) + if(GLOB.access_sec_doors) return "Brig" - if(access_mineral_storeroom) + if(GLOB.access_mineral_storeroom) return "Mineral Storage" - if(access_minisat) + if(GLOB.access_minisat) return "AI Satellite" - if(access_weapons) + if(GLOB.access_weapons) return "Weapon Permit" - if(access_network) + if(GLOB.access_network) return "Network Access" - if(access_cloning) + if(GLOB.access_cloning) return "Cloning Room" /proc/get_centcom_access_desc(A) switch(A) - if(access_cent_general) + if(GLOB.access_cent_general) return "Code Grey" - if(access_cent_thunder) + if(GLOB.access_cent_thunder) return "Code Yellow" - if(access_cent_storage) + if(GLOB.access_cent_storage) return "Code Orange" - if(access_cent_living) + if(GLOB.access_cent_living) return "Code Green" - if(access_cent_medical) + if(GLOB.access_cent_medical) return "Code White" - if(access_cent_teleporter) + if(GLOB.access_cent_teleporter) return "Code Blue" - if(access_cent_specops) + if(GLOB.access_cent_specops) return "Code Black" - if(access_cent_captain) + if(GLOB.access_cent_captain) return "Code Gold" - if(access_cent_bar) + if(GLOB.access_cent_bar) return "Code Scotch" /proc/get_all_jobs() diff --git a/code/modules/jobs/job_types/assistant.dm b/code/modules/jobs/job_types/assistant.dm index 76a6d340c1..8925fe5af3 100644 --- a/code/modules/jobs/job_types/assistant.dm +++ b/code/modules/jobs/job_types/assistant.dm @@ -18,7 +18,7 @@ Assistant /datum/job/assistant/get_access() if((config.jobs_have_maint_access & ASSISTANTS_HAVE_MAINT_ACCESS) || !config.jobs_have_minimal_access) //Config has assistant maint access set . = ..() - . |= list(access_maint_tunnels) + . |= list(GLOB.access_maint_tunnels) else return ..() diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm index 1f85484bf3..25ae27f769 100644 --- a/code/modules/jobs/job_types/captain.dm +++ b/code/modules/jobs/job_types/captain.dm @@ -24,7 +24,7 @@ Captain /datum/job/captain/announce(mob/living/carbon/human/H) ..() - minor_announce("Captain [H.real_name] on deck!") + SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/minor_announce, "Captain [H.real_name] on deck!")) /datum/outfit/job/captain name = "Captain" @@ -67,18 +67,18 @@ Head of Personnel outfit = /datum/outfit/job/hop - access = list(access_security, access_sec_doors, access_court, access_weapons, - access_medical, access_engine, access_change_ids, access_ai_upload, access_eva, access_heads, - access_all_personal_lockers, access_maint_tunnels, access_bar, access_janitor, access_construction, access_morgue, - access_crematorium, access_kitchen, access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_hydroponics, access_lawyer, - access_theatre, access_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station, - access_hop, access_RC_announce, access_keycard_auth, access_gateway, access_mineral_storeroom) - minimal_access = list(access_security, access_sec_doors, access_court, access_weapons, - access_medical, access_engine, access_change_ids, access_ai_upload, access_eva, access_heads, - access_all_personal_lockers, access_maint_tunnels, access_bar, access_janitor, access_construction, access_morgue, - access_crematorium, access_kitchen, access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_hydroponics, access_lawyer, - access_theatre, access_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station, - access_hop, access_RC_announce, access_keycard_auth, access_gateway, access_mineral_storeroom) + access = list(GLOB.access_security, GLOB.access_sec_doors, GLOB.access_court, GLOB.access_weapons, + GLOB.access_medical, GLOB.access_engine, GLOB.access_change_ids, GLOB.access_ai_upload, GLOB.access_eva, GLOB.access_heads, + GLOB.access_all_personal_lockers, GLOB.access_maint_tunnels, GLOB.access_bar, GLOB.access_janitor, GLOB.access_construction, GLOB.access_morgue, + GLOB.access_crematorium, GLOB.access_kitchen, GLOB.access_cargo, GLOB.access_cargo_bot, GLOB.access_mailsorting, GLOB.access_qm, GLOB.access_hydroponics, GLOB.access_lawyer, + GLOB.access_theatre, GLOB.access_chapel_office, GLOB.access_library, GLOB.access_research, GLOB.access_mining, GLOB.access_heads_vault, GLOB.access_mining_station, + GLOB.access_hop, GLOB.access_RC_announce, GLOB.access_keycard_auth, GLOB.access_gateway, GLOB.access_mineral_storeroom) + minimal_access = list(GLOB.access_security, GLOB.access_sec_doors, GLOB.access_court, GLOB.access_weapons, + GLOB.access_medical, GLOB.access_engine, GLOB.access_change_ids, GLOB.access_ai_upload, GLOB.access_eva, GLOB.access_heads, + GLOB.access_all_personal_lockers, GLOB.access_maint_tunnels, GLOB.access_bar, GLOB.access_janitor, GLOB.access_construction, GLOB.access_morgue, + GLOB.access_crematorium, GLOB.access_kitchen, GLOB.access_cargo, GLOB.access_cargo_bot, GLOB.access_mailsorting, GLOB.access_qm, GLOB.access_hydroponics, GLOB.access_lawyer, + GLOB.access_theatre, GLOB.access_chapel_office, GLOB.access_library, GLOB.access_research, GLOB.access_mining, GLOB.access_heads_vault, GLOB.access_mining_station, + GLOB.access_hop, GLOB.access_RC_announce, GLOB.access_keycard_auth, GLOB.access_gateway, GLOB.access_mineral_storeroom) /datum/outfit/job/hop diff --git a/code/modules/jobs/job_types/cargo_service.dm b/code/modules/jobs/job_types/cargo_service.dm index 9fe97f8253..a863f983cf 100644 --- a/code/modules/jobs/job_types/cargo_service.dm +++ b/code/modules/jobs/job_types/cargo_service.dm @@ -14,8 +14,8 @@ Quartermaster outfit = /datum/outfit/job/quartermaster - access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_mineral_storeroom) - minimal_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_mineral_storeroom) + access = list(GLOB.access_maint_tunnels, GLOB.access_mailsorting, GLOB.access_cargo, GLOB.access_cargo_bot, GLOB.access_qm, GLOB.access_mining, GLOB.access_mining_station, GLOB.access_mineral_storeroom) + minimal_access = list(GLOB.access_maint_tunnels, GLOB.access_mailsorting, GLOB.access_cargo, GLOB.access_cargo_bot, GLOB.access_qm, GLOB.access_mining, GLOB.access_mining_station, GLOB.access_mineral_storeroom) /datum/outfit/job/quartermaster name = "Quartermaster" @@ -44,8 +44,8 @@ Cargo Technician outfit = /datum/outfit/job/cargo_tech - access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_mineral_storeroom) - minimal_access = list(access_maint_tunnels, access_cargo, access_cargo_bot, access_mailsorting, access_mineral_storeroom) + access = list(GLOB.access_maint_tunnels, GLOB.access_mailsorting, GLOB.access_cargo, GLOB.access_cargo_bot, GLOB.access_qm, GLOB.access_mining, GLOB.access_mining_station, GLOB.access_mineral_storeroom) + minimal_access = list(GLOB.access_maint_tunnels, GLOB.access_cargo, GLOB.access_cargo_bot, GLOB.access_mailsorting, GLOB.access_mineral_storeroom) /datum/outfit/job/cargo_tech name = "Cargo Technician" @@ -72,8 +72,8 @@ Shaft Miner outfit = /datum/outfit/job/miner - access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_mineral_storeroom) - minimal_access = list(access_mining, access_mining_station, access_mailsorting, access_mineral_storeroom) + access = list(GLOB.access_maint_tunnels, GLOB.access_mailsorting, GLOB.access_cargo, GLOB.access_cargo_bot, GLOB.access_qm, GLOB.access_mining, GLOB.access_mining_station, GLOB.access_mineral_storeroom) + minimal_access = list(GLOB.access_mining, GLOB.access_mining_station, GLOB.access_mailsorting, GLOB.access_mineral_storeroom) /datum/outfit/job/miner name = "Shaft Miner (Lavaland)" @@ -148,8 +148,8 @@ Bartender outfit = /datum/outfit/job/bartender - access = list(access_hydroponics, access_bar, access_kitchen, access_morgue, access_weapons) - minimal_access = list(access_bar) + access = list(GLOB.access_hydroponics, GLOB.access_bar, GLOB.access_kitchen, GLOB.access_morgue, GLOB.access_weapons) + minimal_access = list(GLOB.access_bar) /datum/outfit/job/bartender @@ -181,8 +181,8 @@ Cook outfit = /datum/outfit/job/cook - access = list(access_hydroponics, access_bar, access_kitchen, access_morgue) - minimal_access = list(access_kitchen, access_morgue) + access = list(GLOB.access_hydroponics, GLOB.access_bar, GLOB.access_kitchen, GLOB.access_morgue) + minimal_access = list(GLOB.access_kitchen, GLOB.access_morgue) /datum/outfit/job/cook name = "Cook" @@ -228,8 +228,8 @@ Botanist outfit = /datum/outfit/job/botanist - access = list(access_hydroponics, access_bar, access_kitchen, access_morgue) - minimal_access = list(access_hydroponics, access_morgue) + access = list(GLOB.access_hydroponics, GLOB.access_bar, GLOB.access_kitchen, GLOB.access_morgue) + minimal_access = list(GLOB.access_hydroponics, GLOB.access_morgue) // Removed tox and chem access because STOP PISSING OFF THE CHEMIST GUYS // Removed medical access because WHAT THE FUCK YOU AREN'T A DOCTOR YOU GROW WHEAT // Given Morgue access because they have a viable means of cloning. @@ -267,8 +267,8 @@ Janitor outfit = /datum/outfit/job/janitor - access = list(access_janitor, access_maint_tunnels) - minimal_access = list(access_janitor, access_maint_tunnels) + access = list(GLOB.access_janitor, GLOB.access_maint_tunnels) + minimal_access = list(GLOB.access_janitor, GLOB.access_maint_tunnels) /datum/outfit/job/janitor name = "Janitor" diff --git a/code/modules/jobs/job_types/civilian.dm b/code/modules/jobs/job_types/civilian.dm index a9a108f89f..60bb646b23 100644 --- a/code/modules/jobs/job_types/civilian.dm +++ b/code/modules/jobs/job_types/civilian.dm @@ -14,8 +14,8 @@ Clown outfit = /datum/outfit/job/clown - access = list(access_theatre) - minimal_access = list(access_theatre) + access = list(GLOB.access_theatre) + minimal_access = list(GLOB.access_theatre) /datum/job/clown/after_spawn(mob/living/carbon/human/H, mob/M) H.rename_self("clown", M.client) @@ -52,7 +52,7 @@ Clown if(visualsOnly) return - H.fully_replace_character_name(H.real_name, pick(clown_names)) + H.fully_replace_character_name(H.real_name, pick(GLOB.clown_names)) /datum/outfit/job/clown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) ..() @@ -77,8 +77,8 @@ Mime outfit = /datum/outfit/job/mime - access = list(access_theatre) - minimal_access = list(access_theatre) + access = list(GLOB.access_theatre) + minimal_access = list(GLOB.access_theatre) /datum/job/mime/after_spawn(mob/living/carbon/human/H, mob/M) H.rename_self("mime", M.client) @@ -127,8 +127,8 @@ Librarian outfit = /datum/outfit/job/librarian - access = list(access_library) - minimal_access = list(access_library) + access = list(GLOB.access_library) + minimal_access = list(GLOB.access_library) /datum/outfit/job/librarian name = "Librarian" @@ -160,8 +160,8 @@ Lawyer outfit = /datum/outfit/job/lawyer - access = list(access_lawyer, access_court, access_sec_doors) - minimal_access = list(access_lawyer, access_court, access_sec_doors) + access = list(GLOB.access_lawyer, GLOB.access_court, GLOB.access_sec_doors) + minimal_access = list(GLOB.access_lawyer, GLOB.access_court, GLOB.access_sec_doors) /datum/outfit/job/lawyer name = "Lawyer" diff --git a/code/modules/jobs/job_types/civilian_chaplain.dm b/code/modules/jobs/job_types/civilian_chaplain.dm index 5f36b1a5fb..4fc532e6d5 100644 --- a/code/modules/jobs/job_types/civilian_chaplain.dm +++ b/code/modules/jobs/job_types/civilian_chaplain.dm @@ -15,45 +15,36 @@ Chaplain outfit = /datum/outfit/job/chaplain - access = list(access_morgue, access_chapel_office, access_crematorium) - minimal_access = list(access_morgue, access_chapel_office, access_crematorium) - -/datum/outfit/job/chaplain - name = "Chaplain" - jobtype = /datum/job/chaplain - - belt = /obj/item/device/pda/chaplain - uniform = /obj/item/clothing/under/rank/chaplain - backpack_contents = list(/obj/item/device/camera/spooky = 1) - backpack = /obj/item/weapon/storage/backpack/cultpack - satchel = /obj/item/weapon/storage/backpack/cultpack - - -/datum/outfit/job/chaplain/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - - if(visualsOnly) - return + access = list(GLOB.access_morgue, GLOB.access_chapel_office, GLOB.access_crematorium, GLOB.access_theatre) + minimal_access = list(GLOB.access_morgue, GLOB.access_chapel_office, GLOB.access_crematorium, GLOB.access_theatre) +/datum/job/chaplain/after_spawn(mob/living/H, mob/M) if(H.mind) H.mind.isholy = TRUE - var/obj/item/weapon/storage/book/bible/B = new /obj/item/weapon/storage/book/bible/booze(H) + var/obj/item/weapon/storage/book/bible/booze/B = new - if(SSreligion.Bible_deity_name) - B.deity_name = SSreligion.Bible_deity_name - B.name = SSreligion.Bible_name - B.icon_state = SSreligion.Bible_icon_state - B.item_state = SSreligion.Bible_item_state - to_chat(H, "There is already an established religion onboard the station. You are an acolyte of [SSreligion.Bible_deity_name]. Defer to the Chaplain.") + if(SSreligion.religion) + B.deity_name = SSreligion.deity + B.name = SSreligion.bible_name + B.icon_state = SSreligion.bible_icon_state + B.item_state = SSreligion.bible_item_state + to_chat(H, "There is already an established religion onboard the station. You are an acolyte of [SSreligion.deity]. Defer to the Chaplain.") H.equip_to_slot_or_del(B, slot_in_backpack) - var/obj/item/weapon/nullrod/N = new(H) + var/obj/item/weapon/nullrod/N = new SSreligion.holy_weapon_type(H) H.equip_to_slot_or_del(N, slot_in_backpack) return var/new_religion = "Christianity" - if(H.client && H.client.prefs.custom_names["religion"]) - new_religion = H.client.prefs.custom_names["religion"] + if(M.client && M.client.prefs.custom_names["religion"]) + new_religion = M.client.prefs.custom_names["religion"] + + var/new_deity = "Space Jesus" + if(M.client && M.client.prefs.custom_names["deity"]) + new_deity = M.client.prefs.custom_names["deity"] + + B.deity_name = new_deity + switch(lowertext(new_religion)) if("christianity") @@ -81,14 +72,24 @@ Chaplain B.name = pick("Principle of Relativity", "Quantum Enigma: Physics Encounters Consciousness", "Programming the Universe", "Quantum Physics and Theology", "String Theory for Dummies", "How To: Build Your Own Warp Drive", "The Mysteries of Bluespace", "Playing God: Collector's Edition") else B.name = "The Holy Book of [new_religion]" - feedback_set_details("religion_name","[new_religion]") - SSreligion.Bible_name = B.name - var/new_deity = "Space Jesus" - if(H.client && H.client.prefs.custom_names["deity"]) - new_deity = H.client.prefs.custom_names["deity"] - B.deity_name = new_deity - SSreligion.Bible_deity_name = B.deity_name - feedback_set_details("religion_deity","[new_deity]") + if(SSreligion) + SSreligion.religion = new_religion + SSreligion.bible_name = B.name + SSreligion.deity = B.deity_name + H.equip_to_slot_or_del(B, slot_in_backpack) + + feedback_set_details("religion_name","[new_religion]") + feedback_set_details("religion_deity","[new_deity]") + +/datum/outfit/job/chaplain + name = "Chaplain" + jobtype = /datum/job/chaplain + + belt = /obj/item/device/pda/chaplain + uniform = /obj/item/clothing/under/rank/chaplain + backpack_contents = list(/obj/item/device/camera/spooky = 1) + backpack = /obj/item/weapon/storage/backpack/cultpack + satchel = /obj/item/weapon/storage/backpack/cultpack \ No newline at end of file diff --git a/code/modules/jobs/job_types/engineering.dm b/code/modules/jobs/job_types/engineering.dm index e0e1269939..e04dac9ed5 100644 --- a/code/modules/jobs/job_types/engineering.dm +++ b/code/modules/jobs/job_types/engineering.dm @@ -17,14 +17,14 @@ Chief Engineer outfit = /datum/outfit/job/ce - access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, - access_external_airlocks, access_atmospherics, access_emergency_storage, access_eva, - access_heads, access_construction, access_sec_doors, access_minisat, - access_ce, access_RC_announce, access_keycard_auth, access_tcomsat, access_mineral_storeroom) - minimal_access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, - access_external_airlocks, access_atmospherics, access_emergency_storage, access_eva, - access_heads, access_construction, access_sec_doors, access_minisat, - access_ce, access_RC_announce, access_keycard_auth, access_tcomsat, access_mineral_storeroom) + access = list(GLOB.access_engine, GLOB.access_engine_equip, GLOB.access_tech_storage, GLOB.access_maint_tunnels, + GLOB.access_external_airlocks, GLOB.access_atmospherics, GLOB.access_emergency_storage, GLOB.access_eva, + GLOB.access_heads, GLOB.access_construction, GLOB.access_sec_doors, GLOB.access_minisat, + GLOB.access_ce, GLOB.access_RC_announce, GLOB.access_keycard_auth, GLOB.access_tcomsat, GLOB.access_mineral_storeroom) + minimal_access = list(GLOB.access_engine, GLOB.access_engine_equip, GLOB.access_tech_storage, GLOB.access_maint_tunnels, + GLOB.access_external_airlocks, GLOB.access_atmospherics, GLOB.access_emergency_storage, GLOB.access_eva, + GLOB.access_heads, GLOB.access_construction, GLOB.access_sec_doors, GLOB.access_minisat, + GLOB.access_ce, GLOB.access_RC_announce, GLOB.access_keycard_auth, GLOB.access_tcomsat, GLOB.access_mineral_storeroom) /datum/outfit/job/ce name = "Chief Engineer" @@ -74,10 +74,10 @@ Station Engineer outfit = /datum/outfit/job/engineer - access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, - access_external_airlocks, access_construction, access_atmospherics, access_tcomsat) - minimal_access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, - access_external_airlocks, access_construction, access_tcomsat, access_atmospherics) + access = list(GLOB.access_engine, GLOB.access_engine_equip, GLOB.access_tech_storage, GLOB.access_maint_tunnels, + GLOB.access_external_airlocks, GLOB.access_construction, GLOB.access_atmospherics, GLOB.access_tcomsat) + minimal_access = list(GLOB.access_engine, GLOB.access_engine_equip, GLOB.access_tech_storage, GLOB.access_maint_tunnels, + GLOB.access_external_airlocks, GLOB.access_construction, GLOB.access_tcomsat) /datum/outfit/job/engineer name = "Station Engineer" @@ -125,9 +125,9 @@ Atmospheric Technician outfit = /datum/outfit/job/atmos - access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, - access_external_airlocks, access_construction, access_atmospherics) - minimal_access = list(access_atmospherics, access_maint_tunnels, access_emergency_storage, access_construction) + access = list(GLOB.access_engine, GLOB.access_engine_equip, GLOB.access_tech_storage, GLOB.access_maint_tunnels, + GLOB.access_external_airlocks, GLOB.access_construction, GLOB.access_atmospherics) + minimal_access = list(GLOB.access_atmospherics, GLOB.access_maint_tunnels, GLOB.access_emergency_storage, GLOB.access_construction) /datum/outfit/job/atmos name = "Atmospheric Technician" diff --git a/code/modules/jobs/job_types/job.dm b/code/modules/jobs/job_types/job.dm index 0e7501614c..4d5d4eb80c 100644 --- a/code/modules/jobs/job_types/job.dm +++ b/code/modules/jobs/job_types/job.dm @@ -70,7 +70,7 @@ if(!visualsOnly && announce) announce(H) - if(config.enforce_human_authority && (title in command_positions)) + if(config.enforce_human_authority && (title in GLOB.command_positions)) H.dna.features["tail_human"] = "None" H.dna.features["ears"] = "None" H.regenerate_icons() @@ -87,13 +87,12 @@ . = src.access.Copy() if(config.jobs_have_maint_access & EVERYONE_HAS_MAINT_ACCESS) //Config has global maint access set - . |= list(access_maint_tunnels) + . |= list(GLOB.access_maint_tunnels) /datum/job/proc/announce_head(var/mob/living/carbon/human/H, var/channels) //tells the given channel that the given mob is the new department head. See communications.dm for valid channels. - spawn(4) //to allow some initialization - if(H && announcement_systems.len) - var/obj/machinery/announcement_system/announcer = pick(announcement_systems) - announcer.announce("NEWHEAD", H.real_name, H.job, channels) + if(H && GLOB.announcement_systems.len) + //timer because these should come after the captain announcement + SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/addtimer, CALLBACK(pick(GLOB.announcement_systems), /obj/machinery/announcement_system/proc/announce, "NEWHEAD", H.real_name, H.job, channels), 1)) //If the configuration option is set to require players to be logged as old enough to play certain jobs, then this proc checks that they are, otherwise it just returns 1 /datum/job/proc/player_old_enough(client/C) diff --git a/code/modules/jobs/job_types/medical.dm b/code/modules/jobs/job_types/medical.dm index f8d1ac0817..0b97f97dd7 100644 --- a/code/modules/jobs/job_types/medical.dm +++ b/code/modules/jobs/job_types/medical.dm @@ -3,7 +3,7 @@ Chief Medical Officer */ /datum/job/cmo title = "Chief Medical Officer" - flag = CMO + flag = CMO_JF department_head = list("Captain") department_flag = MEDSCI head_announce = list("Medical") @@ -17,12 +17,12 @@ Chief Medical Officer outfit = /datum/outfit/job/cmo - access = list(access_medical, access_morgue, access_genetics, access_cloning, access_heads, access_mineral_storeroom, - access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce, - access_keycard_auth, access_sec_doors, access_maint_tunnels) - minimal_access = list(access_medical, access_morgue, access_genetics, access_cloning, access_heads, access_mineral_storeroom, - access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce, - access_keycard_auth, access_sec_doors, access_maint_tunnels) + access = list(GLOB.access_medical, GLOB.access_morgue, GLOB.access_genetics, GLOB.access_cloning, GLOB.access_heads, GLOB.access_mineral_storeroom, + GLOB.access_chemistry, GLOB.access_virology, GLOB.access_cmo, GLOB.access_surgery, GLOB.access_RC_announce, + GLOB.access_keycard_auth, GLOB.access_sec_doors, GLOB.access_maint_tunnels) + minimal_access = list(GLOB.access_medical, GLOB.access_morgue, GLOB.access_genetics, GLOB.access_cloning, GLOB.access_heads, GLOB.access_mineral_storeroom, + GLOB.access_chemistry, GLOB.access_virology, GLOB.access_cmo, GLOB.access_surgery, GLOB.access_RC_announce, + GLOB.access_keycard_auth, GLOB.access_sec_doors, GLOB.access_maint_tunnels) /datum/outfit/job/cmo name = "Chief Medical Officer" @@ -58,8 +58,8 @@ Medical Doctor outfit = /datum/outfit/job/doctor - access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_genetics, access_cloning, access_mineral_storeroom) - minimal_access = list(access_medical, access_morgue, access_surgery, access_cloning) + access = list(GLOB.access_medical, GLOB.access_morgue, GLOB.access_surgery, GLOB.access_chemistry, GLOB.access_genetics, GLOB.access_cloning, GLOB.access_mineral_storeroom) + minimal_access = list(GLOB.access_medical, GLOB.access_morgue, GLOB.access_surgery, GLOB.access_cloning) /datum/outfit/job/doctor name = "Medical Doctor" @@ -93,8 +93,8 @@ Chemist outfit = /datum/outfit/job/chemist - access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_genetics, access_cloning, access_mineral_storeroom) - minimal_access = list(access_medical, access_chemistry, access_mineral_storeroom) + access = list(GLOB.access_medical, GLOB.access_morgue, GLOB.access_surgery, GLOB.access_chemistry, GLOB.access_genetics, GLOB.access_cloning, GLOB.access_mineral_storeroom) + minimal_access = list(GLOB.access_medical, GLOB.access_chemistry, GLOB.access_mineral_storeroom) /datum/outfit/job/chemist name = "Chemist" @@ -127,8 +127,8 @@ Geneticist outfit = /datum/outfit/job/geneticist - access = list(access_medical, access_morgue, access_chemistry, access_genetics, access_cloning, access_research, access_mineral_storeroom) - minimal_access = list(access_medical, access_morgue, access_genetics, access_cloning,) + access = list(GLOB.access_medical, GLOB.access_morgue, GLOB.access_chemistry, GLOB.access_genetics, GLOB.access_cloning, GLOB.access_research, GLOB.access_xenobiology, GLOB.access_robotics, GLOB.access_mineral_storeroom, GLOB.access_tech_storage) + minimal_access = list(GLOB.access_medical, GLOB.access_morgue, GLOB.access_genetics, GLOB.access_cloning, GLOB.access_research) /datum/outfit/job/geneticist name = "Geneticist" @@ -161,8 +161,8 @@ Virologist outfit = /datum/outfit/job/virologist - access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_cloning, access_mineral_storeroom) - minimal_access = list(access_medical, access_virology, access_mineral_storeroom) + access = list(GLOB.access_medical, GLOB.access_morgue, GLOB.access_surgery, GLOB.access_chemistry, GLOB.access_virology, GLOB.access_genetics, GLOB.access_cloning, GLOB.access_mineral_storeroom) + minimal_access = list(GLOB.access_medical, GLOB.access_virology, GLOB.access_mineral_storeroom) /datum/outfit/job/virologist name = "Virologist" diff --git a/code/modules/jobs/job_types/science.dm b/code/modules/jobs/job_types/science.dm index f197a84d43..1a0d5e6c4c 100644 --- a/code/modules/jobs/job_types/science.dm +++ b/code/modules/jobs/job_types/science.dm @@ -3,7 +3,7 @@ Research Director */ /datum/job/rd title = "Research Director" - flag = RD + flag = RD_JF department_head = list("Captain") department_flag = MEDSCI head_announce = list("Science") @@ -17,16 +17,16 @@ Research Director outfit = /datum/outfit/job/rd - access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue, - access_tox_storage, access_teleporter, access_sec_doors, - access_research, access_robotics, access_xenobiology, access_ai_upload, - access_RC_announce, access_keycard_auth, access_gateway, access_mineral_storeroom, - access_tech_storage, access_minisat, access_maint_tunnels, access_network) - minimal_access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue, - access_tox_storage, access_teleporter, access_sec_doors, - access_research, access_robotics, access_xenobiology, access_ai_upload, - access_RC_announce, access_keycard_auth, access_gateway, access_mineral_storeroom, - access_tech_storage, access_minisat, access_maint_tunnels, access_network) + access = list(GLOB.access_rd, GLOB.access_heads, GLOB.access_tox, GLOB.access_genetics, GLOB.access_morgue, + GLOB.access_tox_storage, GLOB.access_teleporter, GLOB.access_sec_doors, + GLOB.access_research, GLOB.access_robotics, GLOB.access_xenobiology, GLOB.access_ai_upload, + GLOB.access_RC_announce, GLOB.access_keycard_auth, GLOB.access_gateway, GLOB.access_mineral_storeroom, + GLOB.access_tech_storage, GLOB.access_minisat, GLOB.access_maint_tunnels, GLOB.access_network) + minimal_access = list(GLOB.access_rd, GLOB.access_heads, GLOB.access_tox, GLOB.access_genetics, GLOB.access_morgue, + GLOB.access_tox_storage, GLOB.access_teleporter, GLOB.access_sec_doors, + GLOB.access_research, GLOB.access_robotics, GLOB.access_xenobiology, GLOB.access_ai_upload, + GLOB.access_RC_announce, GLOB.access_keycard_auth, GLOB.access_gateway, GLOB.access_mineral_storeroom, + GLOB.access_tech_storage, GLOB.access_minisat, GLOB.access_maint_tunnels, GLOB.access_network) /datum/outfit/job/rd name = "Research Director" @@ -70,8 +70,8 @@ Scientist outfit = /datum/outfit/job/scientist - access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_mineral_storeroom, access_tech_storage, access_genetics) - minimal_access = list(access_tox, access_tox_storage, access_research, access_xenobiology, access_mineral_storeroom) + access = list(GLOB.access_robotics, GLOB.access_tox, GLOB.access_tox_storage, GLOB.access_research, GLOB.access_xenobiology, GLOB.access_mineral_storeroom, GLOB.access_tech_storage, GLOB.access_genetics) + minimal_access = list(GLOB.access_tox, GLOB.access_tox_storage, GLOB.access_research, GLOB.access_xenobiology, GLOB.access_mineral_storeroom) /datum/outfit/job/scientist name = "Scientist" @@ -102,8 +102,8 @@ Roboticist outfit = /datum/outfit/job/roboticist - access = list(access_robotics, access_tox, access_tox_storage, access_tech_storage, access_morgue, access_research, access_mineral_storeroom, access_xenobiology, access_genetics) - minimal_access = list(access_robotics, access_tech_storage, access_morgue, access_research, access_mineral_storeroom) + access = list(GLOB.access_robotics, GLOB.access_tox, GLOB.access_tox_storage, GLOB.access_tech_storage, GLOB.access_morgue, GLOB.access_research, GLOB.access_mineral_storeroom, GLOB.access_xenobiology, GLOB.access_genetics) + minimal_access = list(GLOB.access_robotics, GLOB.access_tech_storage, GLOB.access_morgue, GLOB.access_research, GLOB.access_mineral_storeroom) /datum/outfit/job/roboticist name = "Roboticist" diff --git a/code/modules/jobs/job_types/security.dm b/code/modules/jobs/job_types/security.dm index 42dfb0bbf0..d3ae011f60 100644 --- a/code/modules/jobs/job_types/security.dm +++ b/code/modules/jobs/job_types/security.dm @@ -1,7 +1,7 @@ //Warden and regular officers add this result to their get_access() /datum/job/proc/check_config_for_sec_maint() if(config.jobs_have_maint_access & SECURITY_HAS_MAINT_ACCESS) - return list(access_maint_tunnels) + return list(GLOB.access_maint_tunnels) return list() /* @@ -23,14 +23,14 @@ Head of Security outfit = /datum/outfit/job/hos - access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_weapons, - access_forensics_lockers, access_morgue, access_maint_tunnels, access_all_personal_lockers, - access_research, access_engine, access_mining, access_medical, access_construction, access_mailsorting, - access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway, access_maint_tunnels) - minimal_access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_weapons, - access_forensics_lockers, access_morgue, access_maint_tunnels, access_all_personal_lockers, - access_research, access_engine, access_mining, access_medical, access_construction, access_mailsorting, - access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway, access_maint_tunnels) + access = list(GLOB.access_security, GLOB.access_sec_doors, GLOB.access_brig, GLOB.access_armory, GLOB.access_court, GLOB.access_weapons, + GLOB.access_forensics_lockers, GLOB.access_morgue, GLOB.access_maint_tunnels, GLOB.access_all_personal_lockers, + GLOB.access_research, GLOB.access_engine, GLOB.access_mining, GLOB.access_medical, GLOB.access_construction, GLOB.access_mailsorting, + GLOB.access_heads, GLOB.access_hos, GLOB.access_RC_announce, GLOB.access_keycard_auth, GLOB.access_gateway, GLOB.access_maint_tunnels) + minimal_access = list(GLOB.access_security, GLOB.access_sec_doors, GLOB.access_brig, GLOB.access_armory, GLOB.access_court, GLOB.access_weapons, + GLOB.access_forensics_lockers, GLOB.access_morgue, GLOB.access_maint_tunnels, GLOB.access_all_personal_lockers, + GLOB.access_research, GLOB.access_engine, GLOB.access_mining, GLOB.access_medical, GLOB.access_construction, GLOB.access_mailsorting, + GLOB.access_heads, GLOB.access_hos, GLOB.access_RC_announce, GLOB.access_keycard_auth, GLOB.access_gateway, GLOB.access_maint_tunnels) /datum/outfit/job/hos name = "Head of Security" @@ -74,8 +74,8 @@ Warden outfit = /datum/outfit/job/warden - access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_maint_tunnels, access_morgue, access_weapons, access_forensics_lockers) - minimal_access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_weapons) //See /datum/job/warden/get_access() + access = list(GLOB.access_security, GLOB.access_sec_doors, GLOB.access_brig, GLOB.access_armory, GLOB.access_court, GLOB.access_maint_tunnels, GLOB.access_morgue, GLOB.access_weapons, GLOB.access_forensics_lockers) + minimal_access = list(GLOB.access_security, GLOB.access_sec_doors, GLOB.access_brig, GLOB.access_armory, GLOB.access_court, GLOB.access_weapons) //See /datum/job/warden/get_access() /datum/job/warden/get_access() var/list/L = list() @@ -124,8 +124,8 @@ Detective outfit = /datum/outfit/job/detective - access = list(access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_court, access_brig, access_weapons) - minimal_access = list(access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_court, access_brig, access_weapons) + access = list(GLOB.access_sec_doors, GLOB.access_forensics_lockers, GLOB.access_morgue, GLOB.access_maint_tunnels, GLOB.access_court, GLOB.access_brig, GLOB.access_weapons) + minimal_access = list(GLOB.access_sec_doors, GLOB.access_forensics_lockers, GLOB.access_morgue, GLOB.access_maint_tunnels, GLOB.access_court, GLOB.access_brig, GLOB.access_weapons) /datum/outfit/job/detective name = "Detective" @@ -172,8 +172,8 @@ Security Officer outfit = /datum/outfit/job/security - access = list(access_security, access_sec_doors, access_brig, access_court, access_maint_tunnels, access_morgue, access_weapons, access_forensics_lockers) - minimal_access = list(access_security, access_sec_doors, access_brig, access_court, access_weapons) //But see /datum/job/warden/get_access() + access = list(GLOB.access_security, GLOB.access_sec_doors, GLOB.access_brig, GLOB.access_court, GLOB.access_maint_tunnels, GLOB.access_morgue, GLOB.access_weapons, GLOB.access_forensics_lockers) + minimal_access = list(GLOB.access_security, GLOB.access_sec_doors, GLOB.access_brig, GLOB.access_court, GLOB.access_weapons) //But see /datum/job/warden/get_access() /datum/job/officer/get_access() @@ -181,19 +181,19 @@ Security Officer L |= ..() | check_config_for_sec_maint() return L -var/list/available_depts = list(SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, SEC_DEPT_SCIENCE, SEC_DEPT_SUPPLY) +GLOBAL_LIST_INIT(available_depts, list(SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, SEC_DEPT_SCIENCE, SEC_DEPT_SUPPLY)) /datum/job/officer/after_spawn(mob/living/carbon/human/H, mob/M) // Assign department security var/department if(M && M.client && M.client.prefs) department = M.client.prefs.prefered_security_department - if(!LAZYLEN(available_depts) || department == "None") + if(!LAZYLEN(GLOB.available_depts) || department == "None") return - else if(department in available_depts) - LAZYREMOVE(available_depts, department) + else if(department in GLOB.available_depts) + LAZYREMOVE(GLOB.available_depts, department) else - department = pick_n_take(available_depts) + department = pick_n_take(GLOB.available_depts) var/ears = null var/tie = null var/list/dep_access = null @@ -202,27 +202,27 @@ var/list/available_depts = list(SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, SEC_DEPT switch(department) if(SEC_DEPT_SUPPLY) ears = /obj/item/device/radio/headset/headset_sec/alt/department/supply - dep_access = list(access_mailsorting, access_mining, access_mining_station) + dep_access = list(GLOB.access_mailsorting, GLOB.access_mining, GLOB.access_mining_station) destination = /area/security/checkpoint/supply - spawn_point = locate(/obj/effect/landmark/start/depsec/supply) in department_security_spawns + spawn_point = locate(/obj/effect/landmark/start/depsec/supply) in GLOB.department_security_spawns tie = /obj/item/clothing/tie/armband/cargo if(SEC_DEPT_ENGINEERING) ears = /obj/item/device/radio/headset/headset_sec/alt/department/engi - dep_access = list(access_construction, access_engine) + dep_access = list(GLOB.access_construction, GLOB.access_engine) destination = /area/security/checkpoint/engineering - spawn_point = locate(/obj/effect/landmark/start/depsec/engineering) in department_security_spawns + spawn_point = locate(/obj/effect/landmark/start/depsec/engineering) in GLOB.department_security_spawns tie = /obj/item/clothing/tie/armband/engine if(SEC_DEPT_MEDICAL) ears = /obj/item/device/radio/headset/headset_sec/alt/department/med - dep_access = list(access_medical) + dep_access = list(GLOB.access_medical) destination = /area/security/checkpoint/medical - spawn_point = locate(/obj/effect/landmark/start/depsec/medical) in department_security_spawns + spawn_point = locate(/obj/effect/landmark/start/depsec/medical) in GLOB.department_security_spawns tie = /obj/item/clothing/tie/armband/medblue if(SEC_DEPT_SCIENCE) ears = /obj/item/device/radio/headset/headset_sec/alt/department/sci - dep_access = list(access_research) + dep_access = list(GLOB.access_research) destination = /area/security/checkpoint/science - spawn_point = locate(/obj/effect/landmark/start/depsec/science) in department_security_spawns + spawn_point = locate(/obj/effect/landmark/start/depsec/science) in GLOB.department_security_spawns tie = /obj/item/clothing/tie/armband/science if(tie) diff --git a/code/modules/jobs/job_types/silicon.dm b/code/modules/jobs/job_types/silicon.dm index c3338582b8..0b6380bfaf 100644 --- a/code/modules/jobs/job_types/silicon.dm +++ b/code/modules/jobs/job_types/silicon.dm @@ -3,7 +3,7 @@ AI */ /datum/job/ai title = "AI" - flag = AI + flag = AI_JF department_flag = ENGSEC faction = "Station" total_positions = 0 @@ -20,8 +20,8 @@ AI AI.rename_self("ai", M.client) //we may have been created after our borg - if(ticker.current_state == GAME_STATE_SETTING_UP) - for(var/mob/living/silicon/robot/R in silicon_mobs) + if(SSticker.current_state == GAME_STATE_SETTING_UP) + for(var/mob/living/silicon/robot/R in GLOB.silicon_mobs) if(!R.connected_ai) R.TryConnectToAI() diff --git a/code/modules/jobs/jobs.dm b/code/modules/jobs/jobs.dm index 57b11a49cd..eff50f07ff 100644 --- a/code/modules/jobs/jobs.dm +++ b/code/modules/jobs/jobs.dm @@ -1,100 +1,40 @@ - -var/const/ENGSEC =(1<<0) - -var/const/CAPTAIN =(1<<0) -var/const/HOS =(1<<1) -var/const/WARDEN =(1<<2) -var/const/DETECTIVE =(1<<3) -var/const/OFFICER =(1<<4) -var/const/CHIEF =(1<<5) -var/const/ENGINEER =(1<<6) -var/const/ATMOSTECH =(1<<7) -var/const/ROBOTICIST =(1<<8) -var/const/AI =(1<<9) -var/const/CYBORG =(1<<10) - - -var/const/MEDSCI =(1<<1) - -var/const/RD =(1<<0) -var/const/SCIENTIST =(1<<1) -var/const/CHEMIST =(1<<2) -var/const/CMO =(1<<3) -var/const/DOCTOR =(1<<4) -var/const/GENETICIST =(1<<5) -var/const/VIROLOGIST =(1<<6) - - -var/const/CIVILIAN =(1<<2) - -var/const/HOP =(1<<0) -var/const/BARTENDER =(1<<1) -var/const/BOTANIST =(1<<2) -var/const/COOK =(1<<3) -var/const/JANITOR =(1<<4) -var/const/LIBRARIAN =(1<<5) -var/const/QUARTERMASTER =(1<<6) -var/const/CARGOTECH =(1<<7) -var/const/MINER =(1<<8) -var/const/LAWYER =(1<<9) -var/const/CHAPLAIN =(1<<10) -var/const/CLOWN =(1<<11) -var/const/MIME =(1<<12) -var/const/ASSISTANT =(1<<13) - - -var/list/assistant_occupations = list( - "Assistant", - "Atmospheric Technician", - "Cargo Technician", - "Chaplain", - "Lawyer", - "Librarian" -) - - -var/list/command_positions = list( +GLOBAL_LIST_INIT(command_positions, list( "Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", - "Chief Medical Officer" -) + "Chief Medical Officer")) -var/list/engineering_positions = list( +GLOBAL_LIST_INIT(engineering_positions, list( "Chief Engineer", "Station Engineer", - "Atmospheric Technician", -) + "Atmospheric Technician")) -var/list/medical_positions = list( +GLOBAL_LIST_INIT(medical_positions, list( "Chief Medical Officer", "Medical Doctor", "Geneticist", "Virologist", - "Chemist" -) + "Chemist")) -var/list/science_positions = list( +GLOBAL_LIST_INIT(science_positions, list( "Research Director", "Scientist", - "Roboticist" -) + "Roboticist")) -var/list/supply_positions = list( +GLOBAL_LIST_INIT(supply_positions, list( "Head of Personnel", "Quartermaster", "Cargo Technician", - "Shaft Miner", -) + "Shaft Miner")) -var/list/civilian_positions = list( +GLOBAL_LIST_INIT(civilian_positions, list( "Bartender", "Botanist", "Cook", @@ -104,27 +44,24 @@ var/list/civilian_positions = list( "Chaplain", "Clown", "Mime", - "Assistant" -) + "Assistant")) -var/list/security_positions = list( +GLOBAL_LIST_INIT(security_positions, list( "Head of Security", "Warden", "Detective", - "Security Officer" -) + "Security Officer")) -var/list/nonhuman_positions = list( +GLOBAL_LIST_INIT(nonhuman_positions, list( "AI", "Cyborg", - "pAI" -) + "pAI")) /proc/guest_jobbans(job) - return ((job in command_positions) || (job in nonhuman_positions) || (job in security_positions)) + return ((job in GLOB.command_positions) || (job in GLOB.nonhuman_positions) || (job in GLOB.security_positions)) @@ -138,22 +75,22 @@ var/list/nonhuman_positions = list( if(J.title == job_title) return J.department_head //this is a list -var/static/regex/cap_expand = new("cap(?!tain)") -var/static/regex/cmo_expand = new("cmo") -var/static/regex/hos_expand = new("hos") -var/static/regex/hop_expand = new("hop") -var/static/regex/rd_expand = new("rd") -var/static/regex/ce_expand = new("ce") -var/static/regex/qm_expand = new("qm") -var/static/regex/sec_expand = new("(? sentence_chance && chance <= space_chance) + scrambled_text += " " + + scrambled_text = trim(scrambled_text) + var/ending = copytext(scrambled_text, length(scrambled_text)) + if(ending == ".") + scrambled_text = copytext(scrambled_text,1,length(scrambled_text)-1) + var/input_ending = copytext(input, input_size) + if(input_ending in list("!","?",".")) + scrambled_text += input_ending + + // Add it to cache, cutting old entries if the list is too long + scramble_cache[input] = scrambled_text + if(scramble_cache.len > SCRAMBLE_CACHE_LEN) + scramble_cache.Cut(1, scramble_cache.len-SCRAMBLE_CACHE_LEN-1) + + return scrambled_text + +/datum/language/proc/get_spoken_verb(msg_end) + switch(msg_end) + if("!") + return exclaim_verb + if("?") + return ask_verb + return speech_verb + +#undef SCRAMBLE_CACHE_LEN diff --git a/code/modules/language/language_menu.dm b/code/modules/language/language_menu.dm new file mode 100644 index 0000000000..43af26a972 --- /dev/null +++ b/code/modules/language/language_menu.dm @@ -0,0 +1,88 @@ +/datum/language_menu + var/mob/living/owner + +/datum/language_menu/New(new_owner) + owner = new_owner + +/datum/language_menu/Destroy() + owner = null + . = ..() + +/datum/language_menu/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.language_menu_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "language_menu", "Language Menu", 700, 800, master_ui, state) + ui.open() + +/datum/language_menu/ui_data(mob/user) + var/list/data = list() + + var/datum/language/mob_default_language = owner.get_default_language() + + data["languages"] = list() + for(var/ld in owner.languages) + var/datum/language/LD = ld + var/list/L = list() + + L["name"] = initial(LD.name) + L["desc"] = initial(LD.desc) + L["key"] = initial(LD.key) + L["is_default"] = (LD == mob_default_language) + L["can_speak"] = owner.can_speak_in_language(LD) + + data["languages"] += list(L) + + if(check_rights_for(user.client, R_ADMIN)) + data["admin_mode"] = TRUE + data["omnitongue"] = HAS_SECONDARY_FLAG(owner, OMNITONGUE) + + data["unknown_languages"] = list() + for(var/ld in subtypesof(/datum/language)) + if(owner.has_language(ld)) + continue + var/datum/language/LD = ld + var/list/L = list() + + L["name"] = initial(LD.name) + L["desc"] = initial(LD.desc) + L["key"] = initial(LD.key) + + data["unknown_languages"] += list(L) + return data + +/datum/language_menu/ui_act(action, params) + if(..()) + return + var/mob/user = usr + + var/language_name = params["language_name"] + var/datum/language/language_datum + for(var/ld in subtypesof(/datum/language)) + var/datum/language/LD = ld + if(language_name == initial(LD.name)) + language_datum = LD + var/is_admin = check_rights_for(user.client, R_ADMIN) + + switch(action) + if("select_default") + if(language_datum) + owner.selected_default_language = language_datum + . = TRUE + if("grant_language") + if(is_admin && language_datum) + owner.grant_language(language_datum) + message_admins("[key_name_admin(user)] granted the [language_name] language to [key_name_admin(owner)].") + log_admin("[key_name(user)] granted the language [language_name] to [key_name(owner)].") + . = TRUE + if("remove_language") + if(is_admin && language_datum) + owner.remove_language(language_datum) + message_admins("[key_name_admin(user)] removed the [language_name] language to [key_name_admin(owner)].") + log_admin("[key_name(user)] removed the language [language_name] to [key_name(owner)].") + . = TRUE + if("toggle_omnitongue") + if(is_admin) + TOGGLE_SECONDARY_FLAG(owner, OMNITONGUE) + message_admins("[key_name_admin(user)] [HAS_SECONDARY_FLAG(owner, OMNITONGUE) ? "enabled" : "disabled"] the ability to speak all languages (that they know) of [key_name_admin(owner)].") + log_admin("[key_name(user)] [HAS_SECONDARY_FLAG(owner, OMNITONGUE) ? "enabled" : "disabled"] the ability to speak all languages (that_they know) of [key_name(owner)].") + . = TRUE diff --git a/code/modules/language/machine.dm b/code/modules/language/machine.dm new file mode 100644 index 0000000000..3e8bff846e --- /dev/null +++ b/code/modules/language/machine.dm @@ -0,0 +1,17 @@ +/datum/language/machine + name = "Encoded Audio Language" + desc = "An efficient language of encoded tones developed by synthetics and cyborgs." + speech_verb = "whistles" + ask_verb = "chirps" + exclaim_verb = "whistles loudly" + spans = list(SPAN_ROBOT, "changeling") + key = "6" + flags = NO_STUTTER + syllables = list("beep","beep","beep","beep","beep","boop","boop","boop","bop","bop","dee","dee","doo","doo","hiss","hss","buzz","buzz","bzz","ksssh","keey","wurr","wahh","tzzz") + space_chance = 10 + default_priority = 90 + +/datum/language/machine/get_random_name() + if(prob(70)) + return "[pick(GLOB.posibrain_names)]-[rand(100, 999)]" + return pick(GLOB.ai_names) diff --git a/code/modules/language/monkey.dm b/code/modules/language/monkey.dm new file mode 100644 index 0000000000..f610c29f1c --- /dev/null +++ b/code/modules/language/monkey.dm @@ -0,0 +1,10 @@ +/datum/language/monkey + name = "Chimpanzee" + desc = "Ook ook ook." + speech_verb = "chimpers" + ask_verb = "chimpers" + exclaim_verb = "screeches" + key = "1" + space_chance = 100 + syllables = list("oop", "aak", "chee", "eek") + default_priority = 80 diff --git a/code/modules/language/ratvar.dm b/code/modules/language/ratvar.dm new file mode 100644 index 0000000000..2319b40889 --- /dev/null +++ b/code/modules/language/ratvar.dm @@ -0,0 +1,12 @@ +/datum/language/ratvar + name = "Ratvarian" + desc = "A timeless language full of power and incomprehensible to the unenlightened." + speech_verb = "clinks" + ask_verb = "clunks" + exclaim_verb = "clanks" + key = "r" + default_priority = 10 + spans = list(SPAN_ROBOT, "brass") + +/datum/language/ratvar/scramble(var/input) + . = text2ratvar(input) diff --git a/code/modules/language/slime.dm b/code/modules/language/slime.dm new file mode 100644 index 0000000000..cc4c36e2ef --- /dev/null +++ b/code/modules/language/slime.dm @@ -0,0 +1,10 @@ +/datum/language/slime + name = "Slime" + desc = "A melodic and complex language spoken by slimes. Some of the notes are inaudible to humans." + speech_verb = "warbles" + ask_verb = "warbles" + exclaim_verb = "warbles" + spans = list("slime") + key = "k" + syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix","*","!") + default_priority = 70 diff --git a/code/modules/language/swarmer.dm b/code/modules/language/swarmer.dm new file mode 100644 index 0000000000..597f803775 --- /dev/null +++ b/code/modules/language/swarmer.dm @@ -0,0 +1,42 @@ +/datum/language/swarmer + name = "Swarmer" + desc = "A language only consisting of musical notes." + speech_verb = "tones" + ask_verb = "tones inquisitively" + exclaim_verb = "tones loudly" + spans = list(SPAN_ROBOT) + key = "s" + flags = NO_STUTTER + space_chance = 100 + sentence_chance = 0 + default_priority = 60 + // since various flats and sharps are the same, + // all non-accidental notes are doubled in the list + /* The list with unicode symbols for the accents. + syllables = list( + "C", "C", + "C♯", "D♭", + "D", "D", + "D♯", "E♭", + "E", "E", + "F", "F", + "F♯", "G♭", + "G", "G", + "G♯", "A♭", + "A", "A", + "A♯", "B♭", + "B", "B") + */ + syllables = list( + "C", "C", + "C#", "Db", + "D", "D", + "D#", "Eb", + "E", "E", + "F", "F", + "F#", "Gb", + "G", "G", + "G#", "Ab", + "A", "A", + "A#", "Bb", + "B", "B") diff --git a/code/modules/language/xenocommon.dm b/code/modules/language/xenocommon.dm new file mode 100644 index 0000000000..17481aff04 --- /dev/null +++ b/code/modules/language/xenocommon.dm @@ -0,0 +1,10 @@ +/datum/language/xenocommon + name = "Xenomorph" + desc = "The common tongue of the xenomorphs." + speech_verb = "hisses" + ask_verb = "hisses" + exclaim_verb = "hisses" + spans = list("alien") + key = "4" + syllables = list("sss","sSs","SSS") + default_priority = 50 diff --git a/code/modules/library/lib_codex_gigas.dm b/code/modules/library/lib_codex_gigas.dm index 319191c472..4fcd00c5c0 100644 --- a/code/modules/library/lib_codex_gigas.dm +++ b/code/modules/library/lib_codex_gigas.dm @@ -48,7 +48,7 @@ if(!prob(correctness)) usedName += "x" var/datum/devilinfo/devil = devilInfo(usedName, 0) - user << browse("Information on [devilName]


    [lawlorify[LORE][devil.ban]]
    [lawlorify[LORE][devil.bane]]
    [lawlorify[LORE][devil.obligation]]
    [lawlorify[LORE][devil.banish]]", "window=book[window_size != null ? ";size=[window_size]" : ""]") + user << browse("Information on [devilName]


    [GLOB.lawlorify[LORE][devil.ban]]
    [GLOB.lawlorify[LORE][devil.bane]]
    [GLOB.lawlorify[LORE][devil.obligation]]
    [GLOB.lawlorify[LORE][devil.banish]]", "window=book[window_size != null ? ";size=[window_size]" : ""]") inUse = 0 sleep(10) if(!prob(willpower)) diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index 0c26320888..c49b013f4a 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -43,7 +43,7 @@ dat += "Filter by Author: [author]
    " dat += "\[Start Search\]
    " if(1) - if (!dbcon.Connect()) + if (!GLOB.dbcon.Connect()) dat += "ERROR: Unable to contact External Archive. Please contact your system administrator for assistance.
    " else if(!SQLquery) dat += "ERROR: Malformed search request. Please contact your system administrator for assistance.
    " @@ -51,7 +51,7 @@ dat += "
    Non-human Positions
    Non-human Positions
    \[NON-HUMAN\]
    " dat += "" - var/DBQuery/query_library_list_books = dbcon.NewQuery(SQLquery) + var/DBQuery/query_library_list_books = GLOB.dbcon.NewQuery(SQLquery) if(!query_library_list_books.Execute()) dat += "ERROR: Unable to retrieve book listings. Please contact your system administrator for assistance.
    " while(query_library_list_books.NextRow()) @@ -128,16 +128,16 @@ var/author var/category -var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums +GLOBAL_LIST(cachedbooks) // List of our cached book datums /proc/load_library_db_to_cache() - if(cachedbooks) + if(GLOB.cachedbooks) return - if(!dbcon.Connect()) + if(!GLOB.dbcon.Connect()) return - cachedbooks = list() - var/DBQuery/query_library_cache = dbcon.NewQuery("SELECT id, author, title, category FROM [format_table_name("library")] WHERE isnull(deleted)") + GLOB.cachedbooks = list() + var/DBQuery/query_library_cache = GLOB.dbcon.NewQuery("SELECT id, author, title, category FROM [format_table_name("library")] WHERE isnull(deleted)") if(!query_library_cache.Execute()) return while(query_library_cache.NextRow()) @@ -146,7 +146,7 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums newbook.author = query_library_cache.item[2] newbook.title = query_library_cache.item[3] newbook.category = query_library_cache.item[4] - cachedbooks += newbook + GLOB.cachedbooks += newbook @@ -181,12 +181,12 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums if(libcomp_menu) return load_library_db_to_cache() - if(!cachedbooks) + if(!GLOB.cachedbooks) return libcomp_menu = list("") - for(var/i in 1 to cachedbooks.len) - var/datum/cachedbook/C = cachedbooks[i] + for(var/i in 1 to GLOB.cachedbooks.len) + var/datum/cachedbook/C = GLOB.cachedbooks[i] var/page = round(i/250)+1 if (libcomp_menu.len < page) libcomp_menu.len = page @@ -257,7 +257,7 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums dat += "

    External Archive

    " build_library_menu() - if(!cachedbooks) + if(!GLOB.cachedbooks) dat += "ERROR: Unable to contact External Archive. Please contact your system administrator for assistance." else dat += "(Order book by SS13BN)

    " @@ -411,7 +411,7 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums if(scanner.cache) var/choice = input("Are you certain you wish to upload this title to the Archive?") in list("Confirm", "Abort") if(choice == "Confirm") - if (!dbcon.Connect()) + if (!GLOB.dbcon.Connect()) alert("Connection to Archive has been severed. Aborting.") else @@ -419,7 +419,7 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums var/sqlauthor = sanitizeSQL(scanner.cache.author) var/sqlcontent = sanitizeSQL(scanner.cache.dat) var/sqlcategory = sanitizeSQL(upload_category) - var/DBQuery/query_library_upload = dbcon.NewQuery("INSERT INTO [format_table_name("library")] (author, title, content, category, ckey, datetime) VALUES ('[sqlauthor]', '[sqltitle]', '[sqlcontent]', '[sqlcategory]', '[usr.ckey]', Now())") + var/DBQuery/query_library_upload = GLOB.dbcon.NewQuery("INSERT INTO [format_table_name("library")] (author, title, content, category, ckey, datetime) VALUES ('[sqlauthor]', '[sqltitle]', '[sqlcontent]', '[sqlcategory]', '[usr.ckey]', Now())") if(!query_library_upload.Execute()) alert("Database error encountered uploading to Archive") return @@ -427,16 +427,16 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums log_game("[usr.name]/[usr.key] has uploaded the book titled [scanner.cache.name], [length(scanner.cache.dat)] signs") alert("Upload Complete. Uploaded title will be unavailable for printing for a short period") if(href_list["newspost"]) - if(!news_network) + if(!GLOB.news_network) alert("No news network found on station. Aborting.") var/channelexists = 0 - for(var/datum/newscaster/feed_channel/FC in news_network.network_channels) + for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels) if(FC.channel_name == "Nanotrasen Book Club") channelexists = 1 break if(!channelexists) - news_network.CreateFeedChannel("Nanotrasen Book Club", "Library", null) - news_network.SubmitArticle(scanner.cache.dat, "[scanner.cache.name]", "Nanotrasen Book Club", null) + GLOB.news_network.CreateFeedChannel("Nanotrasen Book Club", "Library", null) + GLOB.news_network.SubmitArticle(scanner.cache.dat, "[scanner.cache.name]", "Nanotrasen Book Club", null) alert("Upload complete. Your uploaded title is now available on station newscasters.") if(href_list["orderbyid"]) if(cooldown > world.time) @@ -449,13 +449,13 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums if(href_list["targetid"]) var/sqlid = sanitizeSQL(href_list["targetid"]) - if (!dbcon.Connect()) + if (!GLOB.dbcon.Connect()) alert("Connection to Archive has been severed. Aborting.") if(cooldown > world.time) say("Printer unavailable. Please allow a short time before attempting to print.") else cooldown = world.time + PRINTER_COOLDOWN - var/DBQuery/query_library_print = dbcon.NewQuery("SELECT * FROM [format_table_name("library")] WHERE id=[sqlid] AND isnull(deleted)") + var/DBQuery/query_library_print = GLOB.dbcon.NewQuery("SELECT * FROM [format_table_name("library")] WHERE id=[sqlid] AND isnull(deleted)") if(!query_library_print.Execute()) say("PRINTER ERROR! Failed to print document (0x0000000F)") return @@ -474,11 +474,11 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums if(href_list["printbible"]) if(cooldown < world.time) var/obj/item/weapon/storage/book/bible/B = new /obj/item/weapon/storage/book/bible(src.loc) - if(SSreligion.Bible_icon_state && SSreligion.Bible_item_state) - B.icon_state = SSreligion.Bible_icon_state - B.item_state = SSreligion.Bible_item_state - B.name = SSreligion.Bible_name - B.deity_name = SSreligion.Bible_deity_name + if(SSreligion.bible_icon_state && SSreligion.bible_item_state) + B.icon_state = SSreligion.bible_icon_state + B.item_state = SSreligion.bible_item_state + B.name = SSreligion.bible_name + B.deity_name = SSreligion.deity cooldown = world.time + PRINTER_COOLDOWN else say("Printer currently unavailable, please wait a moment.") diff --git a/code/modules/library/random_books.dm b/code/modules/library/random_books.dm index 11bb41c7e1..f685c92db7 100644 --- a/code/modules/library/random_books.dm +++ b/code/modules/library/random_books.dm @@ -1,4 +1,5 @@ -/obj/item/weapon/book/manual/random/New() +/obj/item/weapon/book/manual/random/Initialize() + ..() var/static/banned_books = list(/obj/item/weapon/book/manual/random,/obj/item/weapon/book/manual/nuclear,/obj/item/weapon/book/manual/wiki) var/newtype = pick(subtypesof(/obj/item/weapon/book/manual) - banned_books) new newtype(loc) @@ -8,7 +9,8 @@ var/amount = 1 var/category = null -/obj/item/weapon/book/random/New() +/obj/item/weapon/book/random/Initialize() + ..() create_random_books(amount, src.loc, TRUE, category) qdel(src) @@ -34,7 +36,7 @@ . = list() if(!isnum(amount) || amount<1) return - if (!dbcon.Connect()) + if (!GLOB.dbcon.Connect()) if(fail_loud || prob(5)) var/obj/item/weapon/paper/P = new(location) P.info = "There once was a book from Nantucket
    But the database failed us, so f*$! it.
    I tried to be good to you
    Now this is an I.O.U
    If you're feeling entitled, well, stuff it!

    ~" @@ -43,7 +45,7 @@ if(prob(25)) category = null var/c = category? " AND category='[sanitizeSQL(category)]'" :"" - var/DBQuery/query_get_random_books = dbcon.NewQuery("SELECT * FROM [format_table_name("library")] WHERE isnull(deleted)[c] GROUP BY title ORDER BY rand() LIMIT [amount];") // isdeleted copyright (c) not me + var/DBQuery/query_get_random_books = GLOB.dbcon.NewQuery("SELECT * FROM [format_table_name("library")] WHERE isnull(deleted)[c] GROUP BY title ORDER BY rand() LIMIT [amount];") // isdeleted copyright (c) not me if(query_get_random_books.Execute()) while(query_get_random_books.NextRow()) var/obj/item/weapon/book/B = new(location) diff --git a/code/modules/library/soapstone.dm b/code/modules/library/soapstone.dm index ba81f65344..231f5417ab 100644 --- a/code/modules/library/soapstone.dm +++ b/code/modules/library/soapstone.dm @@ -192,10 +192,14 @@ var/turf/T = get_turf(src) data["x"] = T.x data["y"] = T.y + data["z"] = T.z data["like_keys"] = like_keys data["dislike_keys"] = dislike_keys /obj/structure/chisel_message/proc/unpack(list/data) + if(!islist(data)) + return + hidden_message = data["hidden_message"] creator_name = data["creator_name"] creator_key = data["creator_key"] @@ -209,8 +213,10 @@ var/x = data["x"] var/y = data["y"] - var/turf/newloc = locate(x, y, ZLEVEL_STATION) - forceMove(newloc) + var/z = data["z"] + var/turf/newloc = locate(x, y, z) + if(isturf(newloc)) + forceMove(newloc) update_icon() /obj/structure/chisel_message/examine(mob/user) @@ -223,7 +229,7 @@ SSpersistence.chisel_messages -= src . = ..() -/obj/structure/chisel_message/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = always_state) +/obj/structure/chisel_message/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) diff --git a/code/modules/lighting/lighting_area.dm b/code/modules/lighting/lighting_area.dm index cbca355924..b581956307 100644 --- a/code/modules/lighting/lighting_area.dm +++ b/code/modules/lighting/lighting_area.dm @@ -21,3 +21,10 @@ T.lighting_clear_overlay() return TRUE + +/area/vv_edit_var(var_name, var_value) + switch(var_name) + if("dynamic_lighting") + set_dynamic_lighting(var_value) + return TRUE + return ..() \ No newline at end of file diff --git a/code/modules/lighting/lighting_corner.dm b/code/modules/lighting/lighting_corner.dm index 7121fa4472..4e3b1821b9 100644 --- a/code/modules/lighting/lighting_corner.dm +++ b/code/modules/lighting/lighting_corner.dm @@ -1,11 +1,9 @@ -/var/list/datum/lighting_corner/all_lighting_corners = list() -/var/datum/lighting_corner/dummy/dummy_lighting_corner = new // Because we can control each corner of every lighting object. // And corners get shared between multiple turfs (unless you're on the corners of the map, then 1 corner doesn't). // For the record: these should never ever ever be deleted, even if the turf doesn't have dynamic lighting. // This list is what the code that assigns corners listens to, the order in this list is the order in which corners are added to the /turf/corners list. -/var/list/LIGHTING_CORNER_DIAGONAL = list(NORTHEAST, SOUTHEAST, SOUTHWEST, NORTHWEST) +GLOBAL_LIST_INIT(LIGHTING_CORNER_DIAGONAL, list(NORTHEAST, SOUTHEAST, SOUTHWEST, NORTHWEST)) /datum/lighting_corner var/list/turf/masters = list() @@ -32,8 +30,6 @@ /datum/lighting_corner/New(var/turf/new_turf, var/diagonal) . = ..() - all_lighting_corners += src - masters[new_turf] = turn(diagonal, 180) z = new_turf.z @@ -56,7 +52,7 @@ T.corners = list(null, null, null, null) masters[T] = diagonal - i = LIGHTING_CORNER_DIAGONAL.Find(turn(diagonal, 180)) + i = GLOB.LIGHTING_CORNER_DIAGONAL.Find(turn(diagonal, 180)) T.corners[i] = src // Now the horizontal one. @@ -66,7 +62,7 @@ T.corners = list(null, null, null, null) masters[T] = ((T.x > x) ? EAST : WEST) | ((T.y > y) ? NORTH : SOUTH) // Get the dir based on coordinates. - i = LIGHTING_CORNER_DIAGONAL.Find(turn(masters[T], 180)) + i = GLOB.LIGHTING_CORNER_DIAGONAL.Find(turn(masters[T], 180)) T.corners[i] = src // And finally the vertical one. @@ -76,7 +72,7 @@ T.corners = list(null, null, null, null) masters[T] = ((T.x > x) ? EAST : WEST) | ((T.y > y) ? NORTH : SOUTH) // Get the dir based on coordinates. - i = LIGHTING_CORNER_DIAGONAL.Find(turn(masters[T], 180)) + i = GLOB.LIGHTING_CORNER_DIAGONAL.Find(turn(masters[T], 180)) T.corners[i] = src update_active() @@ -98,10 +94,13 @@ if (!needs_update) needs_update = TRUE - lighting_update_corners += src + GLOB.lighting_update_corners += src /datum/lighting_corner/proc/update_objects() // Cache these values a head of time so 4 individual lighting objects don't all calculate them individually. + var/lum_r = src.lum_r + var/lum_g = src.lum_g + var/lum_b = src.lum_b var/mx = max(lum_r, lum_g, lum_b) // Scale it so one of them is the strongest lum, if it is above 1. . = 1 // factor if (mx > 1) @@ -111,22 +110,22 @@ else if (mx < LIGHTING_SOFT_THRESHOLD) . = 0 // 0 means soft lighting. - cache_r = lum_r * . || LIGHTING_SOFT_THRESHOLD - cache_g = lum_g * . || LIGHTING_SOFT_THRESHOLD - cache_b = lum_b * . || LIGHTING_SOFT_THRESHOLD + cache_r = round(lum_r * ., LIGHTING_ROUND_VALUE) || LIGHTING_SOFT_THRESHOLD + cache_g = round(lum_g * ., LIGHTING_ROUND_VALUE) || LIGHTING_SOFT_THRESHOLD + cache_b = round(lum_b * ., LIGHTING_ROUND_VALUE) || LIGHTING_SOFT_THRESHOLD #else - cache_r = lum_r * . - cache_g = lum_g * . - cache_b = lum_b * . + cache_r = round(lum_r * ., LIGHTING_ROUND_VALUE) + cache_g = round(lum_g * ., LIGHTING_ROUND_VALUE) + cache_b = round(lum_b * ., LIGHTING_ROUND_VALUE) #endif - cache_mx = mx + cache_mx = round(mx, LIGHTING_ROUND_VALUE) for (var/TT in masters) var/turf/T = TT if (T.lighting_object) if (!T.lighting_object.needs_update) T.lighting_object.needs_update = TRUE - lighting_update_objects += T.lighting_object + GLOB.lighting_update_objects += T.lighting_object /datum/lighting_corner/dummy/New() @@ -139,4 +138,4 @@ stack_trace("Ok, Look, TG, I need you to find whatever fucker decided to call qdel on a fucking lighting corner, then tell him very nicely and politely that he is 100% retarded and needs his head checked. Thanks. Send them my regards by the way.") // Yeah fuck you anyways. - return QDEL_HINT_LETMELIVE + return QDEL_HINT_LETMELIVE \ No newline at end of file diff --git a/code/modules/lighting/lighting_object.dm b/code/modules/lighting/lighting_object.dm index 4dcdd09597..369129fc57 100644 --- a/code/modules/lighting/lighting_object.dm +++ b/code/modules/lighting/lighting_object.dm @@ -1,4 +1,4 @@ -/var/list/all_lighting_objects = list() // Global list of lighting objects. +GLOBAL_LIST_EMPTY(all_lighting_objects) // Global list of lighting objects. /atom/movable/lighting_object name = "" @@ -19,7 +19,7 @@ /atom/movable/lighting_object/Initialize(mapload, var/no_update = FALSE) . = ..() verbs.Cut() - global.all_lighting_objects += src + GLOB.all_lighting_objects += src var/turf/T = loc // If this runtimes atleast we'll know what's creating overlays in things that aren't turfs. T.lighting_object = src @@ -35,8 +35,8 @@ /atom/movable/lighting_object/Destroy(var/force) if (force) - global.all_lighting_objects -= src - global.lighting_update_objects -= src + GLOB.all_lighting_objects -= src + GLOB.lighting_update_objects -= src var/turf/T = loc if (istype(T)) @@ -68,6 +68,7 @@ // Including with these comments. // See LIGHTING_CORNER_DIAGONAL in lighting_corner.dm for why these values are what they are. + var/static/datum/lighting_corner/dummy/dummy_lighting_corner = new var/datum/lighting_corner/cr = T.corners[3] || dummy_lighting_corner var/datum/lighting_corner/cg = T.corners[2] || dummy_lighting_corner var/datum/lighting_corner/cb = T.corners[4] || dummy_lighting_corner @@ -75,21 +76,49 @@ var/max = max(cr.cache_mx, cg.cache_mx, cb.cache_mx, ca.cache_mx) - color = list( - cr.cache_r, cr.cache_g, cr.cache_b, 0, - cg.cache_r, cg.cache_g, cg.cache_b, 0, - cb.cache_r, cb.cache_g, cb.cache_b, 0, - ca.cache_r, ca.cache_g, ca.cache_b, 0, - 0, 0, 0, 1 - ) + var/rr = cr.cache_r + var/rg = cr.cache_g + var/rb = cr.cache_b + + var/gr = cg.cache_r + var/gg = cg.cache_g + var/gb = cg.cache_b + + var/br = cb.cache_r + var/bg = cb.cache_g + var/bb = cb.cache_b + + var/ar = ca.cache_r + var/ag = ca.cache_g + var/ab = ca.cache_b + #if LIGHTING_SOFT_THRESHOLD != 0 - luminosity = max > LIGHTING_SOFT_THRESHOLD + var/set_luminosity = max > LIGHTING_SOFT_THRESHOLD #else - // Because of floating points™️, it won't even be a flat 0. + // Because of floating points�?, it won't even be a flat 0. // This number is mostly arbitrary. - luminosity = max > 1e-6 + var/set_luminosity = max > 1e-6 #endif + if((rr & gr & br & ar) && (rg + gg + bg + ag + rb + gb + bb + ab == 8)) + //anything that passes the first case is very likely to pass the second, and addition is a little faster in this case + icon_state = "transparent" + color = null + else if(!set_luminosity) + icon_state = "dark" + color = null + else + icon_state = null + color = list( + rr, rg, rb, 00, + gr, gg, gb, 00, + br, bg, bb, 00, + ar, ag, ab, 00, + 00, 00, 00, 01 + ) + + luminosity = set_luminosity + // Variety of overrides so the overlays don't get affected by weird things. /atom/movable/lighting_object/ex_act(severity) @@ -111,4 +140,4 @@ // Override here to prevent things accidentally moving around overlays. /atom/movable/lighting_object/forceMove(atom/destination, var/no_tp=FALSE, var/harderforce = FALSE) if(harderforce) - . = ..() + . = ..() \ No newline at end of file diff --git a/code/modules/lighting/lighting_source.dm b/code/modules/lighting/lighting_source.dm index 5688866c2d..99b437fd33 100644 --- a/code/modules/lighting/lighting_source.dm +++ b/code/modules/lighting/lighting_source.dm @@ -81,7 +81,7 @@ #define EFFECT_UPDATE \ if (!needs_update) \ { \ - lighting_update_lights += src; \ + GLOB.lighting_update_lights += src; \ needs_update = TRUE; \ } diff --git a/code/modules/lighting/lighting_turf.dm b/code/modules/lighting/lighting_turf.dm index 4d7d725e24..65b1ec2615 100644 --- a/code/modules/lighting/lighting_turf.dm +++ b/code/modules/lighting/lighting_turf.dm @@ -127,11 +127,11 @@ if (corners[i]) // Already have a corner on this direction. continue - corners[i] = new/datum/lighting_corner(src, LIGHTING_CORNER_DIAGONAL[i]) + corners[i] = new/datum/lighting_corner(src, GLOB.LIGHTING_CORNER_DIAGONAL[i]) /turf/ChangeTurf(path) - if (!path || (!use_preloader && path == type) || !SSlighting.initialized) + if (!path || (!GLOB.use_preloader && path == type) || !SSlighting.initialized) return ..() var/old_opacity = opacity diff --git a/code/modules/mapping/dmm_suite.dm b/code/modules/mapping/dmm_suite.dm index e8e9f1dece..c4ceec33ee 100644 --- a/code/modules/mapping/dmm_suite.dm +++ b/code/modules/mapping/dmm_suite.dm @@ -4,6 +4,8 @@ dmm_suite{ dmm_suite version 1.0 Released January 30th, 2011. + NOTE: Map saving functionality removed + defines the object /dmm_suite - Provides the proc load_map() - Loads the specified map file onto the specified z-level. @@ -58,17 +60,4 @@ dmm_suite{ // measureOnly: When true, no changes will be made to the world (Optional). // no_changeturf: When true, turf/AfterChange won't be called on loaded turfs } - verb/write_map(var/turf/t1 as turf, var/turf/t2 as turf, var/flags as num){ - // t1: A turf representing one corner of a three dimensional grid (Required). - // t2: Another turf representing the other corner of the same grid (Required). - // flags: Any, or a combination, of several bit flags (Optional, see documentation). - } - - // save_map is included as a legacy proc. Use write_map instead. - verb/save_map(var/turf/t1 as turf, var/turf/t2 as turf, var/map_name as text, var/flags as num){ - // t1: A turf representing one corner of a three dimensional grid (Required). - // t2: Another turf representing the other corner of the same grid (Required). - // map_name: A valid name for the map to be saved, such as "castle" (Required). - // flags: Any, or a combination, of several bit flags (Optional, see documentation). - } - } \ No newline at end of file +} \ No newline at end of file diff --git a/code/modules/mapping/map_template.dm b/code/modules/mapping/map_template.dm index 7f355b3b02..ca576d24e6 100644 --- a/code/modules/mapping/map_template.dm +++ b/code/modules/mapping/map_template.dm @@ -39,7 +39,7 @@ atmos_machines += A SSatoms.InitializeAtoms(atoms) - SSmachine.setup_template_powernets(cables) + SSmachines.setup_template_powernets(cables) SSair.setup_template_machinery(atmos_machines) /datum/map_template/proc/load_new_z() diff --git a/code/modules/mapping/reader.dm b/code/modules/mapping/reader.dm index 31b6fbb098..4073a97e9e 100644 --- a/code/modules/mapping/reader.dm +++ b/code/modules/mapping/reader.dm @@ -3,8 +3,8 @@ ////////////////////////////////////////////////////////////// //global datum that will preload variables on atoms instanciation -var/global/use_preloader = FALSE -var/global/dmm_suite/preloader/_preloader = new +GLOBAL_VAR_INIT(use_preloader, FALSE) +GLOBAL_DATUM_INIT(_preloader, /dmm_suite/preloader, new) /dmm_suite // /"([a-zA-Z]+)" = \(((?:.|\n)*?)\)\n(?!\t)|\((\d+),(\d+),(\d+)\) = \{"([a-zA-Z\n]*)"\}/g @@ -275,14 +275,19 @@ var/global/dmm_suite/preloader/_preloader = new index = members.len if(members[index] != /area/template_noop) var/atom/instance - _preloader.setup(members_attributes[index])//preloader for assigning set variables on atom creation - - instance = locate(members[index]) + GLOB._preloader.setup(members_attributes[index])//preloader for assigning set variables on atom creation + var/atype = members[index] + for(var/area/A in world) + if(A.type == atype) + instance = A + break + if(!instance) + instance = new atype(null) if(crds) instance.contents.Add(crds) - if(use_preloader && instance) - _preloader.load(instance) + if(GLOB.use_preloader && instance) + GLOB._preloader.load(instance) //then instance the /turf and, if multiple tiles are presents, simulates the DMM underlays piling effect @@ -318,7 +323,7 @@ var/global/dmm_suite/preloader/_preloader = new //Instance an atom at (x,y,z) and gives it the variables in attributes /dmm_suite/proc/instance_atom(path,list/attributes, turf/crds, no_changeturf) - _preloader.setup(attributes, path) + GLOB._preloader.setup(attributes, path) if(crds) if(!no_changeturf && ispath(path, /turf)) @@ -326,11 +331,11 @@ var/global/dmm_suite/preloader/_preloader = new else . = new path (crds)//first preloader pass - if(use_preloader && .)//second preloader pass, for those atoms that don't ..() in New() - _preloader.load(.) + if(GLOB.use_preloader && .)//second preloader pass, for those atoms that don't ..() in New() + GLOB._preloader.load(.) //custom CHECK_TICK here because we don't want things created while we're sleeping to not initialize - if(world.tick_usage > CURRENT_TICKLIMIT) + if(TICK_CHECK) SSatoms.map_loader_stop() stoplag() SSatoms.map_loader_begin() @@ -346,7 +351,7 @@ var/global/dmm_suite/preloader/_preloader = new //find the position of the next delimiter,skipping whatever is comprised between opening_escape and closing_escape //returns 0 if reached the last delimiter -/dmm_suite/proc/find_next_delimiter_position(text as text,initial_position as num, delimiter=",",opening_escape=quote,closing_escape=quote) +/dmm_suite/proc/find_next_delimiter_position(text as text,initial_position as num, delimiter=",",opening_escape="\"",closing_escape="\"") var/position = initial_position var/next_delimiter = findtext(text,delimiter,position,0) var/next_opening = findtext(text,opening_escape,position,0) @@ -382,8 +387,8 @@ var/global/dmm_suite/preloader/_preloader = new var/trim_right = trim_text(copytext(text,equal_position+1,position))//the content of the variable //Check for string - if(findtext(trim_right,quote,1,2)) - trim_right = copytext(trim_right,2,findtext(trim_right,quote,3,0)) + if(findtext(trim_right,"\"",1,2)) + trim_right = copytext(trim_right,2,findtext(trim_right,"\"",3,0)) //Check for number else if(isnum(text2num(trim_right))) @@ -429,7 +434,7 @@ var/global/dmm_suite/preloader/_preloader = new /dmm_suite/preloader/proc/setup(list/the_attributes, path) if(the_attributes.len) - use_preloader = TRUE + GLOB.use_preloader = TRUE attributes = the_attributes target_path = path @@ -439,7 +444,7 @@ var/global/dmm_suite/preloader/_preloader = new if(islist(value)) value = deepCopyList(value) what.vars[attribute] = value - use_preloader = FALSE + GLOB.use_preloader = FALSE /area/template_noop name = "Area Passthrough" diff --git a/code/modules/mapping/ruins.dm b/code/modules/mapping/ruins.dm index 07aec97b5a..81c0a7e54d 100644 --- a/code/modules/mapping/ruins.dm +++ b/code/modules/mapping/ruins.dm @@ -32,8 +32,8 @@ while(sanity > 0) sanity-- - var/width_border = TRANSITIONEDGE + round(ruin.width / 2) - var/height_border = TRANSITIONEDGE + round(ruin.height / 2) + var/width_border = TRANSITIONEDGE + SPACERUIN_MAP_EDGE_PAD + round(ruin.width / 2) + var/height_border = TRANSITIONEDGE + SPACERUIN_MAP_EDGE_PAD + round(ruin.height / 2) var/z_level = pick(z_levels) var/turf/T = locate(rand(width_border, world.maxx - width_border), rand(height_border, world.maxy - height_border), z_level) var/valid = TRUE diff --git a/code/modules/mapping/swapmaps.dm b/code/modules/mapping/swapmaps.dm deleted file mode 100644 index 64fc383e00..0000000000 --- a/code/modules/mapping/swapmaps.dm +++ /dev/null @@ -1,681 +0,0 @@ - - -/* - SwapMaps library by Lummox JR - developed for digitalBYOND - http://www.digitalbyond.org - - Version 2.1 - - The purpose of this library is to make it easy for authors to swap maps - in and out of their game using savefiles. Swapped-out maps can be - transferred between worlds for an MMORPG, sent to the client, etc. - This is facilitated by the use of a special datum and a global list. - - Uses of swapmaps: - - - Temporary battle arenas - - House interiors - - Individual custom player houses - - Virtually unlimited terrain - - Sharing maps between servers running different instances of the same - game - - Loading and saving pieces of maps for reusable room templates - */ - -/* - User Interface: - - VARS: - - swapmaps_iconcache - An associative list of icon files with names, like - 'player.dmi' = "player" - swapmaps_mode - This must be set at runtime, like in world/New(). - - SWAPMAPS_SAV 0 (default) - Uses .sav files for raw /savefile output. - SWAPMAPS_TEXT 1 - Uses .txt files via ExportText() and ImportText(). These maps - are easily editable and appear to take up less space in the - current version of BYOND. - - PROCS: - - SwapMaps_Find(id) - Find a map by its id - SwapMaps_Load(id) - Load a map by its id - SwapMaps_Save(id) - Save a map by its id (calls swapmap.Save()) - SwapMaps_Unload(id) - Save and unload a map by its id (calls swapmap.Unload()) - SwapMaps_Save_All() - Save all maps - SwapMaps_DeleteFile(id) - Delete a map file - SwapMaps_CreateFromTemplate(id) - Create a new map by loading another map to use as a template. - This map has id==src and will not be saved. To make it savable, - change id with swapmap.SetID(newid). - SwapMaps_LoadChunk(id,turf/locorner) - Load a swapmap as a "chunk", at a specific place. A new datum is - created but it's not added to the list of maps to save or unload. - The new datum can be safely deleted without affecting the turfs - it loaded. The purpose of this is to load a map file onto part of - another swapmap or an existing part of the world. - locorner is the corner turf with the lowest x,y,z values. - SwapMaps_SaveChunk(id,turf/corner1,turf/corner2) - Save a piece of the world as a "chunk". A new datum is created - for the chunk, but it can be deleted without destroying any turfs. - The chunk file can be reloaded as a swapmap all its own, or loaded - via SwapMaps_LoadChunk() to become part of another map. - SwapMaps_GetSize(id) - Return a list corresponding to the x,y,z sizes of a map file, - without loading the map. - Returns null if the map is not found. - SwapMaps_AddIconToCache(name,icon) - Cache an icon file by name for space-saving storage - - swapmap.New(id,x,y,z) - Create a new map; specify id, width (x), height (y), and - depth (z) - Default size is world.maxx,world.maxy,1 - swapmap.New(id,turf1,turf2) - Create a new map; specify id and 2 corners - This becomes a /swapmap for one of the compiled-in maps, for - easy saving. - swapmap.New() - Create a new map datum, but does not allocate space or assign an - ID (used for loading). - swapmap.Del() - Deletes a map but does not save - swapmap.Save() - Saves to map_[id].sav - Maps with id==src are not saved. - swapmap.Unload() - Saves the map and then deletes it - Maps with id==src are not saved. - swapmap.SetID(id) - Change the map's id and make changes to the lookup list - swapmap.AllTurfs(z) - Returns a block of turfs encompassing the entire map, or on just - one z-level - z is in world coordinates; it is optional - swapmap.Contains(turf/T) - Returns nonzero if T is inside the map's boundaries. - Also works for objs and mobs, but the proc is not area-safe. - swapmap.InUse() - Returns nonzero if a mob with a key is within the map's - boundaries. - swapmap.LoCorner(z=z1) - Returns locate(x1,y1,z), where z=z1 if none is specified. - swapmap.HiCorner(z=z2) - Returns locate(x2,y2,z), where z=z2 if none is specified. - swapmap.BuildFilledRectangle(turf/corner1,turf/corner2,item) - Builds a filled rectangle of item from one corner turf to the - other, on multiple z-levels if necessary. The corners may be - specified in any order. - item is a type path like /turf/closed/wall or /obj/barrel{full=1}. - swapmap.BuildRectangle(turf/corner1,turf/corner2,item) - Builds an unfilled rectangle of item from one corner turf to - the other, on multiple z-levels if necessary. - swapmap.BuildInTurfs(list/turfs,item) - Builds item on all of the turfs listed. The list need not - contain only turfs, or even only atoms. - */ - -swapmap - var/id // a string identifying this map uniquely - var/x1 // minimum x,y,z coords - var/y1 - var/z1 - var/x2 // maximum x,y,z coords (also used as width,height,depth until positioned) - var/y2 - var/z2 - var/tmp/locked // don't move anyone to this map; it's saving or loading - var/tmp/mode // save as text-mode - var/ischunk // tells the load routine to load to the specified location - - New(_id,x,y,z) - if(isnull(_id)) return - id=_id - mode=swapmaps_mode - if(isturf(x) && isturf(y)) - /* - Special format: Defines a map as an existing set of turfs; - this is useful for saving a compiled map in swapmap format. - Because this is a compiled-in map, its turfs are not deleted - when the datum is deleted. - */ - x1=min(x:x,y:x);x2=max(x:x,y:x) - y1=min(x:y,y:y);y2=max(x:y,y:y) - z1=min(x:z,y:z);z2=max(x:z,y:z) - InitializeSwapMaps() - if(z2>swapmaps_compiled_maxz ||\ - y2>swapmaps_compiled_maxy ||\ - x2>swapmaps_compiled_maxx) - qdel(src) - return - x2=x?(x):world.maxx - y2=y?(y):world.maxy - z2=z?(z):1 - AllocateSwapMap() - - Destroy() - // a temporary datum for a chunk can be deleted outright - // for others, some cleanup is necessary - if(!ischunk) - swapmaps_loaded-=src - swapmaps_byname-=id - if(z2>swapmaps_compiled_maxz ||\ - y2>swapmaps_compiled_maxy ||\ - x2>swapmaps_compiled_maxx) - var/list/areas=new - for(var/atom/A in block(locate(x1,y1,z1),locate(x2,y2,z2))) - for(var/obj/O in A) qdel(O) - for(var/mob/M in A) - if(!M.key) qdel(M) - else M.loc=null - areas[A.loc]=null - qdel(A) - // delete areas that belong only to this map - for(var/area/a in areas) - if(a && !a.contents.len) qdel(a) - if(x2>=world.maxx || y2>=world.maxy || z2>=world.maxz) CutXYZ() - qdel(areas) - ..() - return QDEL_HINT_HARDDEL_NOW - - /* - Savefile format: - map - id - x // size, not coords - y - z - areas // list of areas, not including default - [each z; 1 to depth] - [each y; 1 to height] - [each x; 1 to width] - type // of turf - AREA // if non-default; saved as a number (index into areas list) - vars // all other changed vars - */ - Write(savefile/S) - var/x - var/y - var/z - var/n - var/list/areas - var/area/defarea=locate(world.area) - if(!defarea) defarea=new world.area - areas=list() - for(var/turf/T in block(locate(x1,y1,z1),locate(x2,y2,z2))) - areas[T.loc]=null - for(n in areas) // quickly eliminate associations for smaller storage - areas-=n - areas+=n - areas-=defarea - InitializeSwapMaps() - locked=1 - S["id"] << id - S["z"] << z2-z1+1 - S["y"] << y2-y1+1 - S["x"] << x2-x1+1 - S["areas"] << areas - for(n in 1 to areas.len) areas[areas[n]]=n - var/oldcd=S.cd - for(z in z1 to z2) - S.cd="[z-z1+1]" - for(y in y1 to y2) - S.cd="[y-y1+1]" - for(x in x1 to x2) - S.cd="[x-x1+1]" - var/turf/T=locate(x,y,z) - S["type"] << T.type - if(T.loc!=defarea) S["AREA"] << areas[T.loc] - T.Write(S) - S.cd=".." - S.cd=".." - sleep() - S.cd=oldcd - locked=0 - qdel(areas) - - Read(savefile/S,_id,turf/locorner) - var/x - var/y - var/z - var/n - var/list/areas - var/area/defarea=locate(world.area) - id=_id - if(locorner) - ischunk=1 - x1=locorner.x - y1=locorner.y - z1=locorner.z - if(!defarea) defarea=new world.area - if(!_id) - S["id"] >> id - else - var/dummy - S["id"] >> dummy - S["z"] >> z2 // these are depth, - S["y"] >> y2 // height, - S["x"] >> x2 // width - S["areas"] >> areas - locked=1 - AllocateSwapMap() // adjust x1,y1,z1 - x2,y2,z2 coords - var/oldcd=S.cd - for(z in z1 to z2) - S.cd="[z-z1+1]" - for(y in y1 to y2) - S.cd="[y-y1+1]" - for(x in x1 to x2) - S.cd="[x-x1+1]" - var/tp - S["type"]>>tp - var/turf/T=locate(x,y,z) - T.loc.contents-=T - T=new tp(locate(x,y,z)) - if("AREA" in S.dir) - S["AREA"]>>n - var/area/A=areas[n] - A.contents+=T - else defarea.contents+=T - // clear the turf - for(var/obj/O in T) qdel(O) - for(var/mob/M in T) - if(!M.key) qdel(M) - else M.loc=null - // finish the read - T.Read(S) - S.cd=".." - S.cd=".." - sleep() - S.cd=oldcd - locked=0 - qdel(areas) - - /* - Find an empty block on the world map in which to load this map. - If no space is found, increase world.maxz as necessary. (If the - map is greater in x,y size than the current world, expand - world.maxx and world.maxy too.) - - Ignore certain operations if loading a map as a chunk. Use the - x1,y1,z1 position for it, and *don't* count it as a loaded map. - */ - proc/AllocateSwapMap() - InitializeSwapMaps() - world.maxx=max(x2,world.maxx) // stretch x/y if necessary - world.maxy=max(y2,world.maxy) - if(!ischunk) - if(world.maxz<=swapmaps_compiled_maxz) - z1=swapmaps_compiled_maxz+1 - x1=1;y1=1 - else - var/list/l=ConsiderRegion(1,1,world.maxx,world.maxy,swapmaps_compiled_maxz+1) - x1=l[1] - y1=l[2] - z1=l[3] - qdel(l) - x2+=x1-1 - y2+=y1-1 - z2+=z1-1 - world.maxz=max(z2,world.maxz) // stretch z if necessary - if(!ischunk) - swapmaps_loaded[src]=null - swapmaps_byname[id]=src - - proc/ConsiderRegion(X1,Y1,X2,Y2,Z1,Z2) - while(1) - var/nextz=0 - var/swapmap/M - for(M in swapmaps_loaded) - if(M.z2Z2) || M.z1>=Z1+z2 ||\ - M.x1>X2 || M.x2=X1+x2 ||\ - M.y1>Y2 || M.y2=Y1+y2) continue - // look for sub-regions with a defined ceiling - var/nz2=Z2?(Z2):Z1+z2-1+M.z2-M.z1 - if(M.x1>=X1+x2) - .=ConsiderRegion(X1,Y1,M.x1-1,Y2,Z1,nz2) - if(.) return - else if(M.x2<=X2-x2) - .=ConsiderRegion(M.x2+1,Y1,X2,Y2,Z1,nz2) - if(.) return - if(M.y1>=Y1+y2) - .=ConsiderRegion(X1,Y1,X2,M.y1-1,Z1,nz2) - if(.) return - else if(M.y2<=Y2-y2) - .=ConsiderRegion(X1,M.y2+1,X2,Y2,Z1,nz2) - if(.) return - nextz=nextz?min(nextz,M.z2+1):(M.z2+1) - if(!M) - /* If nextz is not 0, then at some point there was an overlap that - could not be resolved by using an area to the side */ - if(nextz) Z1=nextz - if(!nextz || (Z2 && Z2-Z1+1=z2)?list(X1,Y1,Z1):null - X1=1;X2=world.maxx - Y1=1;Y2=world.maxy - - proc/CutXYZ() - var/mx=swapmaps_compiled_maxx - var/my=swapmaps_compiled_maxy - var/mz=swapmaps_compiled_maxz - for(var/swapmap/M in swapmaps_loaded) // may not include src - mx=max(mx,M.x2) - my=max(my,M.y2) - mz=max(mz,M.z2) - world.maxx=mx - world.maxy=my - world.maxz=mz - - // save and delete - proc/Unload() - Save() - qdel(src) - - proc/Save() - if(id==src) return 0 - var/savefile/S=mode?(new):new("map_[id].sav") - S << src - while(locked) sleep(1) - if(mode) - fdel("map_[id].txt") - S.ExportText("/","map_[id].txt") - return 1 - - // this will not delete existing savefiles for this map - proc/SetID(newid) - swapmaps_byname-=id - id=newid - swapmaps_byname[id]=src - - proc/AllTurfs(z) - if(isnum(z) && (zz2)) return null - return block(LoCorner(z),HiCorner(z)) - - // this could be safely called for an obj or mob as well, but - // probably not an area - proc/Contains(turf/T) - return (T && T.x>=x1 && T.x<=x2\ - && T.y>=y1 && T.y<=y2\ - && T.z>=z1 && T.z<=z2) - - proc/InUse() - for(var/turf/T in AllTurfs()) - for(var/mob/M in T) if(M.key) return 1 - - proc/LoCorner(z=z1) - return locate(x1,y1,z) - proc/HiCorner(z=z2) - return locate(x2,y2,z) - - /* - Build procs: Take 2 turfs as corners, plus an item type. - An item may be like: - - /turf/closed/wall - /obj/fence{icon_state="iron"} - */ - proc/BuildFilledRectangle(turf/T1,turf/T2,item) - if(!Contains(T1) || !Contains(T2)) return - var/turf/T=T1 - // pick new corners in a block()-friendly form - T1=locate(min(T1.x,T2.x),min(T1.y,T2.y),min(T1.z,T2.z)) - T2=locate(max(T.x,T2.x),max(T.y,T2.y),max(T.z,T2.z)) - for(T in block(T1,T2)) new item(T) - - proc/BuildRectangle(turf/T1,turf/T2,item) - if(!Contains(T1) || !Contains(T2)) return - var/turf/T=T1 - // pick new corners in a block()-friendly form - T1=locate(min(T1.x,T2.x),min(T1.y,T2.y),min(T1.z,T2.z)) - T2=locate(max(T.x,T2.x),max(T.y,T2.y),max(T.z,T2.z)) - if(T2.x-T1.x<2 || T2.y-T1.y<2) BuildFilledRectangle(T1,T2,item) - else - //for(T in block(T1,T2)-block(locate(T1.x+1,T1.y+1,T1.z),locate(T2.x-1,T2.y-1,T2.z))) - for(T in block(T1,locate(T2.x,T1.y,T2.z))) new item(T) - for(T in block(locate(T1.x,T2.y,T1.z),T2)) new item(T) - for(T in block(locate(T1.x,T1.y+1,T1.z),locate(T1.x,T2.y-1,T2.z))) new item(T) - for(T in block(locate(T2.x,T1.y+1,T1.z),locate(T2.x,T2.y-1,T2.z))) new item(T) - - /* - Supplementary build proc: Takes a list of turfs, plus an item - type. Actually the list doesn't have to be just turfs. - */ - proc/BuildInTurfs(list/turfs,item) - for(var/T in turfs) new item(T) - -atom - Write(savefile/S) - for(var/V in vars-"x"-"y"-"z"-"contents"-"icon"-"overlays"-"underlays") - if(issaved(vars[V])) - if(vars[V]!=initial(vars[V])) S[V]<>ic - if(istext(ic)) icon=swapmaps_iconcache[ic] - if(l && contents!=l) - contents+=l - qdel(l) - - -// set this up (at runtime) as follows: -// list(\ -// 'player.dmi'="player",\ -// 'monster.dmi'="monster",\ -// ... -// 'item.dmi'="item") -var/list/swapmaps_iconcache - -// preferred mode; sav or text -var/const/SWAPMAPS_SAV=0 -var/const/SWAPMAPS_TEXT=1 -var/swapmaps_mode=SWAPMAPS_SAV - -var/swapmaps_compiled_maxx -var/swapmaps_compiled_maxy -var/swapmaps_compiled_maxz -var/swapmaps_initialized -var/swapmaps_loaded -var/swapmaps_byname - -/proc/InitializeSwapMaps() - if(swapmaps_initialized) return - swapmaps_initialized=1 - swapmaps_compiled_maxx=world.maxx - swapmaps_compiled_maxy=world.maxy - swapmaps_compiled_maxz=world.maxz - swapmaps_loaded=list() - swapmaps_byname=list() - if(swapmaps_iconcache) - for(var/V in swapmaps_iconcache) - // reverse-associate everything - // so you can look up an icon file by name or vice-versa - swapmaps_iconcache[swapmaps_iconcache[V]]=V - -/proc/SwapMaps_AddIconToCache(name,icon) - if(!swapmaps_iconcache) swapmaps_iconcache=list() - swapmaps_iconcache[name]=icon - swapmaps_iconcache[icon]=name - -/proc/SwapMaps_Find(id) - InitializeSwapMaps() - return swapmaps_byname[id] - -/proc/SwapMaps_Load(id) - InitializeSwapMaps() - var/swapmap/M=swapmaps_byname[id] - if(!M) - var/savefile/S - var/text=0 - if(swapmaps_mode==SWAPMAPS_TEXT && fexists("map_[id].txt")) - text=1 - else if(fexists("map_[id].sav")) - S=new("map_[id].sav") - else if(swapmaps_mode!=SWAPMAPS_TEXT && fexists("map_[id].txt")) - text=1 - else return // no file found - if(text) - S=new - S.ImportText("/",file("map_[id].txt")) - S >> M - while(M.locked) sleep(1) - M.mode=text - return M - -/proc/SwapMaps_Save(id) - InitializeSwapMaps() - var/swapmap/M=swapmaps_byname[id] - if(M) M.Save() - return M - -/proc/SwapMaps_Save_All() - InitializeSwapMaps() - for(var/swapmap/M in swapmaps_loaded) - if(M) M.Save() - -/proc/SwapMaps_Unload(id) - InitializeSwapMaps() - var/swapmap/M=swapmaps_byname[id] - if(!M) return // return silently from an error - M.Unload() - return 1 - -/proc/SwapMaps_DeleteFile(id) - fdel("map_[id].sav") - fdel("map_[id].txt") - -/proc/SwapMaps_CreateFromTemplate(template_id) - var/swapmap/M=new - var/savefile/S - var/text=0 - if(swapmaps_mode==SWAPMAPS_TEXT && fexists("map_[template_id].txt")) - text=1 - else if(fexists("map_[template_id].sav")) - S=new("map_[template_id].sav") - else if(swapmaps_mode!=SWAPMAPS_TEXT && fexists("map_[template_id].txt")) - text=1 - else - log_world("SwapMaps error in SwapMaps_CreateFromTemplate(): map_[template_id] file not found.") - return - if(text) - S=new - S.ImportText("/",file("map_[template_id].txt")) - /* - This hacky workaround is needed because S >> M will create a brand new - M to fill with data. There's no way to control the Read() process - properly otherwise. The //.0 path should always match the map, however. - */ - S.cd="//.0" - M.Read(S,M) - M.mode=text - while(M.locked) sleep(1) - return M - -/proc/SwapMaps_LoadChunk(chunk_id,turf/locorner) - var/swapmap/M=new - var/savefile/S - var/text=0 - if(swapmaps_mode==SWAPMAPS_TEXT && fexists("map_[chunk_id].txt")) - text=1 - else if(fexists("map_[chunk_id].sav")) - S=new("map_[chunk_id].sav") - else if(swapmaps_mode!=SWAPMAPS_TEXT && fexists("map_[chunk_id].txt")) - text=1 - else - log_world("SwapMaps error in SwapMaps_LoadChunk(): map_[chunk_id] file not found.") - return - if(text) - S=new - S.ImportText("/",file("map_[chunk_id].txt")) - /* - This hacky workaround is needed because S >> M will create a brand new - M to fill with data. There's no way to control the Read() process - properly otherwise. The //.0 path should always match the map, however. - */ - S.cd="//.0" - M.Read(S,M,locorner) - while(M.locked) sleep(1) - qdel(M) - return 1 - -/proc/SwapMaps_SaveChunk(chunk_id,turf/corner1,turf/corner2) - if(!corner1 || !corner2) - log_world("SwapMaps error in SwapMaps_SaveChunk():") - if(!corner1) - log_world(" corner1 turf is null") - if(!corner2) - log_world(" corner2 turf is null") - return - var/swapmap/M=new - M.id=chunk_id - M.ischunk=1 // this is a chunk - M.x1=min(corner1.x,corner2.x) - M.y1=min(corner1.y,corner2.y) - M.z1=min(corner1.z,corner2.z) - M.x2=max(corner1.x,corner2.x) - M.y2=max(corner1.y,corner2.y) - M.z2=max(corner1.z,corner2.z) - M.mode=swapmaps_mode - M.Save() - while(M.locked) sleep(1) - qdel(M) - return 1 - -/proc/SwapMaps_GetSize(id) - var/savefile/S - var/text=0 - if(swapmaps_mode==SWAPMAPS_TEXT && fexists("map_[id].txt")) - text=1 - else if(fexists("map_[id].sav")) - S=new("map_[id].sav") - else if(swapmaps_mode!=SWAPMAPS_TEXT && fexists("map_[id].txt")) - text=1 - else - log_world("SwapMaps error in SwapMaps_GetSize(): map_[id] file not found.") - return - if(text) - S=new - S.ImportText("/",file("map_[id].txt")) - /* - The //.0 path should always be the map. There's no other way to - read this data. - */ - S.cd="//.0" - var/x - var/y - var/z - S["x"] >> x - S["y"] >> y - S["z"] >> z - return list(x,y,z) diff --git a/code/modules/mapping/writer.dm b/code/modules/mapping/writer.dm deleted file mode 100644 index 208d0935a3..0000000000 --- a/code/modules/mapping/writer.dm +++ /dev/null @@ -1,174 +0,0 @@ -#define DMM_IGNORE_AREAS 1 -#define DMM_IGNORE_TURFS 2 -#define DMM_IGNORE_OBJS 4 -#define DMM_IGNORE_NPCS 8 -#define DMM_IGNORE_PLAYERS 16 -#define DMM_IGNORE_MOBS 24 -dmm_suite{ - var{ - quote = "\"" - list/letter_digits = list( - "a","b","c","d","e", - "f","g","h","i","j", - "k","l","m","n","o", - "p","q","r","s","t", - "u","v","w","x","y", - "z", - "A","B","C","D","E", - "F","G","H","I","J", - "K","L","M","N","O", - "P","Q","R","S","T", - "U","V","W","X","Y", - "Z" - ) - } - save_map(var/turf/t1 as turf, var/turf/t2 as turf, var/map_name as text, var/flags as num){ - //Check for illegal characters in file name... in a cheap way. - if(!((ckeyEx(map_name)==map_name) && ckeyEx(map_name))){ - CRASH("Invalid text supplied to proc save_map, invalid characters or empty string.") - } - //Check for valid turfs. - if(!isturf(t1) || !isturf(t2)){ - CRASH("Invalid arguments supplied to proc save_map, arguments were not turfs.") - } - var/file_text = write_map(t1,t2,flags) - if(fexists("[map_name].dmm")){ - fdel("[map_name].dmm") - } - var/saved_map = file("[map_name].dmm") - saved_map << file_text - return saved_map - } - write_map(var/turf/t1 as turf, var/turf/t2 as turf, var/flags as num){ - //Check for valid turfs. - if(!isturf(t1) || !isturf(t2)){ - CRASH("Invalid arguments supplied to proc write_map, arguments were not turfs.") - } - var/turf/nw = locate(min(t1.x,t2.x),max(t1.y,t2.y),min(t1.z,t2.z)) - var/turf/se = locate(max(t1.x,t2.x),min(t1.y,t2.y),max(t1.z,t2.z)) - var/list/templates[0] - var/template_buffer = {""} - var/dmm_text = {""} - for(var/pos_z in nw.z to se.z){ - for(var/pos_y in nw.y to se.y){ - for(var/pos_x in nw.x to se.x){ - var/turf/test_turf = locate(pos_x,pos_y,pos_z) - var/test_template = make_template(test_turf, flags) - var/template_number = templates.Find(test_template) - if(!template_number){ - templates.Add(test_template) - template_number = templates.len - } - template_buffer += "[template_number]," - } - template_buffer += ";" - } - template_buffer += "." - } - var/key_length = round/*floor*/(log(letter_digits.len,templates.len-1)+1) - var/list/keys[templates.len] - for(var/key_pos in 1 to templates.len){ - keys[key_pos] = get_model_key(key_pos,key_length) - dmm_text += {""[keys[key_pos]]" = ([templates[key_pos]])\n"} - } - var/z_level = 0 - for(var/z_pos=1;TRUE;z_pos=findtext(template_buffer,".",z_pos)+1){ - if(z_pos>=length(template_buffer)){break} - if(z_level){dmm_text+={"\n"}} - dmm_text += {"\n(1,1,[++z_level]) = {"\n"} - var/z_block = copytext(template_buffer,z_pos,findtext(template_buffer,".",z_pos)) - for(var/y_pos=1;TRUE;y_pos=findtext(z_block,";",y_pos)+1){ - if(y_pos>=length(z_block)){break} - var/y_block = copytext(z_block,y_pos,findtext(z_block,";",y_pos)) - for(var/x_pos=1;TRUE;x_pos=findtext(y_block,",",x_pos)+1){ - if(x_pos>=length(y_block)){break} - var/x_block = copytext(y_block,x_pos,findtext(y_block,",",x_pos)) - var/key_number = text2num(x_block) - var/temp_key = keys[key_number] - dmm_text += temp_key - sleep(-1) - } - dmm_text += {"\n"} - sleep(-1) - } - dmm_text += {"\"}"} - sleep(-1) - } - return dmm_text - } - proc{ - make_template(var/turf/model as turf, var/flags as num){ - var/template = "" - var/obj_template = "" - var/mob_template = "" - var/turf_template = "" - if(!(flags & DMM_IGNORE_TURFS)){ - turf_template = "[model.type][check_attributes(model)]," - } else{ turf_template = "[world.turf],"} - var/area_template = "" - if(!(flags & DMM_IGNORE_OBJS)){ - for(var/obj/O in model.contents){ - obj_template += "[O.type][check_attributes(O)]," - } - } - for(var/mob/M in model.contents){ - if(M.client){ - if(!(flags & DMM_IGNORE_PLAYERS)){ - mob_template += "[M.type][check_attributes(M)]," - } - } - else{ - if(!(flags & DMM_IGNORE_NPCS)){ - mob_template += "[M.type][check_attributes(M)]," - } - } - } - if(!(flags & DMM_IGNORE_AREAS)){ - var/area/m_area = model.loc - area_template = "[m_area.type][check_attributes(m_area)]" - } else{ area_template = "[world.area]"} - template = "[obj_template][mob_template][turf_template][area_template]" - return template - } - check_attributes(var/atom/A){ - var/attributes_text = {"{"} - for(var/V in A.vars){ - sleep(-1) - if((!issaved(A.vars[V])) || (A.vars[V]==initial(A.vars[V]))){continue} - if(istext(A.vars[V])){ - attributes_text += {"[V] = "[A.vars[V]]""} - } - else if(isnum(A.vars[V])||ispath(A.vars[V])){ - attributes_text += {"[V] = [A.vars[V]]"} - } - else if(isicon(A.vars[V])||isfile(A.vars[V])){ - attributes_text += {"[V] = '[A.vars[V]]'"} - } - else{ - continue - } - if(attributes_text != {"{"}){ - attributes_text+={"; "} - } - } - if(attributes_text=={"{"}){ - return - } - if(copytext(attributes_text, length(attributes_text)-1, 0) == {"; "}){ - attributes_text = copytext(attributes_text, 1, length(attributes_text)-1) - } - attributes_text += {"}"} - return attributes_text - } - get_model_key(var/which as num, var/key_length as num){ - var/key = "" - var/working_digit = which-1 - for(var/digit_pos in key_length to 1 step -1){ - var/place_value = round/*floor*/(working_digit/(letter_digits.len**(digit_pos-1))) - working_digit-=place_value*(letter_digits.len**(digit_pos-1)) - key = "[key][letter_digits[place_value+1]]" - } - return key - } - } - } \ No newline at end of file diff --git a/code/modules/mentor/follow.dm b/code/modules/mentor/follow.dm index 8958cc5611..d744fe2643 100644 --- a/code/modules/mentor/follow.dm +++ b/code/modules/mentor/follow.dm @@ -1,4 +1,3 @@ -//var/following = null //Gross, but necessary as we loose all concept of who we're following otherwise /client/proc/mentor_follow(var/mob/living/M) if(!check_mentor()) return @@ -10,7 +9,7 @@ return if(!holder) - var/datum/mentors/mentor = mentor_datums[usr.client.ckey] + var/datum/mentors/mentor = GLOB.mentor_datums[usr.client.ckey] mentor.following = M /* else holder.following = M*/ @@ -18,7 +17,7 @@ usr.reset_perspective(M) src.verbs += /client/proc/mentor_unfollow - to_chat(admins, "MENTOR: [key_name(usr)] is now following [key_name(M)]") + to_chat(GLOB.admins, "MENTOR: [key_name(usr)] is now following [key_name(M)]") to_chat(usr, "You are now following [M]. Click the \"Stop Following\" button in the Mentor tab to stop.") log_mentor("[key_name(usr)] began following [key_name(M)]") @@ -37,13 +36,13 @@ var/following = null if(!holder) - var/datum/mentors/mentor = mentor_datums[usr.client.ckey] + var/datum/mentors/mentor = GLOB.mentor_datums[usr.client.ckey] following = mentor.following /*else following = holder.following*/ - to_chat(admins, "MENTOR: [key_name(usr)] is no longer following [key_name(following)]") + to_chat(GLOB.admins, "MENTOR: [key_name(usr)] is no longer following [key_name(following)]") to_chat(usr, "You are no longer following [following].") log_mentor("[key_name(usr)] stopped following [key_name(following)]") diff --git a/code/modules/mentor/holder2.dm b/code/modules/mentor/holder2.dm index acb34110e5..8cd6609505 100644 --- a/code/modules/mentor/holder2.dm +++ b/code/modules/mentor/holder2.dm @@ -1,4 +1,4 @@ -var/list/mentor_datums = list() +GLOBAL_LIST(mentor_datums) /datum/mentors var/client/owner = null @@ -8,28 +8,28 @@ var/list/mentor_datums = list() if(!ckey) del(src) return - mentor_datums[ckey] = src + GLOB.mentor_datums[ckey] = src /datum/mentors/proc/associate(client/C) if(istype(C)) owner = C - mentors |= C + GLOB.mentors |= C /datum/mentors/proc/disassociate() if(owner) - mentors -= owner + GLOB.mentors -= owner owner = null /client/proc/dementor() - var/mentor = mentor_datums[ckey] - mentor_datums -= ckey + var/mentor = GLOB.mentor_datums[ckey] + GLOB.mentor_datums -= ckey qdel(mentor) return 1 /proc/check_mentor() if(usr && usr.client) - var/mentor = mentor_datums[usr.client.ckey] + var/mentor = GLOB.mentor_datums[usr.client.ckey] if(mentor || check_rights(R_ADMIN,0)) return 1 @@ -37,7 +37,7 @@ var/list/mentor_datums = list() /proc/check_mentor_other(var/client/C) if(C) - var/mentor = mentor_datums[C.ckey] + var/mentor = GLOB.mentor_datums[C.ckey] if(C.holder && C.holder.rank) if(C.holder.rank.rights & R_ADMIN) return 1 diff --git a/code/modules/mentor/mentor_ranks.dm b/code/modules/mentor/mentor_ranks.dm index 0fc937e4d5..1e132680d4 100644 --- a/code/modules/mentor/mentor_ranks.dm +++ b/code/modules/mentor/mentor_ranks.dm @@ -1,23 +1,23 @@ /proc/load_mentors() //clear the datums references - mentor_datums.Cut() - mentors.Cut() + GLOB.mentor_datums.Cut() + GLOB.mentors.Cut() if(!config.mentor_legacy_system) - if(!dbcon.IsConnected()) + if(!GLOB.dbcon.IsConnected()) world.log << "Failed to connect to database in load_mentors()." - diary << "Failed to connect to database in load_mentors()." + GLOB.diary << "Failed to connect to database in load_mentors()." config.mentor_legacy_system = 1 load_mentors() return - var/DBQuery/query = dbcon.NewQuery("SELECT ckey FROM [format_table_name("mentor")]") + var/DBQuery/query = GLOB.dbcon.NewQuery("SELECT ckey FROM [format_table_name("mentor")]") query.Execute() while(query.NextRow()) var/ckey = ckey(query.item[1]) var/datum/mentors/D = new(ckey) //create the mentor datum and store it for later use if(!D) continue //will occur if an invalid rank is provided - D.associate(directory[ckey]) //find the client for a ckey if they are connected and associate them with the new mentor datum + D.associate(GLOB.directory[ckey]) //find the client for a ckey if they are connected and associate them with the new mentor datum else world.log << "Using legacy mentor system." var/list/Lines = file2list("config/mentors.txt") @@ -33,11 +33,11 @@ var/datum/mentors/D = new(ckey) //create the admin datum and store it for later use if(!D) continue //will occur if an invalid rank is provided - D.associate(directory[ckey]) //find the client for a ckey if they are connected and associate them with the new admin datum + D.associate(GLOB.directory[ckey]) //find the client for a ckey if they are connected and associate them with the new admin datum #ifdef TESTING var/msg = "mentors Built:\n" - for(var/ckey in mentor_datums) + for(var/ckey in GLOB.mentor_datums) msg += "\t[ckey] - mentor\n" testing(msg) #endif \ No newline at end of file diff --git a/code/modules/mentor/verbs/mentor_memo.dm b/code/modules/mentor/verbs/mentor_memo.dm index 4c8376f3f3..08302f7e7e 100644 --- a/code/modules/mentor/verbs/mentor_memo.dm +++ b/code/modules/mentor/verbs/mentor_memo.dm @@ -2,7 +2,7 @@ set name = "Mentor Memos" set category = "Server" if(!check_rights(0)) return - if(!dbcon.IsConnected()) + if(!GLOB.dbcon.IsConnected()) to_chat(src, "Failed to establish database connection.") return var/memotask = input(usr,"Choose task.","Memo") in list("Show","Write","Edit","Remove") @@ -14,7 +14,7 @@ set name = "Show Memos" set category = "Mentor" if(!check_mentor()) return - if(!dbcon.IsConnected()) + if(!GLOB.dbcon.IsConnected()) to_chat(src, "Failed to establish database connection.") return mentor_memo_output("Show") @@ -22,13 +22,13 @@ /client/proc/mentor_memo_output(task) if(!task) return - if(!dbcon.IsConnected()) + if(!GLOB.dbcon.IsConnected()) to_chat(src, "Failed to establish database connection.") return var/sql_ckey = sanitizeSQL(src.ckey) switch(task) if("Write") - var/DBQuery/query_memocheck = dbcon.NewQuery("SELECT ckey FROM [format_table_name("mentor_memo")] WHERE ckey = '[sql_ckey]'") + var/DBQuery/query_memocheck = GLOB.dbcon.NewQuery("SELECT ckey FROM [format_table_name("mentor_memo")] WHERE ckey = '[sql_ckey]'") if(!query_memocheck.Execute()) var/err = query_memocheck.ErrorMsg() log_game("SQL ERROR obtaining ckey from memo table. Error : \[[err]\]\n") @@ -41,7 +41,7 @@ return memotext = sanitizeSQL(memotext) var/timestamp = SQLtime() - var/DBQuery/query_memoadd = dbcon.NewQuery("INSERT INTO [format_table_name("mentor_memo")] (ckey, memotext, timestamp) VALUES ('[sql_ckey]', '[memotext]', '[timestamp]')") + var/DBQuery/query_memoadd = GLOB.dbcon.NewQuery("INSERT INTO [format_table_name("mentor_memo")] (ckey, memotext, timestamp) VALUES ('[sql_ckey]', '[memotext]', '[timestamp]')") if(!query_memoadd.Execute()) var/err = query_memoadd.ErrorMsg() log_game("SQL ERROR adding new memo. Error : \[[err]\]\n") @@ -49,7 +49,7 @@ log_admin("[key_name(src)] has set a mentor memo: [memotext]") message_admins("[key_name_admin(src)] has set a mentor memo:
    [memotext]") if("Edit") - var/DBQuery/query_memolist = dbcon.NewQuery("SELECT ckey FROM [format_table_name("mentor_memo")]") + var/DBQuery/query_memolist = GLOB.dbcon.NewQuery("SELECT ckey FROM [format_table_name("mentor_memo")]") if(!query_memolist.Execute()) var/err = query_memolist.ErrorMsg() log_game("SQL ERROR obtaining ckey from memo table. Error : \[[err]\]\n") @@ -65,7 +65,7 @@ if(!target_ckey) return var/target_sql_ckey = sanitizeSQL(target_ckey) - var/DBQuery/query_memofind = dbcon.NewQuery("SELECT memotext FROM [format_table_name("mentor_memo")] WHERE ckey = '[target_sql_ckey]'") + var/DBQuery/query_memofind = GLOB.dbcon.NewQuery("SELECT memotext FROM [format_table_name("mentor_memo")] WHERE ckey = '[target_sql_ckey]'") if(!query_memofind.Execute()) var/err = query_memofind.ErrorMsg() log_game("SQL ERROR obtaining memotext from memo table. Error : \[[err]\]\n") @@ -78,7 +78,7 @@ new_memo = sanitizeSQL(new_memo) var/edit_text = "Edited by [sql_ckey] on [SQLtime()] from
    [old_memo]
    to
    [new_memo]
    " edit_text = sanitizeSQL(edit_text) - var/DBQuery/update_query = dbcon.NewQuery("UPDATE [format_table_name("mentor_memo")] SET memotext = '[new_memo]', last_editor = '[sql_ckey]', edits = CONCAT(IFNULL(edits,''),'[edit_text]') WHERE ckey = '[target_sql_ckey]'") + var/DBQuery/update_query = GLOB.dbcon.NewQuery("UPDATE [format_table_name("mentor_memo")] SET memotext = '[new_memo]', last_editor = '[sql_ckey]', edits = CONCAT(IFNULL(edits,''),'[edit_text]') WHERE ckey = '[target_sql_ckey]'") if(!update_query.Execute()) var/err = update_query.ErrorMsg() log_game("SQL ERROR editing memo. Error : \[[err]\]\n") @@ -90,7 +90,7 @@ log_admin("[key_name(src)] has edited [target_sql_ckey]'s mentor memo from [old_memo] to [new_memo]") message_admins("[key_name_admin(src)] has edited [target_sql_ckey]'s mentor memo from
    [old_memo]
    to
    [new_memo]") if("Show") - var/DBQuery/query_memoshow = dbcon.NewQuery("SELECT ckey, memotext, timestamp, last_editor FROM [format_table_name("mentor_memo")]") + var/DBQuery/query_memoshow = GLOB.dbcon.NewQuery("SELECT ckey, memotext, timestamp, last_editor FROM [format_table_name("mentor_memo")]") if(!query_memoshow.Execute()) var/err = query_memoshow.ErrorMsg() log_game("SQL ERROR obtaining ckey, memotext, timestamp, last_editor from memo table. Error : \[[err]\]\n") @@ -110,7 +110,7 @@ return to_chat(src, output) if("Remove") - var/DBQuery/query_memodellist = dbcon.NewQuery("SELECT ckey FROM [format_table_name("mentor_memo")]") + var/DBQuery/query_memodellist = GLOB.dbcon.NewQuery("SELECT ckey FROM [format_table_name("mentor_memo")]") if(!query_memodellist.Execute()) var/err = query_memodellist.ErrorMsg() log_game("SQL ERROR obtaining ckey from memo table. Error : \[[err]\]\n") @@ -126,7 +126,7 @@ if(!target_ckey) return var/target_sql_ckey = sanitizeSQL(target_ckey) - var/DBQuery/query_memodel = dbcon.NewQuery("DELETE FROM [format_table_name("memo")] WHERE ckey = '[target_sql_ckey]'") + var/DBQuery/query_memodel = GLOB.dbcon.NewQuery("DELETE FROM [format_table_name("memo")] WHERE ckey = '[target_sql_ckey]'") if(!query_memodel.Execute()) var/err = query_memodel.ErrorMsg() log_game("SQL ERROR removing memo. Error : \[[err]\]\n") diff --git a/code/modules/mentor/verbs/mentorhelp.dm b/code/modules/mentor/verbs/mentorhelp.dm index 93dafdbb1f..bb66eed19d 100644 --- a/code/modules/mentor/verbs/mentorhelp.dm +++ b/code/modules/mentor/verbs/mentorhelp.dm @@ -18,11 +18,11 @@ var/admin_msg = "MENTORHELP: [ADMIN_FULLMONTY(src.mob)]: [msg]" log_mentor("MENTORHELP: [key_name_mentor(src, 0, 0, 0, 0)]: [msg]") - for(var/client/X in mentors) + for(var/client/X in GLOB.mentors) to_chat(X, 'sound/items/bikehorn.ogg') to_chat(X, mentor_msg) - for(var/client/A in admins) + for(var/client/A in GLOB.admins) to_chat(A, 'sound/items/bikehorn.ogg') to_chat(A, admin_msg) @@ -31,7 +31,7 @@ /proc/get_mentor_counts() . = list("total" = 0, "afk" = 0, "present" = 0) - for(var/client/X in mentors) + for(var/client/X in GLOB.mentors) .["total"]++ if(X.is_afk()) .["afk"]++ @@ -58,7 +58,7 @@ else if(istext(whom)) key = whom ckey = ckey(whom) - C = directory[ckey] + C = GLOB.directory[ckey] if(C) M = C.mob else diff --git a/code/modules/mentor/verbs/mentorpm.dm b/code/modules/mentor/verbs/mentorpm.dm index 118ded5403..9a441d022f 100644 --- a/code/modules/mentor/verbs/mentorpm.dm +++ b/code/modules/mentor/verbs/mentorpm.dm @@ -23,7 +23,7 @@ var/mob/M = whom C = M.client else if(istext(whom)) - C = directory[whom] + C = GLOB.directory[whom] else if(istype(whom,/client)) C = whom if(!C) @@ -66,9 +66,9 @@ //we don't use message_Mentors here because the sender/receiver might get it too var/show_char_sender = !check_mentor_other(src) && config.mentors_mobname_only var/show_char_recip = !check_mentor_other(C) && config.mentors_mobname_only - for(var/client/X in mentors) + for(var/client/X in GLOB.mentors) if(X.key!=key && X.key!=C.key) //check client/X is an Mentor and isn't the sender or recipient to_chat(X, "Mentor PM: [key_name_mentor(src, X, 0, 0, show_char_sender)]->[key_name_mentor(C, X, 0, 0, show_char_recip)]: \blue [msg]") //inform X - for(var/client/A in admins) + for(var/client/A in GLOB.admins) if(A.key!=key && A.key!=C.key) //check client/A is an Mentor and isn't the sender or recipient to_chat(A, "Mentor PM: [key_name_mentor(src, A, 0, 0, show_char_sender)]->[key_name_mentor(C, A, 0, 0, show_char_recip)]: \blue [msg]") //inform A \ No newline at end of file diff --git a/code/modules/mentor/verbs/mentorsay.dm b/code/modules/mentor/verbs/mentorsay.dm index 9192e1b9ba..377761bb89 100644 --- a/code/modules/mentor/verbs/mentorsay.dm +++ b/code/modules/mentor/verbs/mentorsay.dm @@ -13,10 +13,10 @@ if(check_rights(R_ADMIN,0)) msg = "MENTOR: [key_name(src, 0, 0)]: [msg]" - to_chat(mentors, msg) - to_chat(admins, msg) + to_chat(GLOB.mentors, msg) + to_chat(GLOB.admins, msg) else msg = "MENTOR: [key_name(src, 0, 0)]: [msg]" - to_chat(mentors, msg) - to_chat(admins, msg) + to_chat(GLOB.mentors, msg) + to_chat(GLOB.admins, msg) diff --git a/code/modules/mining/aux_base.dm b/code/modules/mining/aux_base.dm index 40d168d6ba..b98a3cfd98 100644 --- a/code/modules/mining/aux_base.dm +++ b/code/modules/mining/aux_base.dm @@ -19,7 +19,7 @@ interface with the mining shuttle at the landing site if a mobile beacon is also var/launch_warning = TRUE var/list/turrets = list() //List of connected turrets - req_one_access = list(access_cargo, access_construction, access_heads, access_research) + req_one_access = list(GLOB.access_cargo, GLOB.access_construction, GLOB.access_heads, GLOB.access_research) var/possible_destinations clockwork = TRUE var/obj/item/device/gps/internal/base/locator @@ -199,7 +199,7 @@ interface with the mining shuttle at the landing site if a mobile beacon is also var/turf/T = get_turf(user) var/obj/machinery/computer/auxillary_base/AB - for (var/obj/machinery/computer/auxillary_base/A in machines) + for (var/obj/machinery/computer/auxillary_base/A in GLOB.machines) if(A.z == ZLEVEL_STATION) AB = A break @@ -274,7 +274,7 @@ obj/docking_port/stationary/public_mining_dock/onShuttleMove() to_chat(user, "This device is only to be used in a mining zone.") return var/obj/machinery/computer/auxillary_base/aux_base_console - for(var/obj/machinery/computer/auxillary_base/ABC in machines) + for(var/obj/machinery/computer/auxillary_base/ABC in GLOB.machines) if(get_dist(landing_spot, ABC) <= console_range) aux_base_console = ABC break diff --git a/code/modules/mining/aux_base_camera.dm b/code/modules/mining/aux_base_camera.dm index cb4519d2db..fcbced3210 100644 --- a/code/modules/mining/aux_base_camera.dm +++ b/code/modules/mining/aux_base_camera.dm @@ -62,7 +62,7 @@ /obj/machinery/computer/camera_advanced/base_construction/CreateEye() var/spawn_spot - for(var/obj/machinery/computer/auxillary_base/ABC in machines) + for(var/obj/machinery/computer/auxillary_base/ABC in GLOB.machines) if(istype(get_area(ABC), /area/shuttle/auxillary_base)) found_aux_console = ABC break diff --git a/code/modules/mining/equipment.dm b/code/modules/mining/equipment.dm index 26742954ee..2b10ab0553 100644 --- a/code/modules/mining/equipment.dm +++ b/code/modules/mining/equipment.dm @@ -82,7 +82,7 @@ var/list/destinations = list() if(isgolem(user)) - for(var/obj/item/device/radio/beacon/B in teleportbeacons) + for(var/obj/item/device/radio/beacon/B in GLOB.teleportbeacons) var/turf/T = get_turf(B) if(istype(T.loc, /area/ruin/powered/golem_ship)) destinations += B @@ -91,7 +91,7 @@ if(destinations.len) return destinations - for(var/obj/item/device/radio/beacon/B in teleportbeacons) + for(var/obj/item/device/radio/beacon/B in GLOB.teleportbeacons) var/turf/T = get_turf(B) if(T.z == ZLEVEL_STATION) destinations += B @@ -573,9 +573,9 @@ L.underlays -= marked_image qdel(marked_image) marked_image = null - var/backstab = check_target_facings(user, L) + var/backstab_dir = get_dir(user, L) var/def_check = L.getarmor(type = "bomb") - if(backstab == FACING_INIT_FACING_TARGET_TARGET_FACING_PERPENDICULAR || backstab == FACING_SAME_DIR) + if((user.dir & backstab_dir) && (L.dir & backstab_dir)) L.apply_damage(80, BRUTE, blocked = def_check) playsound(user, 'sound/weapons/Kenetic_accel.ogg', 100, 1) //Seriously who spelled it wrong else diff --git a/code/modules/mining/fulton.dm b/code/modules/mining/fulton.dm index c919d829c4..617d3d5b27 100644 --- a/code/modules/mining/fulton.dm +++ b/code/modules/mining/fulton.dm @@ -1,4 +1,4 @@ -var/list/total_extraction_beacons = list() +GLOBAL_LIST_EMPTY(total_extraction_beacons) /obj/item/weapon/extraction_pack name = "fulton extraction pack" @@ -18,7 +18,7 @@ var/list/total_extraction_beacons = list() /obj/item/weapon/extraction_pack/attack_self(mob/user) var/list/possible_beacons = list() - for(var/B in total_extraction_beacons) + for(var/B in GLOB.total_extraction_beacons) var/obj/structure/extraction_point/EP = B if(EP.beacon_network in beacon_networks) possible_beacons += EP @@ -30,11 +30,12 @@ var/list/total_extraction_beacons = list() else var/A - A = input("Select a beacon to connect to", "Balloon Extraction Pack", A) in possible_beacons + A = input("Select a beacon to connect to", "Balloon Extraction Pack", A) as null|anything in possible_beacons if(!A) return beacon = A + to_chat(user, "You link the extraction pack to the beacon system.") /obj/item/weapon/extraction_pack/afterattack(atom/movable/A, mob/living/carbon/human/user, flag, params) if(!beacon) @@ -60,7 +61,7 @@ var/list/total_extraction_beacons = list() to_chat(user, "You start attaching the pack to [A]...") if(do_after(user,50,target=A)) to_chat(user, "You attach the pack to [A] and activate it.") - if(loc == user || istype(user.back, /obj/item/weapon/storage/backpack)) + if(loc == user && istype(user.back, /obj/item/weapon/storage/backpack)) var/obj/item/weapon/storage/backpack/B = user.back if(B.can_be_inserted(src,stop_messages = 1)) B.handle_item_insertion(src) @@ -150,21 +151,21 @@ var/list/total_extraction_beacons = list() /obj/structure/extraction_point name = "fulton recovery beacon" - desc = "A beacon for the fulton recovery system. Hit a beacon with a pack to link the pack to a beacon." + desc = "A beacon for the fulton recovery system. Activate a pack in your hand to link it to a beacon." icon = 'icons/obj/fulton.dmi' icon_state = "extraction_point" anchored = 1 density = 0 var/beacon_network = "station" -/obj/structure/extraction_point/New() +/obj/structure/extraction_point/Initialize() var/area/area_name = get_area(src) name += " ([rand(100,999)]) ([area_name.name])" - total_extraction_beacons += src + GLOB.total_extraction_beacons += src ..() /obj/structure/extraction_point/Destroy() - total_extraction_beacons -= src + GLOB.total_extraction_beacons -= src ..() /obj/effect/extraction_holder @@ -182,4 +183,4 @@ var/list/total_extraction_beacons = list() var/mob/living/L = A if(L.stat != DEAD) return 1 - return 0 \ No newline at end of file + return 0 diff --git a/code/modules/mining/laborcamp/laborshuttle.dm b/code/modules/mining/laborcamp/laborshuttle.dm index 38788615de..24ec10e4cf 100644 --- a/code/modules/mining/laborcamp/laborshuttle.dm +++ b/code/modules/mining/laborcamp/laborshuttle.dm @@ -4,7 +4,7 @@ circuit = /obj/item/weapon/circuitboard/computer/labor_shuttle shuttleId = "laborcamp" possible_destinations = "laborcamp_home;laborcamp_away" - req_access = list(access_brig) + req_access = list(GLOB.access_brig) /obj/machinery/computer/shuttle/labor/one_way diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm index fff2f7672e..2984a24cdc 100644 --- a/code/modules/mining/laborcamp/laborstacker.dm +++ b/code/modules/mining/laborcamp/laborstacker.dm @@ -35,7 +35,7 @@ return ..() /obj/machinery/mineral/labor_claim_console/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/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "labor_claim_console", name, 450, 475, master_ui, state) @@ -104,8 +104,8 @@ to_chat(usr, "No permission to dock could be granted.") else if(!emagged) - Radio.set_frequency(SEC_FREQ) - Radio.talk_into(src, "[inserted_id.registered_name] has returned to the station. Minerals and Prisoner ID card ready for retrieval.", SEC_FREQ) + Radio.set_frequency(GLOB.SEC_FREQ) + Radio.talk_into(src, "[inserted_id.registered_name] has returned to the station. Minerals and Prisoner ID card ready for retrieval.", GLOB.SEC_FREQ, get_spans(), get_default_language()) to_chat(usr, "Shuttle received message and will be sent shortly.") /obj/machinery/mineral/labor_claim_console/proc/check_auth() diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 5b21e30de6..630359d402 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -9,7 +9,7 @@ /obj/structure/closet/crate/necropolis/tendril desc = "It's watching you suspiciously." -/obj/structure/closet/crate/necropolis/tendril/New() +/obj/structure/closet/crate/necropolis/tendril/Initialize() ..() var/loot = rand(1,25) switch(loot) @@ -104,7 +104,7 @@ icon_state = "lantern-blue" feedback_add_details("wisp_lantern","R") // returned -/obj/item/device/wisp_lantern/New() +/obj/item/device/wisp_lantern/Initialize() ..() wisp = new(src) @@ -149,7 +149,7 @@ desc = "A mysterious red cube." icon_state = "red_cube" -/obj/item/device/warp_cube/red/New() +/obj/item/device/warp_cube/red/Initialize() ..() if(!linked) var/obj/item/device/warp_cube/blue = new(src.loc) @@ -294,7 +294,7 @@ name = "paradox bag" desc = "Somehow, it's in two places at once." -/obj/item/device/shared_storage/red/New() +/obj/item/device/shared_storage/red/Initialize() ..() if(!bag) var/obj/item/weapon/storage/backpack/shared/S = new(src) @@ -359,7 +359,7 @@ name = "oar" icon = 'icons/obj/vehicles.dmi' icon_state = "oar" - item_state = "rods" + item_state = "oar" desc = "Not to be confused with the kind Research hassles you for." force = 12 w_class = WEIGHT_CLASS_NORMAL @@ -453,7 +453,7 @@ /obj/structure/closet/crate/necropolis/dragon name = "dragon chest" -/obj/structure/closet/crate/necropolis/dragon/New() +/obj/structure/closet/crate/necropolis/dragon/Initialize() ..() var/loot = rand(1,4) switch(loot) @@ -482,18 +482,18 @@ var/summon_cooldown = 0 var/list/mob/dead/observer/spirits -/obj/item/weapon/melee/ghost_sword/New() +/obj/item/weapon/melee/ghost_sword/Initialize() ..() spirits = list() START_PROCESSING(SSobj, src) - poi_list |= src + GLOB.poi_list |= src /obj/item/weapon/melee/ghost_sword/Destroy() for(var/mob/dead/observer/G in spirits) - G.invisibility = observer_default_invisibility + G.invisibility = GLOB.observer_default_invisibility spirits.Cut() STOP_PROCESSING(SSobj, src) - poi_list -= src + GLOB.poi_list -= src . = ..() /obj/item/weapon/melee/ghost_sword/attack_self(mob/user) @@ -537,7 +537,7 @@ current_spirits |= G for(var/mob/dead/observer/G in spirits - current_spirits) - G.invisibility = observer_default_invisibility + G.invisibility = GLOB.observer_default_invisibility spirits = current_spirits @@ -634,7 +634,7 @@ var/timer = 0 var/banned_turfs -/obj/item/weapon/lava_staff/New() +/obj/item/weapon/lava_staff/Initialize() . = ..() banned_turfs = typecacheof(list(/turf/open/space/transit, /turf/closed)) @@ -699,7 +699,7 @@ /obj/structure/closet/crate/necropolis/bubblegum name = "bubblegum chest" -/obj/structure/closet/crate/necropolis/bubblegum/New() +/obj/structure/closet/crate/necropolis/bubblegum/Initialize() ..() var/loot = rand(1,3) switch(loot) @@ -722,7 +722,7 @@ if(used) return used = TRUE - var/choice = input(user,"Who do you want dead?","Choose Your Victim") as null|anything in player_list + var/choice = input(user,"Who do you want dead?","Choose Your Victim") as null|anything in GLOB.player_list if(!(isliving(choice))) to_chat(user, "[choice] is already dead!") @@ -747,7 +747,7 @@ var/obj/effect/mine/pickup/bloodbath/B = new(L) B.mineEffect(L) - for(var/mob/living/carbon/human/H in player_list) + for(var/mob/living/carbon/human/H in GLOB.player_list) if(H == L) continue to_chat(H, "You have an overwhelming desire to kill [L]. [L.p_they(TRUE)] [L.p_have()] been marked red! Go kill [L.p_them()]!") @@ -975,7 +975,7 @@ playsound(T,'sound/effects/bin_close.ogg', 200, 1) sleep(2) new /obj/effect/overlay/temp/hierophant/blast(T, user, friendly_fire_check) - for(var/d in cardinal) + for(var/d in GLOB.cardinal) INVOKE_ASYNC(src, .proc/blast_wall, T, d, user) /obj/item/weapon/hierophant_club/proc/blast_wall(turf/T, dir, mob/living/user) //make a wall of blasts blast_range tiles long diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm index 2928857f2b..4af7330641 100644 --- a/code/modules/mining/machine_redemption.dm +++ b/code/modules/mining/machine_redemption.dm @@ -10,8 +10,8 @@ anchored = 1 input_dir = NORTH output_dir = SOUTH - req_access = list(access_mineral_storeroom) - var/req_access_reclaim = access_mining_station + req_access = list(GLOB.access_mineral_storeroom) + var/req_access_reclaim = GLOB.access_mining_station var/stk_types = list() var/stk_amt = list() var/stack_list = list() //Key: Type. Value: Instance of type. @@ -85,7 +85,7 @@ var/obj/item/stack/sheet/sheet = stack_list[s] msg += "[capitalize(sheet.name)]: [sheet.amount] sheets
    " - for(var/obj/machinery/requests_console/D in allConsoles) + for(var/obj/machinery/requests_console/D in GLOB.allConsoles) if(D.receive_ore_updates) D.createmessage("Ore Redemption Machine", "New minerals available!", msg, 1, 0) diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index ea64e5b912..526f726c52 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -52,7 +52,6 @@ new /datum/data/mining_equipment("Drone AI Upgrade", /obj/item/slimepotion/sentience/mining, 1000), new /datum/data/mining_equipment("Jump Boots", /obj/item/clothing/shoes/bhop, 2500), new /datum/data/mining_equipment("Survival Knife", /obj/item/weapon/kitchen/knife/combat/survival, 350), - new /datum/data/mining_equipment("Survival Pen Economy Pack",/obj/item/weapon/storage/box/medipens/survival, 2000), new /datum/data/mining_equipment("Stimpack", /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack, 250), new /datum/data/mining_equipment("Stimpack Economy Pack",/obj/item/weapon/storage/box/medipens/utility, 1000) ) @@ -276,10 +275,10 @@ /obj/item/weapon/card/mining_access_card/afterattack(atom/movable/AM, mob/user, proximity) if(istype(AM, /obj/item/weapon/card/id) && proximity) var/obj/item/weapon/card/id/I = AM - I.access |= access_mining - I.access |= access_mining_station - I.access |= access_mineral_storeroom - I.access |= access_cargo + I.access |= GLOB.access_mining + I.access |= GLOB.access_mining_station + I.access |= GLOB.access_mineral_storeroom + I.access |= GLOB.access_cargo to_chat(user, "You upgrade [I] with mining access.") qdel(src) ..() diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 1e80768919..2d3b1e42c6 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -37,7 +37,7 @@ /obj/structure/closet/secure_closet/miner name = "miner's equipment" icon_state = "mining" - req_access = list(access_mining) + req_access = list(GLOB.access_mining) /obj/structure/closet/secure_closet/miner/New() ..() @@ -68,7 +68,7 @@ var/global/list/dumb_rev_heads = list() /obj/machinery/computer/shuttle/mining/attack_hand(mob/user) - if(user.z == ZLEVEL_STATION && user.mind && (user.mind in ticker.mode.head_revolutionaries) && !(user.mind in dumb_rev_heads)) + if(user.z == ZLEVEL_STATION && user.mind && (user.mind in SSticker.mode.head_revolutionaries) && !(user.mind in dumb_rev_heads)) to_chat(user, "You get a feeling that leaving the station might be a REALLY dumb idea...") dumb_rev_heads += user.mind return @@ -389,16 +389,18 @@ name = "dusty survival pod storage" desc = "A heated storage unit. This one's seen better days." -/obj/machinery/smartfridge/survival_pod/empty/New() - return() +/obj/machinery/smartfridge/survival_pod/empty/Initialize(mapload) + ..(mapload, TRUE) /obj/machinery/smartfridge/survival_pod/accept_check(obj/item/O) if(istype(O, /obj/item)) return 1 return 0 -/obj/machinery/smartfridge/survival_pod/New() +/obj/machinery/smartfridge/survival_pod/Initialize(mapload, empty) ..() + if(empty) + return for(var/i in 1 to 5) var/obj/item/weapon/reagent_containers/food/snacks/donkpocket/warm/W = new(src) load(W) diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm index 5527cb20f2..cef87fc57d 100644 --- a/code/modules/mining/minebot.dm +++ b/code/modules/mining/minebot.dm @@ -130,13 +130,13 @@ if(istype(target, /obj/item/weapon/ore) && mode == MINEDRONE_COLLECT) CollectOre() return - ..() + return ..() /mob/living/simple_animal/hostile/mining_drone/proc/CollectOre() var/obj/item/weapon/ore/O for(O in src.loc) O.loc = src - for(var/dir in alldirs) + for(var/dir in GLOB.alldirs) var/turf/T = get_step(src,dir) for(O in T) O.loc = src @@ -195,13 +195,14 @@ /datum/action/innate/minedrone/toggle_meson_vision/Activate() var/mob/living/simple_animal/hostile/mining_drone/user = owner - if(user.sight & SEE_TURFS) user.sight &= ~SEE_TURFS - user.see_invisible = SEE_INVISIBLE_LIVING + user.lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE else user.sight |= SEE_TURFS - user.see_invisible = SEE_INVISIBLE_MINIMUM + user.lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE + + user.sync_lighting_plane_alpha() to_chat(user, "You toggle your meson vision [(user.sight & SEE_TURFS) ? "on" : "off"].") diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index 7a4787f747..98a6c3d46d 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -270,7 +270,7 @@ explosion(src.loc,-1,1,3,adminlog = notify_admins) qdel(src) -/obj/item/weapon/ore/New() +/obj/item/weapon/ore/Initialize() ..() pixel_x = rand(0,16)-8 pixel_y = rand(0,8)-8 @@ -297,68 +297,73 @@ var/cooldown = 0 var/value = 1 -/obj/item/weapon/coin/New() +/obj/item/weapon/coin/Initialize() ..() pixel_x = rand(0,16)-8 pixel_y = rand(0,8)-8 - icon_state = "coin_[cmineral]_heads" - if(cmineral) - name = "[cmineral] coin" - /obj/item/weapon/coin/examine(mob/user) ..() if(value) to_chat(user, "It's worth [value] credit\s.") /obj/item/weapon/coin/gold + name = "gold coin" cmineral = "gold" icon_state = "coin_gold_heads" value = 50 materials = list(MAT_GOLD = MINERAL_MATERIAL_AMOUNT*0.2) /obj/item/weapon/coin/silver + name = "silver coin" cmineral = "silver" icon_state = "coin_silver_heads" value = 20 materials = list(MAT_SILVER = MINERAL_MATERIAL_AMOUNT*0.2) /obj/item/weapon/coin/diamond + name = "diamond coin" cmineral = "diamond" icon_state = "coin_diamond_heads" value = 500 materials = list(MAT_DIAMOND = MINERAL_MATERIAL_AMOUNT*0.2) /obj/item/weapon/coin/iron + name = "iron coin" cmineral = "iron" icon_state = "coin_iron_heads" value = 1 materials = list(MAT_METAL = MINERAL_MATERIAL_AMOUNT*0.2) /obj/item/weapon/coin/plasma + name = "plasma coin" cmineral = "plasma" icon_state = "coin_plasma_heads" value = 100 materials = list(MAT_PLASMA = MINERAL_MATERIAL_AMOUNT*0.2) /obj/item/weapon/coin/uranium + name = "uranium coin" cmineral = "uranium" icon_state = "coin_uranium_heads" value = 80 materials = list(MAT_URANIUM = MINERAL_MATERIAL_AMOUNT*0.2) /obj/item/weapon/coin/clown + name = "bananium coin" cmineral = "bananium" icon_state = "coin_bananium_heads" value = 1000 //makes the clown cry materials = list(MAT_BANANIUM = MINERAL_MATERIAL_AMOUNT*0.2) /obj/item/weapon/coin/adamantine + name = "adamantine coin" cmineral = "adamantine" icon_state = "coin_adamantine_heads" value = 1500 /obj/item/weapon/coin/mythril + name = "mythril coin" cmineral = "mythril" icon_state = "coin_mythril_heads" value = 3000 @@ -379,9 +384,6 @@ sideslist = list("valid", "salad") value = 0 -/obj/item/weapon/coin/antagtoken/New() - return - /obj/item/weapon/coin/attackby(obj/item/weapon/W, mob/user, params) if(istype(W, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/CC = W @@ -411,12 +413,12 @@ else ..() /obj/item/weapon/coin/attack_self(mob/user) - if(cooldown < world.time - 15) + if(cooldown < world.time) if(string_attached) //does the coin have a wire attached to_chat(user, "The coin won't flip very well with something attached!" ) return //do not flip the coin var/coinflip = pick(sideslist) - cooldown = world.time + cooldown = world.time + 15 flick("coin_[cmineral]_flip", src) icon_state = "coin_[cmineral]_[coinflip]" playsound(user.loc, 'sound/items/coinflip.ogg', 50, 1) diff --git a/code/modules/mob/dead/death.dm b/code/modules/mob/dead/death.dm deleted file mode 100644 index 48a04a834c..0000000000 --- a/code/modules/mob/dead/death.dm +++ /dev/null @@ -1,5 +0,0 @@ -/mob/dead/dust() //ghosts can't be vaporised. - return - -/mob/dead/gib() //ghosts can't be gibbed. - return diff --git a/code/modules/mob/dead/new_player/login.dm b/code/modules/mob/dead/new_player/login.dm index bfb30ccb1d..e35f162723 100644 --- a/code/modules/mob/dead/new_player/login.dm +++ b/code/modules/mob/dead/new_player/login.dm @@ -6,11 +6,11 @@ ..() - if(join_motd) - to_chat(src, "
    [join_motd]
    ") + if(GLOB.join_motd) + to_chat(src, "
    [GLOB.join_motd]
    ") - if(admin_notice) - to_chat(src, "Admin Notice:\n \t [admin_notice]") + if(GLOB.admin_notice) + to_chat(src, "Admin Notice:\n \t [GLOB.admin_notice]") if(config.soft_popcap && living_player_count() >= config.soft_popcap) to_chat(src, "Server Notice:\n \t [config.soft_popcap_message]") @@ -28,5 +28,5 @@ */ new_player_panel() client.playtitlemusic() - if(ticker.current_state < GAME_STATE_SETTING_UP) - to_chat(src, "Please set up your character and select \"Ready\". The game will start in about [round(ticker.GetTimeLeft(), 1)/10] seconds.") + if(SSticker.current_state < GAME_STATE_SETTING_UP) + to_chat(src, "Please set up your character and select \"Ready\". The game will start in about [round(SSticker.GetTimeLeft(), 1)/10] seconds.") diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index f464eff940..7f6a4abc1c 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -20,14 +20,14 @@ stack_trace("Warning: [src]([type]) initialized multiple times!") initialized = TRUE tag = "mob_[next_mob_id++]" - mob_list += src + GLOB.mob_list += src - if(client && ticker.state == GAME_STATE_STARTUP) + if(client && SSticker.state == GAME_STATE_STARTUP) var/obj/screen/splash/S = new(client, TRUE, TRUE) S.Fade(TRUE) - if(length(newplayer_start)) - loc = pick(newplayer_start) + if(length(GLOB.newplayer_start)) + loc = pick(GLOB.newplayer_start) else loc = locate(1,1,1) @@ -35,7 +35,7 @@ var/output = "

    Setup Character

    " - if(!ticker || ticker.current_state <= GAME_STATE_PREGAME) + if(!SSticker || SSticker.current_state <= GAME_STATE_PREGAME) if(ready) output += "

    \[ Ready | Not Ready \]

    " else @@ -48,11 +48,11 @@ output += "

    Observe

    " if(!IsGuestKey(src.key)) - if (dbcon.Connect()) + if (GLOB.dbcon.Connect()) var/isadmin = 0 if(src.client && src.client.holder) isadmin = 1 - var/DBQuery/query_get_new_polls = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_question")] WHERE [(isadmin ? "" : "adminonly = false AND")] Now() BETWEEN starttime AND endtime AND id NOT IN (SELECT pollid FROM [format_table_name("poll_vote")] WHERE ckey = \"[ckey]\") AND id NOT IN (SELECT pollid FROM [format_table_name("poll_textreply")] WHERE ckey = \"[ckey]\")") + var/DBQuery/query_get_new_polls = GLOB.dbcon.NewQuery("SELECT id FROM [format_table_name("poll_question")] WHERE [(isadmin ? "" : "adminonly = false AND")] Now() BETWEEN starttime AND endtime AND id NOT IN (SELECT pollid FROM [format_table_name("poll_vote")] WHERE ckey = \"[ckey]\") AND id NOT IN (SELECT pollid FROM [format_table_name("poll_textreply")] WHERE ckey = \"[ckey]\")") if(!query_get_new_polls.Execute()) return var/newpoll = 0 @@ -77,18 +77,18 @@ ..() if(statpanel("Lobby")) - stat("Game Mode:", (ticker.hide_mode) ? "Secret" : "[master_mode]") + stat("Game Mode:", (SSticker.hide_mode) ? "Secret" : "[GLOB.master_mode]") stat("Map:", SSmapping.config.map_name) - if(ticker.current_state == GAME_STATE_PREGAME) - var/time_remaining = ticker.GetTimeLeft() + if(SSticker.current_state == GAME_STATE_PREGAME) + var/time_remaining = SSticker.GetTimeLeft() if(time_remaining >= 0) time_remaining /= 10 stat("Time To Start:", (time_remaining >= 0) ? "[round(time_remaining)]s" : "DELAYED") - stat("Players:", "[ticker.totalPlayers]") + stat("Players:", "[SSticker.totalPlayers]") if(client.holder) - stat("Players Ready:", "[ticker.totalPlayersReady]") + stat("Players Ready:", "[SSticker.totalPlayersReady]") /mob/dead/new_player/Topic(href, href_list[]) @@ -110,7 +110,7 @@ return 1 if(href_list["ready"]) - if(!ticker || ticker.current_state <= GAME_STATE_PREGAME) // Make sure we don't ready up after the round has started + if(!SSticker || SSticker.current_state <= GAME_STATE_PREGAME) // Make sure we don't ready up after the round has started ready = text2num(href_list["ready"]) if(href_list["refresh"]) @@ -141,14 +141,14 @@ observer.real_name = observer.client.prefs.real_name observer.name = observer.real_name observer.update_icon() - observer.stopLobbySound() + observer.stop_sound_channel(CHANNEL_LOBBYMUSIC) qdel(mind) qdel(src) return 1 if(href_list["late_join"]) - if(!ticker || ticker.current_state != GAME_STATE_PLAYING) + if(!SSticker || SSticker.current_state != GAME_STATE_PLAYING) to_chat(usr, "The round is either not ready, or has already finished...") return @@ -156,17 +156,17 @@ LateChoices() return - if(ticker.queued_players.len || (relevant_cap && living_player_count() >= relevant_cap && !(ckey(key) in admin_datums))) + if(SSticker.queued_players.len || (relevant_cap && living_player_count() >= relevant_cap && !(ckey(key) in GLOB.admin_datums))) to_chat(usr, "[config.hard_popcap_message]") - var/queue_position = ticker.queued_players.Find(usr) + var/queue_position = SSticker.queued_players.Find(usr) if(queue_position == 1) to_chat(usr, "You are next in line to join the game. You will be notified when a slot opens up.") else if(queue_position) to_chat(usr, "There are [queue_position-1] players in front of you in the queue to join the game.") else - ticker.queued_players += usr - to_chat(usr, "You have been added to the queue to join the game. Your position in queue is [ticker.queued_players.len].") + SSticker.queued_players += usr + to_chat(usr, "You have been added to the queue to join the game. Your position in queue is [SSticker.queued_players.len].") return LateChoices() @@ -175,12 +175,12 @@ if(href_list["SelectedJob"]) - if(!enter_allowed) + if(!GLOB.enter_allowed) to_chat(usr, "There is an administrative lock on entering the game!") return - if(ticker.queued_players.len && !(ckey(key) in admin_datums)) - if((living_player_count() >= relevant_cap) || (src != ticker.queued_players[1])) + if(SSticker.queued_players.len && !(ckey(key) in GLOB.admin_datums)) + if((living_player_count() >= relevant_cap) || (src != SSticker.queued_players[1])) to_chat(usr, "Server is full.") return @@ -303,7 +303,7 @@ alert(src, "[rank] is not available. Please try another.") return 0 - if(ticker.late_join_disabled) + if(SSticker.late_join_disabled) alert(src, "An administrator has disabled late join spawning.") return FALSE @@ -314,8 +314,8 @@ return FALSE //Remove the player from the join queue if he was in one and reset the timer - ticker.queued_players -= src - ticker.queue_delay = 4 + SSticker.queued_players -= src + SSticker.queue_delay = 4 SSjob.AssignRole(src, rank, 1) @@ -325,8 +325,8 @@ character = equip var/D - if(latejoin.len) - D = get_turf(pick(latejoin)) + if(GLOB.latejoin.len) + D = get_turf(pick(GLOB.latejoin)) if(!D) for(var/turf/T in get_area_turfs(/area/shuttle/arrival)) if(!T.density) @@ -346,46 +346,46 @@ if(chair) chair.buckle_mob(character) - ticker.minds += character.mind + SSticker.minds += character.mind var/mob/living/carbon/human/humanc if(ishuman(character)) humanc = character //Let's retypecast the var to be human, if(humanc) //These procs all expect humans - data_core.manifest_inject(humanc) + GLOB.data_core.manifest_inject(humanc) if(SSshuttle.arrivals) SSshuttle.arrivals.QueueAnnounce(humanc, rank) else AnnounceArrival(humanc, rank) AddEmploymentContract(humanc) - if(highlander) + if(GLOB.highlander) to_chat(humanc, "THERE CAN BE ONLY ONE!!!") humanc.make_scottish() - joined_player_list += character.ckey + GLOB.joined_player_list += character.ckey if(config.allow_latejoin_antagonists && humanc) //Borgs aren't allowed to be antags. Will need to be tweaked if we get true latejoin ais. if(SSshuttle.emergency) switch(SSshuttle.emergency.mode) if(SHUTTLE_RECALL, SHUTTLE_IDLE) - ticker.mode.make_antag_chance(humanc) + SSticker.mode.make_antag_chance(humanc) if(SHUTTLE_CALL) if(SSshuttle.emergency.timeLeft(1) > initial(SSshuttle.emergencyCallTime)*0.5) - ticker.mode.make_antag_chance(humanc) + SSticker.mode.make_antag_chance(humanc) qdel(src) /mob/dead/new_player/proc/AddEmploymentContract(mob/living/carbon/human/employee) //TODO: figure out a way to exclude wizards/nukeops/demons from this. sleep(30) - for(var/C in employmentCabinets) + for(var/C in GLOB.employmentCabinets) var/obj/structure/filingcabinet/employment/employmentCabinet = C if(!employmentCabinet.virgin) employmentCabinet.addFile(employee) /mob/dead/new_player/proc/LateChoices() - var/mills = world.time - round_start_time // 1/10 of a second, not real milliseconds but whatever + var/mills = world.time - SSticker.round_start_time // 1/10 of a second, not real milliseconds but whatever //var/secs = ((mills % 36000) % 600) / 10 //Not really needed, but I'll leave it here for refrence.. or something var/mins = (mills % 36000) / 600 var/hours = mills / 36000 @@ -425,7 +425,7 @@ if (job_count > round(available_job_count / 2)) dat += "
    " var/position_class = "otherPosition" - if (job.title in command_positions) + if (job.title in GLOB.command_positions) position_class = "commandPosition" dat += "[job.title] ([job.current_positions])
    " if(!job_count) //if there's nowhere to go, assistant opens up. @@ -471,12 +471,12 @@ . = new_character if(.) new_character.key = key //Manually transfer the key to log them in - new_character.stopLobbySound() + new_character.stop_sound_channel(CHANNEL_LOBBYMUSIC) /mob/dead/new_player/proc/ViewManifest() var/dat = "" dat += "

    Crew Manifest

    " - dat += data_core.get_manifest(OOC = 1) + dat += GLOB.data_core.get_manifest(OOC = 1) src << browse(dat, "window=manifest;size=387x420;can_close=1") diff --git a/code/modules/mob/dead/new_player/poll.dm b/code/modules/mob/dead/new_player/poll.dm index 319d35867e..a469e2907a 100644 --- a/code/modules/mob/dead/new_player/poll.dm +++ b/code/modules/mob/dead/new_player/poll.dm @@ -3,10 +3,10 @@ var/optiontext /mob/dead/new_player/proc/handle_player_polling() - if(!dbcon.IsConnected()) + if(!GLOB.dbcon.IsConnected()) to_chat(usr, "Failed to establish database connection.") return - var/DBQuery/query_poll_get = dbcon.NewQuery("SELECT id, question FROM [format_table_name("poll_question")] WHERE Now() BETWEEN starttime AND endtime [(client.holder ? "" : "AND adminonly = false")]") + var/DBQuery/query_poll_get = GLOB.dbcon.NewQuery("SELECT id, question FROM [format_table_name("poll_question")] WHERE Now() BETWEEN starttime AND endtime [(client.holder ? "" : "AND adminonly = false")]") if(!query_poll_get.warn_execute()) return var/output = "
    Player polls
    AUTHORTITLECATEGORYSS13BN
    " @@ -22,10 +22,10 @@ /mob/dead/new_player/proc/poll_player(pollid) if(!pollid) return - if (!dbcon.Connect()) + if (!GLOB.dbcon.Connect()) to_chat(usr, "Failed to establish database connection.") return - var/DBQuery/query_poll_get_details = dbcon.NewQuery("SELECT starttime, endtime, question, polltype, multiplechoiceoptions FROM [format_table_name("poll_question")] WHERE id = [pollid]") + var/DBQuery/query_poll_get_details = GLOB.dbcon.NewQuery("SELECT starttime, endtime, question, polltype, multiplechoiceoptions FROM [format_table_name("poll_question")] WHERE id = [pollid]") if(!query_poll_get_details.warn_execute()) return var/pollstarttime = "" @@ -41,14 +41,14 @@ multiplechoiceoptions = text2num(query_poll_get_details.item[5]) switch(polltype) if(POLLTYPE_OPTION) - var/DBQuery/query_option_get_votes = dbcon.NewQuery("SELECT optionid FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") + var/DBQuery/query_option_get_votes = GLOB.dbcon.NewQuery("SELECT optionid FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") if(!query_option_get_votes.warn_execute()) return var/votedoptionid = 0 if(query_option_get_votes.NextRow()) votedoptionid = text2num(query_option_get_votes.item[1]) var/list/datum/polloption/options = list() - var/DBQuery/query_option_options = dbcon.NewQuery("SELECT id, text FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") + var/DBQuery/query_option_options = GLOB.dbcon.NewQuery("SELECT id, text FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") if(!query_option_options.warn_execute()) return while(query_option_options.NextRow()) @@ -82,7 +82,7 @@ src << browse(null ,"window=playerpolllist") src << browse(output,"window=playerpoll;size=500x250") if(POLLTYPE_TEXT) - var/DBQuery/query_text_get_votes = dbcon.NewQuery("SELECT replytext FROM [format_table_name("poll_textreply")] WHERE pollid = [pollid] AND ckey = '[ckey]'") + var/DBQuery/query_text_get_votes = GLOB.dbcon.NewQuery("SELECT replytext FROM [format_table_name("poll_textreply")] WHERE pollid = [pollid] AND ckey = '[ckey]'") if(!query_text_get_votes.warn_execute()) return var/vote_text = "" @@ -111,7 +111,7 @@ src << browse(null ,"window=playerpolllist") src << browse(output,"window=playerpoll;size=500x500") if(POLLTYPE_RATING) - var/DBQuery/query_rating_get_votes = dbcon.NewQuery("SELECT o.text, v.rating FROM [format_table_name("poll_option")] o, [format_table_name("poll_vote")] v WHERE o.pollid = [pollid] AND v.ckey = '[ckey]' AND o.id = v.optionid") + var/DBQuery/query_rating_get_votes = GLOB.dbcon.NewQuery("SELECT o.text, v.rating FROM [format_table_name("poll_option")] o, [format_table_name("poll_vote")] v WHERE o.pollid = [pollid] AND v.ckey = '[ckey]' AND o.id = v.optionid") if(!query_rating_get_votes.warn_execute()) return var/output = "
    Player poll
    " @@ -129,7 +129,7 @@ output += "" var/minid = 999999 var/maxid = 0 - var/DBQuery/query_rating_options = dbcon.NewQuery("SELECT id, text, minval, maxval, descmin, descmid, descmax FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") + var/DBQuery/query_rating_options = GLOB.dbcon.NewQuery("SELECT id, text, minval, maxval, descmin, descmid, descmax FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") if(!query_rating_options.warn_execute()) return while(query_rating_options.NextRow()) @@ -163,7 +163,7 @@ src << browse(null ,"window=playerpolllist") src << browse(output,"window=playerpoll;size=500x500") if(POLLTYPE_MULTI) - var/DBQuery/query_multi_get_votes = dbcon.NewQuery("SELECT optionid FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") + var/DBQuery/query_multi_get_votes = GLOB.dbcon.NewQuery("SELECT optionid FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") if(!query_multi_get_votes.warn_execute()) return var/list/votedfor = list() @@ -172,7 +172,7 @@ var/list/datum/polloption/options = list() var/maxoptionid = 0 var/minoptionid = 0 - var/DBQuery/query_multi_options = dbcon.NewQuery("SELECT id, text FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") + var/DBQuery/query_multi_options = GLOB.dbcon.NewQuery("SELECT id, text FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") if(!query_multi_options.warn_execute()) return while(query_multi_options.NextRow()) @@ -214,7 +214,7 @@ var/datum/asset/irv_assets = get_asset_datum(/datum/asset/simple/IRV) irv_assets.send(src) - var/DBQuery/query_irv_get_votes = dbcon.NewQuery("SELECT optionid FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") + var/DBQuery/query_irv_get_votes = GLOB.dbcon.NewQuery("SELECT optionid FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") if(!query_irv_get_votes.warn_execute()) return @@ -224,7 +224,7 @@ var/list/datum/polloption/options = list() - var/DBQuery/query_irv_options = dbcon.NewQuery("SELECT id, text FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") + var/DBQuery/query_irv_options = GLOB.dbcon.NewQuery("SELECT id, text FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") if(!query_irv_options.warn_execute()) return while(query_irv_options.NextRow()) @@ -327,10 +327,10 @@ var/table = "poll_vote" if (text) table = "poll_textreply" - if (!dbcon.Connect()) + if (!GLOB.dbcon.Connect()) to_chat(usr, "Failed to establish database connection.") return - var/DBQuery/query_hasvoted = dbcon.NewQuery("SELECT id FROM `[format_table_name(table)]` WHERE pollid = [pollid] AND ckey = '[ckey]'") + var/DBQuery/query_hasvoted = GLOB.dbcon.NewQuery("SELECT id FROM `[format_table_name(table)]` WHERE pollid = [pollid] AND ckey = '[ckey]'") if(!query_hasvoted.warn_execute()) return if(query_hasvoted.NextRow()) @@ -355,14 +355,14 @@ return 1 /mob/dead/new_player/proc/vote_valid_check(pollid, holder, type) - if (!dbcon.Connect()) + if (!GLOB.dbcon.Connect()) to_chat(src, "Failed to establish database connection.") return 0 pollid = text2num(pollid) if (!pollid || pollid < 0) return 0 //validate the poll is actually the right type of poll and its still active - var/DBQuery/query_validate_poll = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_question")] WHERE id = [pollid] AND Now() BETWEEN starttime AND endtime AND polltype = '[type]' [(holder ? "" : "AND adminonly = false")]") + var/DBQuery/query_validate_poll = GLOB.dbcon.NewQuery("SELECT id FROM [format_table_name("poll_question")] WHERE id = [pollid] AND Now() BETWEEN starttime AND endtime AND polltype = '[type]' [(holder ? "" : "AND adminonly = false")]") if(!query_validate_poll.warn_execute()) return 0 if (!query_validate_poll.NextRow()) @@ -370,7 +370,7 @@ return 1 /mob/dead/new_player/proc/vote_on_irv_poll(pollid, list/votelist) - if (!dbcon.Connect()) + if (!GLOB.dbcon.Connect()) to_chat(src, "Failed to establish database connection.") return 0 if (!vote_rig_check()) @@ -395,7 +395,7 @@ return 0 //lets collect the options - var/DBQuery/query_irv_id = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") + var/DBQuery/query_irv_id = GLOB.dbcon.NewQuery("SELECT id FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") if(!query_irv_id.warn_execute()) return 0 var/list/optionlist = list() @@ -426,12 +426,12 @@ sqlrowlist += "(Now(), [pollid], [vote], '[sanitizeSQL(ckey)]', INET_ATON('[sanitizeSQL(address)]'), '[sanitizeSQL(rank)]')" //now lets delete their old votes (if any) - var/DBQuery/query_irv_del_old = dbcon.NewQuery("DELETE FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") + var/DBQuery/query_irv_del_old = GLOB.dbcon.NewQuery("DELETE FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") if(!query_irv_del_old.warn_execute()) return 0 //now to add the new ones. - var/DBQuery/query_irv_vote = dbcon.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime, pollid, optionid, ckey, ip, adminrank) VALUES [sqlrowlist]") + var/DBQuery/query_irv_vote = GLOB.dbcon.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime, pollid, optionid, ckey, ip, adminrank) VALUES [sqlrowlist]") if(!query_irv_vote.warn_execute()) return 0 src << browse(null,"window=playerpoll") @@ -439,7 +439,7 @@ /mob/dead/new_player/proc/vote_on_poll(pollid, optionid) - if (!dbcon.Connect()) + if (!GLOB.dbcon.Connect()) to_chat(src, "Failed to establish database connection.") return 0 if (!vote_rig_check()) @@ -452,14 +452,14 @@ var/adminrank = sanitizeSQL(poll_check_voted(pollid)) if(!adminrank) return - var/DBQuery/query_option_vote = dbcon.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime, pollid, optionid, ckey, ip, adminrank) VALUES (Now(), [pollid], [optionid], '[ckey]', INET_ATON('[client.address]'), '[adminrank]')") + var/DBQuery/query_option_vote = GLOB.dbcon.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime, pollid, optionid, ckey, ip, adminrank) VALUES (Now(), [pollid], [optionid], '[ckey]', INET_ATON('[client.address]'), '[adminrank]')") if(!query_option_vote.warn_execute()) return usr << browse(null,"window=playerpoll") return 1 /mob/dead/new_player/proc/log_text_poll_reply(pollid, replytext) - if (!dbcon.Connect()) + if (!GLOB.dbcon.Connect()) to_chat(src, "Failed to establish database connection.") return 0 if (!vote_rig_check()) @@ -479,14 +479,14 @@ if(!(length(replytext) > 0) || !(length(replytext) <= 8000)) to_chat(usr, "The text you entered was invalid or too long. Please correct the text and submit again.") return - var/DBQuery/query_text_vote = dbcon.NewQuery("INSERT INTO [format_table_name("poll_textreply")] (datetime ,pollid ,ckey ,ip ,replytext ,adminrank) VALUES (Now(), [pollid], '[ckey]', INET_ATON('[client.address]'), '[replytext]', '[adminrank]')") + var/DBQuery/query_text_vote = GLOB.dbcon.NewQuery("INSERT INTO [format_table_name("poll_textreply")] (datetime ,pollid ,ckey ,ip ,replytext ,adminrank) VALUES (Now(), [pollid], '[ckey]', INET_ATON('[client.address]'), '[replytext]', '[adminrank]')") if(!query_text_vote.warn_execute()) return usr << browse(null,"window=playerpoll") return 1 /mob/dead/new_player/proc/vote_on_numval_poll(pollid, optionid, rating) - if (!dbcon.Connect()) + if (!GLOB.dbcon.Connect()) to_chat(src, "Failed to establish database connection.") return 0 if (!vote_rig_check()) @@ -496,7 +496,7 @@ //validate the poll if (!vote_valid_check(pollid, client.holder, POLLTYPE_RATING)) return 0 - var/DBQuery/query_numval_hasvoted = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_vote")] WHERE optionid = [optionid] AND ckey = '[ckey]'") + var/DBQuery/query_numval_hasvoted = GLOB.dbcon.NewQuery("SELECT id FROM [format_table_name("poll_vote")] WHERE optionid = [optionid] AND ckey = '[ckey]'") if(!query_numval_hasvoted.warn_execute()) return if(query_numval_hasvoted.NextRow()) @@ -506,14 +506,14 @@ if(client.holder) adminrank = client.holder.rank.name adminrank = sanitizeSQL(adminrank) - var/DBQuery/query_numval_vote = dbcon.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime ,pollid ,optionid ,ckey ,ip ,adminrank, rating) VALUES (Now(), [pollid], [optionid], '[ckey]', INET_ATON('[client.address]'), '[adminrank]', [(isnull(rating)) ? "null" : rating])") + var/DBQuery/query_numval_vote = GLOB.dbcon.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime ,pollid ,optionid ,ckey ,ip ,adminrank, rating) VALUES (Now(), [pollid], [optionid], '[ckey]', INET_ATON('[client.address]'), '[adminrank]', [(isnull(rating)) ? "null" : rating])") if(!query_numval_vote.warn_execute()) return usr << browse(null,"window=playerpoll") return 1 /mob/dead/new_player/proc/vote_on_multi_poll(pollid, optionid) - if (!dbcon.Connect()) + if (!GLOB.dbcon.Connect()) to_chat(src, "Failed to establish database connection.") return 0 if (!vote_rig_check()) @@ -523,13 +523,13 @@ //validate the poll if (!vote_valid_check(pollid, client.holder, POLLTYPE_MULTI)) return 0 - var/DBQuery/query_multi_choicelen = dbcon.NewQuery("SELECT multiplechoiceoptions FROM [format_table_name("poll_question")] WHERE id = [pollid]") + var/DBQuery/query_multi_choicelen = GLOB.dbcon.NewQuery("SELECT multiplechoiceoptions FROM [format_table_name("poll_question")] WHERE id = [pollid]") if(!query_multi_choicelen.warn_execute()) return 1 var/i if(query_multi_choicelen.NextRow()) i = text2num(query_multi_choicelen.item[1]) - var/DBQuery/query_multi_hasvoted = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") + var/DBQuery/query_multi_hasvoted = GLOB.dbcon.NewQuery("SELECT id FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") if(!query_multi_hasvoted.warn_execute()) return 1 while(i) @@ -543,7 +543,7 @@ if(client.holder) adminrank = client.holder.rank.name adminrank = sanitizeSQL(adminrank) - var/DBQuery/query_multi_vote = dbcon.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime, pollid, optionid, ckey, ip, adminrank) VALUES (Now(), [pollid], [optionid], '[ckey]', INET_ATON('[client.address]'), '[adminrank]')") + var/DBQuery/query_multi_vote = GLOB.dbcon.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime, pollid, optionid, ckey, ip, adminrank) VALUES (Now(), [pollid], [optionid], '[ckey]', INET_ATON('[client.address]'), '[adminrank]')") if(!query_multi_vote.warn_execute()) return 1 usr << browse(null,"window=playerpoll") diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm index f2406a7d14..4810b666e7 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -26,7 +26,7 @@ // Silicons only need a very basic preview since there is no customization for them. if(job_engsec_high) switch(job_engsec_high) - if(AI) + if(AI_JF) preview_icon = icon('icons/mob/AI.dmi', "AI", SOUTH) preview_icon.Scale(64, 64) return diff --git a/code/modules/mob/dead/new_player/sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories.dm index 45dbdc9f69..c38c1c2d3d 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories.dm @@ -812,7 +812,7 @@ gender = FEMALE /datum/sprite_accessory/undershirt/lover - name = "Lover shirt" + name = "Lover Shirt" icon_state = "lover" gender = NEUTER diff --git a/code/modules/mob/dead/observer/logout.dm b/code/modules/mob/dead/observer/logout.dm index 698329a70f..ad94dbecc8 100644 --- a/code/modules/mob/dead/observer/logout.dm +++ b/code/modules/mob/dead/observer/logout.dm @@ -1,6 +1,7 @@ /mob/dead/observer/Logout() if (client) - client.images -= ghost_darkness_images + client.images -= (GLOB.ghost_images_default+GLOB.ghost_images_simple) + if(observetarget) if(ismob(observetarget)) var/mob/target = observetarget diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index a24809bbb2..4175f75744 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -1,9 +1,7 @@ -var/list/image/ghost_darkness_images = list() //this is a list of images for things ghosts should still be able to see when they toggle darkness, BUT NOT THE GHOSTS THEMSELVES! -var/list/image/ghost_images_full = list() //this is a list of full images of the ghosts themselves -var/list/image/ghost_images_default = list() //this is a list of the default (non-accessorized, non-dir) images of the ghosts themselves -var/list/image/ghost_images_simple = list() //this is a list of all ghost images as the simple white ghost +GLOBAL_LIST_EMPTY(ghost_images_default) //this is a list of the default (non-accessorized, non-dir) images of the ghosts themselves +GLOBAL_LIST_EMPTY(ghost_images_simple) //this is a list of all ghost images as the simple white ghost -var/global/static/observer_default_invisibility = INVISIBILITY_OBSERVER +GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) /mob/dead/observer name = "ghost" @@ -19,8 +17,6 @@ var/global/static/observer_default_invisibility = INVISIBILITY_OBSERVER see_invisible = SEE_INVISIBLE_OBSERVER see_in_dark = 100 invisibility = INVISIBILITY_OBSERVER - languages_spoken = ALL - languages_understood = ALL var/can_reenter_corpse var/datum/hud/living/carbon/hud = null // hud var/bootime = 0 @@ -29,11 +25,9 @@ var/global/static/observer_default_invisibility = INVISIBILITY_OBSERVER //Note that this is not a reliable way to determine if admins started as observers, since they change mobs a lot. var/atom/movable/following = null var/fun_verbs = 0 - var/image/ghostimage = null //this mobs ghost image, for deleting and stuff var/image/ghostimage_default = null //this mobs ghost image without accessories and dirs var/image/ghostimage_simple = null //this mob with the simple white ghost sprite var/ghostvision = 1 //is the ghost able to see things humans can't? - var/seedarkness = 1 var/mob/observetarget = null //The target mob that the ghost is observing. Used as a reference in logout() var/ghost_hud_enabled = 1 //did this ghost disable the on-screen HUD? var/data_huds_on = 0 //Are data HUDs currently enabled? @@ -60,22 +54,24 @@ var/global/static/observer_default_invisibility = INVISIBILITY_OBSERVER var/deadchat_name /mob/dead/observer/Initialize() - invisibility = observer_default_invisibility + invisibility = GLOB.observer_default_invisibility verbs += /mob/dead/observer/proc/dead_tele if(config.cross_allowed) verbs += /mob/dead/observer/proc/server_hop - ghostimage = image(src.icon,src,src.icon_state) - if(icon_state in ghost_forms_with_directions_list) + if(icon_state in GLOB.ghost_forms_with_directions_list) ghostimage_default = image(src.icon,src,src.icon_state + "_nodir") else ghostimage_default = image(src.icon,src,src.icon_state) + ghostimage_default.override = TRUE + GLOB.ghost_images_default |= ghostimage_default + ghostimage_simple = image(src.icon,src,"ghost_nodir") - ghost_images_full |= ghostimage - ghost_images_default |= ghostimage_default - ghost_images_simple |= ghostimage_simple + ghostimage_simple.override = TRUE + GLOB.ghost_images_simple |= ghostimage_simple + updateallghostimages() var/turf/T @@ -123,6 +119,8 @@ var/global/static/observer_default_invisibility = INVISIBILITY_OBSERVER verbs -= /mob/dead/observer/verb/possess animate(src, pixel_y = 2, time = 10, loop = -1) + + grant_all_languages() ..() /mob/dead/observer/narsie_act() @@ -137,16 +135,11 @@ var/global/static/observer_default_invisibility = INVISIBILITY_OBSERVER animate(src, color = old_color, time = 10) addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 10) -/mob/dead/observer/Destroy() - ghost_images_full -= ghostimage - qdel(ghostimage) - ghostimage = null - - ghost_images_default -= ghostimage_default + GLOB.ghost_images_default -= ghostimage_default qdel(ghostimage_default) ghostimage_default = null - ghost_images_simple -= ghostimage_simple + GLOB.ghost_images_simple -= ghostimage_simple qdel(ghostimage_simple) ghostimage_simple = null @@ -170,49 +163,44 @@ var/global/static/observer_default_invisibility = INVISIBILITY_OBSERVER if(hair_image) cut_overlay(hair_image) - ghostimage.add_overlay(hair_image) hair_image = null if(facial_hair_image) cut_overlay(facial_hair_image) - ghostimage.add_overlay(facial_hair_image) facial_hair_image = null if(new_form) icon_state = new_form - ghostimage.icon_state = new_form - if(icon_state in ghost_forms_with_directions_list) + if(icon_state in GLOB.ghost_forms_with_directions_list) ghostimage_default.icon_state = new_form + "_nodir" //if this icon has dirs, the default ghostimage must use its nodir version or clients with the preference set to default sprites only will see the dirs else ghostimage_default.icon_state = new_form - if(ghost_accs >= GHOST_ACCS_DIR && icon_state in ghost_forms_with_directions_list) //if this icon has dirs AND the client wants to show them, we make sure we update the dir on movement + if(ghost_accs >= GHOST_ACCS_DIR && icon_state in GLOB.ghost_forms_with_directions_list) //if this icon has dirs AND the client wants to show them, we make sure we update the dir on movement updatedir = 1 else updatedir = 0 //stop updating the dir in case we want to show accessories with dirs on a ghost sprite without dirs setDir(2 )//reset the dir to its default so the sprites all properly align up - if(ghost_accs == GHOST_ACCS_FULL && icon_state in ghost_forms_with_accessories_list) //check if this form supports accessories and if the client wants to show them + if(ghost_accs == GHOST_ACCS_FULL && icon_state in GLOB.ghost_forms_with_accessories_list) //check if this form supports accessories and if the client wants to show them var/datum/sprite_accessory/S if(facial_hair_style) - S = facial_hair_styles_list[facial_hair_style] + S = GLOB.facial_hair_styles_list[facial_hair_style] if(S) facial_hair_image = image("icon" = S.icon, "icon_state" = "[S.icon_state]", "layer" = -HAIR_LAYER) if(facial_hair_color) facial_hair_image.color = "#" + facial_hair_color facial_hair_image.alpha = 200 add_overlay(facial_hair_image) - ghostimage.add_overlay(facial_hair_image) if(hair_style) - S = hair_styles_list[hair_style] + S = GLOB.hair_styles_list[hair_style] if(S) hair_image = image("icon" = S.icon, "icon_state" = "[S.icon_state]", "layer" = -HAIR_LAYER) if(hair_color) hair_image.color = "#" + hair_color hair_image.alpha = 200 add_overlay(hair_image) - ghostimage.add_overlay(hair_image) /* * Increase the brightness of a color by calculating the average distance between the R, G and B values, @@ -310,14 +298,14 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/dead/observer/Stat() ..() if(statpanel("Status")) - if(ticker && ticker.mode) - for(var/datum/gang/G in ticker.mode.gangs) + if(SSticker && SSticker.mode) + for(var/datum/gang/G in SSticker.mode.gangs) if(G.is_dominating) stat(null, "[G.name] Gang Takeover: [max(G.domination_time_remaining(), 0)]") - if(istype(ticker.mode, /datum/game_mode/blob)) - var/datum/game_mode/blob/B = ticker.mode + if(istype(SSticker.mode, /datum/game_mode/blob)) + var/datum/game_mode/blob/B = SSticker.mode if(B.message_sent) - stat(null, "Blobs to Blob Win: [blobs_legit.len]/[B.blobwincount]") + stat(null, "Blobs to Blob Win: [GLOB.blobs_legit.len]/[B.blobwincount]") /mob/dead/observer/verb/reenter_corpse() set category = "Ghost" @@ -368,7 +356,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp to_chat(usr, "Not when you're not dead!") return var/A - A = input("Area to jump to", "BOOYEA", A) as null|anything in sortedAreas + A = input("Area to jump to", "BOOYEA", A) as null|anything in GLOB.sortedAreas var/area/thearea = A if(!thearea) return @@ -510,35 +498,42 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp set desc = "Toggles your ability to see things only ghosts can see, like other ghosts" set category = "Ghost" ghostvision = !(ghostvision) - updateghostsight() + update_sight() to_chat(usr, "You [(ghostvision?"now":"no longer")] have ghost vision.") /mob/dead/observer/verb/toggle_darkness() set name = "Toggle Darkness" set category = "Ghost" - seedarkness = !(seedarkness) - updateghostsight() + switch(lighting_alpha) + if (LIGHTING_PLANE_ALPHA_VISIBLE) + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE + if (LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE) + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + if (LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE) + lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE + else + lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE -/mob/dead/observer/proc/updateghostsight() + update_sight() + +/mob/dead/observer/update_sight() if(client) ghost_others = client.prefs.ghost_others //A quick update just in case this setting was changed right before calling the proc - if (seedarkness) - see_invisible = SEE_INVISIBLE_OBSERVER - if (!ghostvision || ghost_others <= GHOST_OTHERS_DEFAULT_SPRITE) - see_invisible = SEE_INVISIBLE_LIVING + if (!ghostvision) + see_invisible = SEE_INVISIBLE_LIVING else - see_invisible = SEE_INVISIBLE_NOLIGHTING + see_invisible = SEE_INVISIBLE_OBSERVER + updateghostimages() + ..() /proc/updateallghostimages() - listclearnulls(ghost_images_full) - listclearnulls(ghost_images_default) - listclearnulls(ghost_images_simple) - listclearnulls(ghost_darkness_images) + listclearnulls(GLOB.ghost_images_default) + listclearnulls(GLOB.ghost_images_simple) - for (var/mob/dead/observer/O in player_list) + for (var/mob/dead/observer/O in GLOB.player_list) O.updateghostimages() /mob/dead/observer/proc/updateghostimages() @@ -547,34 +542,19 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(lastsetting) switch(lastsetting) //checks the setting we last came from, for a little efficiency so we don't try to delete images from the client that it doesn't have anyway - if(GHOST_OTHERS_THEIR_SETTING) - client.images -= ghost_images_full if(GHOST_OTHERS_DEFAULT_SPRITE) - client.images -= ghost_images_default + client.images -= GLOB.ghost_images_default if(GHOST_OTHERS_SIMPLE) - client.images -= ghost_images_simple - - if ((seedarkness || !ghostvision) && client.prefs.ghost_others == GHOST_OTHERS_THEIR_SETTING) - client.images -= ghost_darkness_images - lastsetting = null - else if(ghostvision && (!seedarkness || client.prefs.ghost_others <= GHOST_OTHERS_DEFAULT_SPRITE)) - //add images for the 60inv things ghosts can normally see when darkness is enabled so they can see them now - if(!lastsetting) - client.images |= ghost_darkness_images + client.images -= GLOB.ghost_images_simple + lastsetting = client.prefs.ghost_others + if(!ghostvision) + return + if(client.prefs.ghost_others != GHOST_OTHERS_THEIR_SETTING) switch(client.prefs.ghost_others) - if(GHOST_OTHERS_THEIR_SETTING) - client.images |= ghost_images_full - if (ghostimage) - client.images -= ghostimage //remove ourself if(GHOST_OTHERS_DEFAULT_SPRITE) - client.images |= ghost_images_default - if(ghostimage_default) - client.images -= ghostimage_default + client.images |= (GLOB.ghost_images_default-ghostimage_default) if(GHOST_OTHERS_SIMPLE) - client.images |= ghost_images_simple - if(ghostimage_simple) - client.images -= ghostimage_simple - lastsetting = client.prefs.ghost_others + client.images |= (GLOB.ghost_images_simple-ghostimage_simple) /mob/dead/observer/verb/possess() set category = "Ghost" @@ -582,8 +562,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp set desc= "Take over the body of a mindless creature!" var/list/possessible = list() - for(var/mob/living/L in living_mob_list) - if(!(L in player_list) && !L.mind) + for(var/mob/living/L in GLOB.living_mob_list) + if(!(L in GLOB.player_list) && !L.mind) possessible += L var/mob/living/target = input("Your new life begins today!", "Possess Mob", null, null) as null|anything in possessible @@ -595,7 +575,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp to_chat(src, "This creature is too powerful for you to possess!") return 0 - if(can_reenter_corpse || (mind && mind.current)) + if(can_reenter_corpse && mind && mind.current) if(alert(src, "Your soul is still tied to your former life as [mind.current.name], if you go forward there is no going back to that life. Are you sure you wish to continue?", "Move On", "Yes", "No") == "No") return 0 if(target.key) @@ -631,7 +611,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /proc/show_server_hop_transfer_screen(expected_key) //only show it to incoming ghosts - for(var/mob/dead/observer/O in player_list) + for(var/mob/dead/observer/O in GLOB.player_list) if(O.key == expected_key) if(O.client) new /obj/screen/splash(O.client, TRUE) @@ -652,7 +632,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp var/dat dat += "

    Crew Manifest

    " - dat += data_core.get_manifest() + dat += GLOB.data_core.get_manifest() src << browse(dat, "window=manifest;size=387x420;can_close=1") @@ -692,12 +672,12 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/dead/observer/proc/show_data_huds() for(var/hudtype in datahuds) - var/datum/atom_hud/H = huds[hudtype] + var/datum/atom_hud/H = GLOB.huds[hudtype] H.add_hud_to(src) /mob/dead/observer/proc/remove_data_huds() for(var/hudtype in datahuds) - var/datum/atom_hud/H = huds[hudtype] + var/datum/atom_hud/H = GLOB.huds[hudtype] H.remove_hud_from(src) /mob/dead/observer/verb/toggle_data_huds() @@ -742,7 +722,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp update_icon() -/mob/dead/observer/canUseTopic() +/mob/dead/observer/canUseTopic(atom/movable/AM,be_close = FALSE) if(check_rights(R_ADMIN, 0)) return 1 return @@ -754,11 +734,9 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp . = ..() switch(var_name) if("icon") - ghostimage.icon = icon ghostimage_default.icon = icon ghostimage_simple.icon = icon if("icon_state") - ghostimage.icon_state = icon_state ghostimage_default.icon_state = icon_state ghostimage_simple.icon_state = icon_state if("fun_verbs") @@ -805,7 +783,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(mob_eye.hud_used) LAZYINITLIST(mob_eye.observers) mob_eye.observers |= src - mob_eye.hud_used.show_hud(1,src) + mob_eye.hud_used.show_hud(mob_eye.hud_used.hud_version, src) observetarget = mob_eye /mob/dead/observer/verb/register_pai_candidate() @@ -826,9 +804,14 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(isobserver(user) && check_rights(R_SPAWN)) change_mob_type( /mob/living/carbon/human , null, null, TRUE) //always delmob, ghosts shouldn't be left lingering +/mob/dead/observer/examine(mob/user) + ..() + if(!invisibility) + to_chat(user, "It seems extremely obvious.") + /proc/set_observer_default_invisibility(amount, message=null) - for(var/mob/dead/observer/G in player_list) + for(var/mob/dead/observer/G in GLOB.player_list) G.invisibility = amount if(message) to_chat(G, message) - observer_default_invisibility = amount + GLOB.observer_default_invisibility = amount diff --git a/code/modules/mob/dead/observer/say.dm b/code/modules/mob/dead/observer/say.dm index f3b9ca7d3d..8675049cee 100644 --- a/code/modules/mob/dead/observer/say.dm +++ b/code/modules/mob/dead/observer/say.dm @@ -8,15 +8,18 @@ . = src.say_dead(message) -/mob/dead/observer/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans) +/mob/dead/observer/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) + var/atom/movable/to_follow = speaker if(radio_freq) var/atom/movable/virtualspeaker/V = speaker if(isAI(V.source)) var/mob/living/silicon/ai/S = V.source - speaker = S.eyeobj + to_follow = S.eyeobj else - speaker = V.source - var/link = FOLLOW_LINK(src, speaker) + to_follow = V.source + var/link = FOLLOW_LINK(src, to_follow) + // Recompose the message, because it's scrambled by default + message = compose_message(speaker, message_language, raw_message, radio_freq, spans) to_chat(src, "[link] [message]") diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 6bef611a65..2c3b8bdbd4 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -280,14 +280,15 @@ //visibly unequips I but it is NOT MOVED AND REMAINS IN SRC //item MUST BE FORCEMOVE'D OR QDEL'D -/mob/proc/temporarilyRemoveItemFromInventory(obj/item/I, force = FALSE) - return doUnEquip(I, force, null, TRUE) +/mob/proc/temporarilyRemoveItemFromInventory(obj/item/I, force = FALSE, idrop = TRUE) + return doUnEquip(I, force, null, TRUE, idrop) //DO NOT CALL THIS PROC //use one of the above 2 helper procs //you may override it, but do not modify the args -/mob/proc/doUnEquip(obj/item/I, force, newloc, no_move) //Force overrides NODROP for things like wizarditis and admin undress. +/mob/proc/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE) //Force overrides NODROP for things like wizarditis and admin undress. //Use no_move if the item is just gonna be immediately moved afterward + //Invdrop is used to prevent stuff in pockets dropping. only set to false if it's going to immediately be replaced if(!I) //If there's nothing to drop, the drop is automatically succesfull. If(unEquip) should generally be used to check for NODROP. return TRUE @@ -346,7 +347,12 @@ items += w_uniform return items - +/mob/living/proc/unequip_everything() + var/list/items = list() + items |= get_equipped_items() + for(var/I in items) + dropItemToGround(I) + drop_all_held_items() /obj/item/proc/equip_to_best_slot(var/mob/M) if(src != M.get_active_held_item()) diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm index 100bec5cb9..397824d830 100644 --- a/code/modules/mob/living/brain/MMI.dm +++ b/code/modules/mob/living/brain/MMI.dm @@ -1,5 +1,3 @@ - - /obj/item/device/mmi name = "Man-Machine Interface" desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity, that nevertheless has become standard-issue on Nanotrasen stations." @@ -66,8 +64,8 @@ brainmob.container = src if(!newbrain.damaged_brain) // the brain organ hasn't been beaten to death. brainmob.stat = CONSCIOUS //we manually revive the brain mob - dead_mob_list -= brainmob - living_mob_list += brainmob + GLOB.dead_mob_list -= brainmob + GLOB.living_mob_list += brainmob brainmob.reset_perspective() brain = newbrain @@ -99,8 +97,8 @@ brainmob.stat = DEAD brainmob.emp_damage = 0 brainmob.reset_perspective() //so the brainmob follows the brain organ instead of the mmi. And to update our vision - living_mob_list -= brainmob //Get outta here - dead_mob_list += brainmob + GLOB.living_mob_list -= brainmob //Get outta here + GLOB.dead_mob_list += brainmob brain.brainmob = brainmob //Set the brain to use the brainmob brainmob = null //Set mmi brainmob var to null if(user) diff --git a/code/modules/mob/living/brain/brain.dm b/code/modules/mob/living/brain/brain.dm index 089efe4444..33c3d00d2e 100644 --- a/code/modules/mob/living/brain/brain.dm +++ b/code/modules/mob/living/brain/brain.dm @@ -1,8 +1,6 @@ /mob/living/brain - languages_spoken = HUMAN - languages_understood = HUMAN var/obj/item/device/mmi/container = null var/timeofhostdeath = 0 var/emp_damage = 0//Handles a type of MMI damage @@ -64,4 +62,4 @@ /mob/living/brain/fully_replace_character_name(oldname,newname) ..() if(stored_dna) - stored_dna.real_name = real_name \ No newline at end of file + stored_dna.real_name = real_name diff --git a/code/modules/mob/living/brain/emote.dm b/code/modules/mob/living/brain/emote.dm index d9b57670fe..aaee807402 100644 --- a/code/modules/mob/living/brain/emote.dm +++ b/code/modules/mob/living/brain/emote.dm @@ -20,7 +20,7 @@ /datum/emote/brain/flash key = "flash" - message = "lights' blink." + message = "blinks their lights." /datum/emote/brain/notice key = "notice" diff --git a/code/modules/mob/living/brain/posibrain.dm b/code/modules/mob/living/brain/posibrain.dm index 483f907639..a075c80e5c 100644 --- a/code/modules/mob/living/brain/posibrain.dm +++ b/code/modules/mob/living/brain/posibrain.dm @@ -1,4 +1,4 @@ -var/global/posibrain_notif_cooldown = 0 +GLOBAL_VAR(posibrain_notify_cooldown) /obj/item/device/mmi/posibrain name = "positronic brain" @@ -7,11 +7,11 @@ var/global/posibrain_notif_cooldown = 0 icon_state = "posibrain" w_class = WEIGHT_CLASS_NORMAL origin_tech = "biotech=3;programming=3;plasmatech=2" - var/notified = 0 + var/next_ask var/askDelay = 600 //one minute - var/used = 0 //Prevents split personality virus. May be reset if personality deletion code is added. + var/searching = FALSE brainmob = null - req_access = list(access_robotics) + req_access = list(GLOB.access_robotics) mecha = null//This does not appear to be used outside of reference in mecha.dm. braintype = "Android" var/autoping = TRUE //if it pings on creation immediately @@ -25,9 +25,8 @@ var/global/posibrain_notif_cooldown = 0 Remember, the purpose of your existence is to serve the crew and the station. Above all else, do no harm." var/new_mob_message = "The positronic brain chimes quietly." var/dead_message = "It appears to be completely inactive. The reset light is blinking." - var/list/fluff_names = 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","JNLG","KOS","TKRG","XAL","STLP","CBOS","DUNC","FXMC","DRSD") - var/picked_fluff_name //which fluff name we picked - + var/list/possible_names //If you leave this blank, it will use the global posibrain names + var/picked_name /obj/item/device/mmi/posibrain/Topic(href, href_list) if(href_list["activate"]) @@ -36,42 +35,42 @@ var/global/posibrain_notif_cooldown = 0 activate(ghost) /obj/item/device/mmi/posibrain/proc/ping_ghosts(msg, newlymade) - if(newlymade || !posibrain_notif_cooldown) + if(newlymade || GLOB.posibrain_notify_cooldown <= world.time) notify_ghosts("[name] [msg] in [get_area(src)]!", ghost_sound = !newlymade ? 'sound/effects/ghost2.ogg':null, enter_link = "(Click to enter)", source = src, action = NOTIFY_ATTACK, flashwindow = FALSE) if(!newlymade) - posibrain_notif_cooldown = 1 - addtimer(CALLBACK(src, .proc/reset_posibrain_cooldown), askDelay) - -/obj/item/device/mmi/posibrain/proc/reset_posibrain_cooldown() - posibrain_notif_cooldown = 0 + GLOB.posibrain_notify_cooldown = world.time + askDelay /obj/item/device/mmi/posibrain/attack_self(mob/user) - if(brainmob && !brainmob.key && !notified) - //Start the process of requesting a new ghost. - to_chat(user, begin_activation_message) - ping_ghosts("requested", FALSE) - notified = 1 - used = 0 - update_icon() - spawn(askDelay) //Seperate from the global cooldown. - notified = 0 - update_icon() - if(brainmob.client) - visible_message(success_message) - else - visible_message(fail_message) - - return //Code for deleting personalities recommended here. + if(!brainmob || brainmob.key) + return + if(next_ask > world.time) + return + //Start the process of requesting a new ghost. + to_chat(user, begin_activation_message) + ping_ghosts("requested", FALSE) + next_ask = world.time + askDelay + searching = TRUE + addtimer(CALLBACK(src, .proc/check_success), askDelay) +/obj/item/device/mmi/posibrain/proc/check_success() + searching = FALSE + update_icon() + if(QDELETED(brainmob)) + return + if(brainmob.client) + visible_message(success_message) + else + visible_message(fail_message) /obj/item/device/mmi/posibrain/attack_ghost(mob/user) activate(user) //Two ways to activate a positronic brain. A clickable link in the ghost notif, or simply clicking the object itself. /obj/item/device/mmi/posibrain/proc/activate(mob/user) - if(used || (brainmob && brainmob.key) || jobban_isbanned(user,"posibrain")) + if(QDELETED(brainmob)) + return + if(brainmob.key || jobban_isbanned(user,"posibrain")) return - var/posi_ask = alert("Become a [name]? (Warning, You can no longer be cloned, and all past lives will be forgotten!)","Are you positive?","Yes","No") if(posi_ask == "No" || QDELETED(src)) return @@ -97,10 +96,11 @@ var/global/posibrain_notif_cooldown = 0 update_icon() /obj/item/device/mmi/posibrain/proc/transfer_personality(mob/candidate) - if(used || (brainmob && brainmob.key)) //Prevents hostile takeover if two ghosts get the prompt or link for the same brain. + if(QDELETED(brainmob)) + return + if(brainmob.key) //Prevents hostile takeover if two ghosts get the prompt or link for the same brain. to_chat(candidate, "This brain has already been taken! Please try your possession again later!") return FALSE - notified = 0 if(candidate.mind && !isobserver(candidate)) candidate.mind.transfer_to(brainmob) else @@ -109,12 +109,11 @@ var/global/posibrain_notif_cooldown = 0 to_chat(brainmob, welcome_message) brainmob.mind.assigned_role = new_role brainmob.stat = CONSCIOUS - dead_mob_list -= brainmob - living_mob_list += brainmob + GLOB.dead_mob_list -= brainmob + GLOB.living_mob_list += brainmob visible_message(new_mob_message) update_icon() - used = 1 return TRUE @@ -124,7 +123,7 @@ var/global/posibrain_notif_cooldown = 0 if(brainmob && brainmob.key) switch(brainmob.stat) if(CONSCIOUS) - if(!src.brainmob.client) + if(!brainmob.client) msg = "It appears to be in stand-by mode." //afk if(DEAD) msg = "It appears to be completely inactive." @@ -133,24 +132,27 @@ var/global/posibrain_notif_cooldown = 0 to_chat(user, msg) -/obj/item/device/mmi/posibrain/New() +/obj/item/device/mmi/posibrain/Initialize() + ..() brainmob = new(src) - picked_fluff_name = pick(fluff_names) - brainmob.name = "[picked_fluff_name]-[rand(100, 999)]" + var/new_name + if(!LAZYLEN(possible_names)) + new_name = pick(GLOB.posibrain_names) + else + new_name = pick(possible_names) + brainmob.name = "[new_name]-[rand(100, 999)]" brainmob.real_name = brainmob.name brainmob.loc = src brainmob.container = src if(autoping) ping_ghosts("created", TRUE) - ..() - /obj/item/device/mmi/posibrain/attackby(obj/item/O, mob/user) return /obj/item/device/mmi/posibrain/update_icon() - if(notified) + if(searching) icon_state = "[initial(icon_state)]-searching" return if(brainmob && brainmob.key) diff --git a/code/modules/mob/living/brain/say.dm b/code/modules/mob/living/brain/say.dm index 632716e777..5751c65b36 100644 --- a/code/modules/mob/living/brain/say.dm +++ b/code/modules/mob/living/brain/say.dm @@ -1,4 +1,4 @@ -/mob/living/brain/say(message) +/mob/living/brain/say(message, language) if(!(container && istype(container, /obj/item/device/mmi))) return //No MMI, can't speak, bucko./N else @@ -7,16 +7,17 @@ return else message = Gibberish(message, (emp_damage*6))//scrambles the message, gets worse when emp_damage is higher + ..() /mob/living/brain/get_spans() return ..() | SPAN_ROBOT -/mob/living/brain/radio(message, message_mode, list/spans) +/mob/living/brain/radio(message, message_mode, list/spans, language) if(message_mode && istype(container, /obj/item/device/mmi)) var/obj/item/device/mmi/R = container if(R.radio) - R.radio.talk_into(src, message, , spans) + R.radio.talk_into(src, message, , get_spans(), language) return ITALICS | REDUCE_RANGE /mob/living/brain/lingcheck() @@ -24,4 +25,12 @@ /mob/living/brain/treat_message(message) message = capitalize(message) - return message \ No newline at end of file + return message + +/mob/living/brain/can_speak_in_language(datum/language/dt) + if(HAS_SECONDARY_FLAG(src, OMNITONGUE)) + . = has_language(dt) + else if(istype(container, /obj/item/device/mmi/posibrain/soul_vessel)) + . = has_language(dt) && ispath(dt, /datum/language/ratvar) + else + . = ..() diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index a86fcbfdc9..d4eebe34d9 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -11,15 +11,13 @@ dna = null faction = list("alien") ventcrawler = VENTCRAWLER_ALWAYS - languages_spoken = ALIEN - languages_understood = ALIEN sight = SEE_MOBS see_in_dark = 4 verb_say = "hisses" + initial_languages = list(/datum/language/xenocommon) bubble_icon = "alien" type_of_meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno var/nightvision = 1 - devourable = 1 var/obj/item/weapon/card/id/wear_id = null // Fix for station bounced radios -- Skie var/has_fine_manipulation = 0 @@ -111,7 +109,7 @@ Des: Gives the client of the alien an image on each infected mob. ----------------------------------------*/ /mob/living/carbon/alien/proc/AddInfectionImages() if (client) - for (var/mob/living/C in mob_list) + for (var/mob/living/C in GLOB.mob_list) if(C.status_flags & XENO_HOST) var/obj/item/organ/body_egg/alien_embryo/A = C.getorgan(/obj/item/organ/body_egg/alien_embryo) if(A) diff --git a/code/modules/mob/living/carbon/alien/alien_defense.dm b/code/modules/mob/living/carbon/alien/alien_defense.dm index c2eb0a23b9..1451b07663 100644 --- a/code/modules/mob/living/carbon/alien/alien_defense.dm +++ b/code/modules/mob/living/carbon/alien/alien_defense.dm @@ -74,7 +74,8 @@ In all, this is a lot like the monkey code. /N /mob/living/carbon/alien/attack_animal(mob/living/simple_animal/M) - if(..()) + . = ..() + if(.) var/damage = rand(M.melee_damage_lower, M.melee_damage_upper) switch(M.melee_damage_type) if(BRUTE) @@ -89,7 +90,6 @@ In all, this is a lot like the monkey code. /N adjustCloneLoss(damage) if(STAMINA) adjustStaminaLoss(damage) - updatehealth() /mob/living/carbon/alien/attack_slime(mob/living/simple_animal/slime/M) if(..()) //successful slime attack diff --git a/code/modules/mob/living/carbon/alien/emote.dm b/code/modules/mob/living/carbon/alien/emote.dm deleted file mode 100644 index e97bb785bf..0000000000 --- a/code/modules/mob/living/carbon/alien/emote.dm +++ /dev/null @@ -1,30 +0,0 @@ -/datum/emote/living/alien - mob_type_allowed_typecache = list(/mob/living/carbon/alien) - -/datum/emote/living/alien/gnarl - key = "gnarl" - key_third_person = "gnarls" - message = "gnarls and shows its teeth..." - -/datum/emote/living/alien/hiss - key = "hiss" - key_third_person = "hisses" - message_alien = "hisses." - message_larva = "hisses softly." - -/datum/emote/living/alien/hiss/run_emote(mob/user, params) - . = ..() - if(. && isalienadult(user)) - playsound(user.loc, "hiss", 40, 1, 1) - -/datum/emote/living/alien/roar - key = "roar" - key_third_person = "roars" - message_alien = "roars" - message_larva = "softly roars" - emote_type = EMOTE_AUDIBLE - -/datum/emote/living/alien/roar/run_emote(mob/user, params) - . = ..() - if(. && isalienadult(user)) - playsound(user.loc, 'sound/voice/hiss5.ogg', 40, 1, 1) \ No newline at end of file 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 2ae25c71ee..6cfd8473dd 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm @@ -87,7 +87,7 @@ Doesn't work on other aliens/AI.*/ log_say("AlienWhisper: [key_name(user)]->[M.key] : [msg]") to_chat(M, "You hear a strange, alien voice in your head...[msg]") to_chat(user, "You said: \"[msg]\" to [M]") - for(var/ded in dead_mob_list) + for(var/ded in GLOB.dead_mob_list) if(!isobserver(ded)) continue var/follow_link_user = FOLLOW_LINK(ded, user) diff --git a/code/modules/mob/living/carbon/alien/humanoid/death.dm b/code/modules/mob/living/carbon/alien/humanoid/death.dm index f92facb5c8..0587433b80 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/death.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/death.dm @@ -13,7 +13,7 @@ if(stat == DEAD) return - for(var/mob/living/carbon/C in living_mob_list) + for(var/mob/living/carbon/C in GLOB.living_mob_list) if(C == src) //Make sure not to proc it on ourselves. continue var/obj/item/organ/alien/hivenode/node = C.getorgan(/obj/item/organ/alien/hivenode) diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 9c83bf6b29..392bdfedbc 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -108,7 +108,7 @@ //For alien evolution/promotion/queen finder procs. Checks for an active alien of that type /proc/get_alien_type(var/alienpath) - for(var/mob/living/carbon/alien/humanoid/A in living_mob_list) + for(var/mob/living/carbon/alien/humanoid/A in GLOB.living_mob_list) if(!istype(A, alienpath)) continue if(!A.key || A.stat == DEAD) //Only living aliens with a ckey are valid. diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm index 0a5f5901f9..c0f07b0e15 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm @@ -46,7 +46,7 @@ /mob/living/carbon/alien/humanoid/royal/queen/Initialize() //there should only be one queen - for(var/mob/living/carbon/alien/humanoid/royal/queen/Q in living_mob_list) + for(var/mob/living/carbon/alien/humanoid/royal/queen/Q in GLOB.living_mob_list) if(Q == src) continue if(Q.stat == DEAD) diff --git a/code/modules/mob/living/carbon/alien/say.dm b/code/modules/mob/living/carbon/alien/say.dm index ca63321012..72162387ee 100644 --- a/code/modules/mob/living/carbon/alien/say.dm +++ b/code/modules/mob/living/carbon/alien/say.dm @@ -5,10 +5,10 @@ var/message_a = say_quote(message, get_spans()) var/rendered = "Hivemind, [shown_name] [message_a]" - for(var/mob/S in player_list) + for(var/mob/S in GLOB.player_list) if(!S.stat && S.hivecheck()) to_chat(S, rendered) - if(S in dead_mob_list) + if(S in GLOB.dead_mob_list) var/link = FOLLOW_LINK(S, src) to_chat(S, "[link] [rendered]") diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm index a1bada7996..2823e56d00 100644 --- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm +++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm @@ -117,7 +117,7 @@ Proc: AddInfectionImages(C) Des: Adds the infection image to all aliens for this embryo ----------------------------------------*/ /obj/item/organ/body_egg/alien_embryo/AddInfectionImages() - for(var/mob/living/carbon/alien/alien in player_list) + for(var/mob/living/carbon/alien/alien in GLOB.player_list) if(alien.client) var/I = image('icons/mob/alien.dmi', loc = owner, icon_state = "infected[stage]") alien.client.images += I @@ -127,7 +127,7 @@ Proc: RemoveInfectionImage(C) Des: Removes all images from the mob infected by this embryo ----------------------------------------*/ /obj/item/organ/body_egg/alien_embryo/RemoveInfectionImages() - for(var/mob/living/carbon/alien/alien in player_list) + for(var/mob/living/carbon/alien/alien in GLOB.player_list) if(alien.client) for(var/image/I in alien.client.images) if(dd_hasprefix_case(I.icon_state, "infected") && I.loc == owner) diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index 3976cf2c2e..5664b6c489 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -2,11 +2,11 @@ //TODO: Make these simple_animals -var/const/MIN_IMPREGNATION_TIME = 100 //time it takes to impregnate someone -var/const/MAX_IMPREGNATION_TIME = 150 +#define MIN_IMPREGNATION_TIME 100 //time it takes to impregnate someone +#define MAX_IMPREGNATION_TIME 150 -var/const/MIN_ACTIVE_TIME = 200 //time between being dropped and going idle -var/const/MAX_ACTIVE_TIME = 400 +#define MIN_ACTIVE_TIME 200 //time between being dropped and going idle +#define MAX_ACTIVE_TIME 400 /obj/item/clothing/mask/facehugger name = "alien" @@ -152,14 +152,6 @@ var/const/MAX_ACTIVE_TIME = 400 // probiscis-blocker handling if(iscarbon(M)) var/mob/living/carbon/target = M - if(target.wear_mask) - var/obj/item/clothing/W = target.wear_mask - if(W.flags & NODROP) - return FALSE - if(!istype(W,/obj/item/clothing/mask/facehugger)) - target.dropItemToGround(W) - target.visible_message("[src] tears [W] off of [target]'s face!", \ - "[src] tears [W] off of [target]'s face!") if(ishuman(M)) var/mob/living/carbon/human/H = M @@ -168,6 +160,12 @@ var/const/MAX_ACTIVE_TIME = 400 "[src] smashes against [H]'s [H.head]!") Die() return FALSE + + if(target.wear_mask) + var/obj/item/clothing/W = target.wear_mask + if(!istype(W,/obj/item/clothing/mask/facehugger) && target.dropItemToGround(W)) + target.visible_message("[src] tears [W] off of [target]'s face!", \ + "[src] tears [W] off of [target]'s face!") forceMove(target) target.equip_to_slot_if_possible(src, slot_wear_mask, 0, 1, 1) // early returns and validity checks done: attach. diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 42885bd86c..4fdbecce16 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -522,6 +522,7 @@ return sight = initial(sight) + lighting_alpha = initial(lighting_alpha) var/obj/item/organ/eyes/E = getorganslot("eye_sight") if(!E) update_tint() @@ -529,6 +530,8 @@ see_invisible = E.see_invisible see_in_dark = E.see_in_dark sight |= E.sight_flags + if(!isnull(E.lighting_alpha)) + lighting_alpha = E.lighting_alpha if(client.eye != src) var/atom/A = client.eye @@ -543,6 +546,8 @@ see_invisible = G.invis_override else see_invisible = min(G.invis_view, see_invisible) + if(!isnull(G.lighting_alpha)) + lighting_alpha = min(lighting_alpha, G.lighting_alpha) if(dna) for(var/X in dna.mutations) var/datum/mutation/M = X @@ -552,11 +557,12 @@ if(see_override) see_invisible = see_override + . = ..() //to recalculate and update the mob's total tint from tinted equipment it's wearing. /mob/living/carbon/proc/update_tint() - if(!tinted_weldhelh) + if(!GLOB.tinted_weldhelh) return tinttotal = get_total_tint() if(tinttotal >= TINT_BLIND) diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index 0db62f2258..0cd21170b9 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -44,4 +44,7 @@ /obj/item/bodypart/r_arm, /obj/item/bodypart/r_leg, /obj/item/bodypart/l_leg) //Gets filled up in create_bodyparts() - var/list/hand_bodyparts = list() //a collection of arms (or actually whatever the fug /bodyparts you monsters use to wreck my systems) \ No newline at end of file + var/list/hand_bodyparts = list() //a collection of arms (or actually whatever the fug /bodyparts you monsters use to wreck my systems) + + var/icon_render_key = "" + var/static/list/limb_icon_cache = list() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/carbon_movement.dm b/code/modules/mob/living/carbon/carbon_movement.dm index 703b2840d0..5b1f43d58c 100644 --- a/code/modules/mob/living/carbon/carbon_movement.dm +++ b/code/modules/mob/living/carbon/carbon_movement.dm @@ -19,12 +19,6 @@ if(legcuffed) . += legcuffed.slowdown - -var/const/NO_SLIP_WHEN_WALKING = 1 -var/const/SLIDE = 2 -var/const/GALOSHES_DONT_HELP = 4 -var/const/SLIDE_ICE = 8 - /mob/living/carbon/slip(s_amount, w_amount, obj/O, lube) if(movement_type & FLYING) return 0 diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm index 06c6982b35..9d2e91dd1f 100644 --- a/code/modules/mob/living/carbon/damage_procs.dm +++ b/code/modules/mob/living/carbon/damage_procs.dm @@ -147,8 +147,8 @@ parts -= picked if(updating_health) updatehealth() - if(update) - update_damage_overlays() + if(update) + update_damage_overlays() // damage MANY bodyparts, in random order /mob/living/carbon/take_overall_damage(brute, burn, updating_health = 1) diff --git a/code/modules/mob/living/carbon/death.dm b/code/modules/mob/living/carbon/death.dm index e62195574e..ba757bd713 100644 --- a/code/modules/mob/living/carbon/death.dm +++ b/code/modules/mob/living/carbon/death.dm @@ -9,8 +9,8 @@ emote("deathgasp") . = ..() - if(ticker && ticker.mode) - ticker.mode.check_win() //Calls the rounds wincheck, mainly for wizard, malf, and changeling now + if(SSticker && SSticker.mode) + SSticker.mode.check_win() //Calls the rounds wincheck, mainly for wizard, malf, and changeling now /mob/living/carbon/gib(no_brain, no_organs, no_bodyparts) for(var/mob/M in src) @@ -35,7 +35,7 @@ if(org_zone == "chest") O.Remove(src) O.forceMove(get_turf(src)) - O.throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),5) + O.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)),rand(1,3),5) else for(var/X in internal_organs) var/obj/item/organ/I = X @@ -44,11 +44,11 @@ continue I.Remove(src) I.forceMove(get_turf(src)) - I.throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),5) + I.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)),rand(1,3),5) /mob/living/carbon/spread_bodyparts() for(var/X in bodyparts) var/obj/item/bodypart/BP = X BP.drop_limb() - BP.throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),5) \ No newline at end of file + BP.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)),rand(1,3),5) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index e9c9869d24..daa72b55fb 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -10,8 +10,11 @@ else new /obj/effect/gibspawner/humanbodypartless(loc, viruses, dna) -/mob/living/carbon/human/spawn_dust() - new /obj/effect/decal/remains/human(loc) +/mob/living/carbon/human/spawn_dust(just_ash = FALSE) + if(just_ash) + new /obj/effect/decal/cleanable/ash(loc) + else + new /obj/effect/decal/remains/human(loc) /mob/living/carbon/human/death(gibbed) if(stat == DEAD) @@ -29,7 +32,7 @@ dna.species.spec_death(gibbed, src) - if(ticker && ticker.mode) + if(SSticker && SSticker.mode) sql_report_death(src) if(mind && mind.devilinfo) INVOKE_ASYNC(mind.devilinfo, /datum/devilinfo.proc/beginResurrectionCheck, src) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 1266f94612..8306372125 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -142,7 +142,7 @@ if(!key) var/foundghost = 0 if(mind) - for(var/mob/dead/observer/G in player_list) + for(var/mob/dead/observer/G in GLOB.player_list) if(G.mind == mind) foundghost = 1 if (G.can_reenter_corpse == 0) @@ -257,9 +257,6 @@ msg += "[t_He] looks like a drunken mess.\n" if(91.01 to INFINITY) msg += "[t_He] [t_is] a shitfaced, slobbering wreck.\n" - for (var/I in src.vore_organs) - var/datum/belly/B = vore_organs[I] - msg += B.get_examine_msg() msg += "" @@ -292,7 +289,7 @@ if(istype(H.glasses, /obj/item/clothing/glasses/hud) || CIH) var/perpname = get_face_name(get_id_name("")) if(perpname) - var/datum/data/record/R = find_record("name", perpname, data_core.general) + var/datum/data/record/R = find_record("name", perpname, GLOB.data_core.general) if(R) msg += "Rank: [R.fields["rank"]]
    " msg += "\[Front photo\] " @@ -310,7 +307,7 @@ msg += "\[[health_r]\]" health_r = R.fields["m_stat"] msg += "\[[health_r]\]
    " - R = find_record("name", perpname, data_core.medical) + R = find_record("name", perpname, GLOB.data_core.medical) if(R) msg += "\[Medical evaluation\]
    " @@ -320,7 +317,7 @@ //|| !user.canmove || user.restrained()) Fluff: Sechuds have eye-tracking technology and sets 'arrest' to people that the wearer looks and blinks at. var/criminal = "None" - R = find_record("name", perpname, data_core.security) + R = find_record("name", perpname, GLOB.data_core.security) if(R) criminal = R.fields["criminal"] diff --git a/code/modules/mob/living/carbon/human/examine_vr.dm b/code/modules/mob/living/carbon/human/examine_vr.dm deleted file mode 100644 index 8578db809e..0000000000 --- a/code/modules/mob/living/carbon/human/examine_vr.dm +++ /dev/null @@ -1,54 +0,0 @@ -/mob/living/carbon/human/proc/examine_nutrition() - var/message = "" - var/nutrition_examine = round(nutrition) - var/t_He = "It" //capitalised for use at the start of each line. - var/t_His = "Its" - var/t_his = "its" - var/t_is = "is" - var/t_has = "has" - switch(gender) - if(MALE) - t_He = "He" - t_his = "his" - t_His = "His" - if(FEMALE) - t_He = "She" - t_his = "her" - t_His = "Her" - if(PLURAL) - t_He = "They" - t_his = "their" - t_His = "Their" - t_is = "are" - t_has = "have" - if(NEUTER) - t_He = "It" - t_his = "its" - t_His = "Its" - switch(nutrition_examine) - if(0 to 49) - message = "[t_He] [t_is] starving! You can hear [t_his] stomach snarling from across the room!\n" - if(50 to 99) - message = "[t_He] [t_is] extremely hungry. A deep growl occasionally rumbles from [t_his] empty stomach.\n" - if(100 to 499) - return message //Well that's pretty normal, really. - if(500 to 864) // Fat. - message = "[t_He] [t_has] a stuffed belly, bloated fat and round from eating too much.\n" - if(1200 to 1934) // One person fully digested. - message = "[t_He] [t_is] sporting a large, round, sagging stomach. It's contains at least their body weight worth of glorping slush.\n" - if(1935 to 3004) // Two people. - message = "[t_He] [t_is] engorged with a huge stomach that sags and wobbles as they move. [t_He] must have consumed at least twice their body weight. It looks incredibly soft.\n" - if(3005 to 4074) // Three people. - message = "[t_His] stomach is firmly packed with digesting slop. [t_He] must have eaten at least a few times worth their body weight! It looks hard for them to stand, and [t_his] gut jiggles when they move.\n" - if(4075 to 10000) // Four or more people. - message = "[t_He] [t_is] so absolutely stuffed that you aren't sure how it's possible to move. [t_He] can't seem to swell any bigger. The surface of [t_his] belly looks sorely strained!\n" - return message - -/mob/living/carbon/human/proc/examine_bellies() - var/message = "" - - for (var/I in src.vore_organs) - var/datum/belly/B = vore_organs[I] - message += B.get_examine_msg() - - return message \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 4e6fd5de15..6349e48edc 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -17,6 +17,9 @@ args[1] = FALSE Initialize(arglist(args)) +/mob/living/carbon/human/dummy/Life() + return + /mob/living/carbon/human/Initialize() verbs += /mob/living/proc/mob_sleep verbs += /mob/living/proc/lay_down @@ -39,6 +42,8 @@ handcrafting = new() + grant_language(/datum/language/common) // ME TARZAN, YOU JANEBOT + ..() /mob/living/carbon/human/create_internal_organs() @@ -298,7 +303,7 @@ var/mob/living/carbon/human/H = usr var/perpname = get_face_name(get_id_name("")) if(istype(H.glasses, /obj/item/clothing/glasses/hud) || istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud)) - var/datum/data/record/R = find_record("name", perpname, data_core.general) + var/datum/data/record/R = find_record("name", perpname, GLOB.data_core.general) if(href_list["photo_front"] || href_list["photo_side"]) if(R) if(!H.canUseHUD()) @@ -388,7 +393,7 @@ if (!G.emagged) if(H.wear_id) var/list/access = H.wear_id.GetAccess() - if(access_sec_doors in access) + if(GLOB.access_sec_doors in access) allowed_access = H.get_authentification_name() else allowed_access = "@%&ERROR_%$*" @@ -399,7 +404,7 @@ return if(perpname) - R = find_record("name", perpname, data_core.security) + R = find_record("name", perpname, GLOB.data_core.security) if(R) if(href_list["status"]) var/setcriminal = input(usr, "Specify a new criminal status for this person.", "Security HUD", R.fields["criminal"]) in list("None", "*Arrest*", "Incarcerated", "Parolled", "Discharged", "Cancel") @@ -447,8 +452,8 @@ return else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/security) && !istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/security)) return - var/crime = data_core.createCrimeEntry(t1, t2, allowed_access, worldtime2text()) - data_core.addMinorCrime(R.fields["id"], crime) + var/crime = GLOB.data_core.createCrimeEntry(t1, t2, allowed_access, worldtime2text()) + GLOB.data_core.addMinorCrime(R.fields["id"], crime) to_chat(usr, "Successfully added a minor crime.") return if("Major Crime") @@ -462,8 +467,8 @@ return else if (!istype(H.glasses, /obj/item/clothing/glasses/hud/security) && !istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/security)) return - var/crime = data_core.createCrimeEntry(t1, t2, allowed_access, worldtime2text()) - data_core.addMajorCrime(R.fields["id"], crime) + var/crime = GLOB.data_core.createCrimeEntry(t1, t2, allowed_access, worldtime2text()) + GLOB.data_core.addMajorCrime(R.fields["id"], crime) to_chat(usr, "Successfully added a major crime.") return @@ -494,7 +499,7 @@ var/counter = 1 while(R.fields[text("com_[]", counter)]) counter++ - R.fields[text("com_[]", counter)] = text("Made by [] on [] [], []
    []", allowed_access, worldtime2text(), time2text(world.realtime, "MMM DD"), year_integer+540, t1) + R.fields[text("com_[]", counter)] = text("Made by [] on [] [], []
    []", allowed_access, worldtime2text(), time2text(world.realtime, "MMM DD"), GLOB.year_integer+540, t1) to_chat(usr, "Successfully added comment.") return to_chat(usr, "Unable to locate a data core entry for this person.") @@ -581,7 +586,7 @@ //Check for weapons if(judgebot.weaponscheck) - if(!idcard || !(access_weapons in idcard.access)) + if(!idcard || !(GLOB.access_weapons in idcard.access)) for(var/obj/item/I in held_items) if(judgebot.check_for_weapons(I)) threatcount += 4 @@ -591,7 +596,7 @@ //Check for arrest warrant if(judgebot.check_records) var/perpname = get_face_name(get_id_name()) - var/datum/data/record/R = find_record("name", perpname, data_core.security) + var/datum/data/record/R = find_record("name", perpname, GLOB.data_core.security) if(R && R.fields["criminal"]) switch(R.fields["criminal"]) if("*Arrest*") @@ -765,7 +770,7 @@ ..() /mob/living/carbon/human/replace_records_name(oldname,newname) // Only humans have records right now, move this up if changed. - for(var/list/L in list(data_core.general,data_core.medical,data_core.security,data_core.locked)) + for(var/list/L in list(GLOB.data_core.general,GLOB.data_core.medical,GLOB.data_core.security,GLOB.data_core.locked)) var/datum/data/record/R = find_record("name", oldname, L) if(R) R.fields["name"] = newname @@ -855,7 +860,7 @@ if(7) // Pride log_game("[src] was influenced by the sin of pride.") O = new /datum/objective/sintouched/pride - ticker.mode.sintouched += src.mind + SSticker.mode.sintouched += src.mind src.mind.objectives += O src.mind.announce_objectives() @@ -920,12 +925,15 @@ return if(buckled) //NO INFINITE STACKING!! return - if(M.incapacitated(FALSE, TRUE) || incapacitated(FALSE, TRUE)) - M.visible_message("[M] can't hang onto [src]!") - return - if(iscarbon(M) && (!riding_datum.equip_buckle_inhands(M, 2))) //MAKE SURE THIS IS LAST!! - M.visible_message("[M] can't climb onto [src] because [M.p_their()] hands are full!") + if(M.stat != CONSCIOUS) return + if(iscarbon(M)) + if(M.incapacitated(FALSE, TRUE) || incapacitated(FALSE, TRUE)) + M.visible_message("[M] can't hang onto [src]!") + return + if(!riding_datum.equip_buckle_inhands(M, 2)) //MAKE SURE THIS IS LAST!! + M.visible_message("[M] can't climb onto [src] because [M.p_their()] hands are full!") + return . = ..(M, force, check_loc) stop_pulling() diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index fad73ec207..41d850429f 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -160,8 +160,8 @@ return ..() /mob/living/carbon/human/grabbedby(mob/living/carbon/user, supress_message = 0) - if(user == src && pulling && !pulling.anchored && grab_state >= GRAB_AGGRESSIVE && isliving(pulling)) - vore_attack(user, pulling) + if(user == src && pulling && !pulling.anchored && grab_state >= GRAB_AGGRESSIVE && (disabilities & FAT) && ismonkey(pulling)) + devour_mob(pulling) else ..() @@ -302,13 +302,14 @@ /mob/living/carbon/human/attack_animal(mob/living/simple_animal/M) - if(..()) + . = ..() + if(.) var/damage = rand(M.melee_damage_lower, M.melee_damage_upper) if(check_shields(damage, "the [M.name]", null, MELEE_ATTACK, M.armour_penetration)) - return 0 + return FALSE var/dam_zone = dismembering_strike(M, pick("chest", "l_hand", "r_hand", "l_leg", "r_leg")) if(!dam_zone) //Dismemberment successful - return 1 + return TRUE var/obj/item/bodypart/affecting = get_bodypart(ran_zone(dam_zone)) if(!affecting) affecting = get_bodypart("chest") diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index ad896ed90a..7ca155ec57 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -1,7 +1,5 @@ -var/global/default_martial_art = new/datum/martial_art /mob/living/carbon/human - languages_spoken = HUMAN - languages_understood = HUMAN + initial_languages = list(/datum/language/common) hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD,ANTAG_HUD) possible_a_intents = list(INTENT_HELP, INTENT_DISARM, INTENT_GRAB, INTENT_HARM) pressure_resistance = 25 @@ -43,6 +41,7 @@ var/global/default_martial_art = new/datum/martial_art var/bleedsuppress = 0 //for stopping bloodloss, eventually this will be limb-based like bleeding var/datum/martial_art/martial_art = null + var/static/default_martial_art = new/datum/martial_art var/name_override //For temporary visible name changes @@ -50,4 +49,4 @@ var/global/default_martial_art = new/datum/martial_art var/datum/personal_crafting/handcrafting can_buckle = TRUE buckle_lying = FALSE - can_ride_typecache = list(/mob/living/carbon/human, /mob/living/simple_animal/slime) + can_ride_typecache = list(/mob/living/carbon/human, /mob/living/simple_animal/slime, /mob/living/simple_animal/parrot) \ No newline at end of file diff --git a/code/modules/mob/interactive.dm b/code/modules/mob/living/carbon/human/interactive.dm similarity index 95% rename from code/modules/mob/interactive.dm rename to code/modules/mob/living/carbon/human/interactive.dm index 0363520f4c..744e8f9844 100644 --- a/code/modules/mob/interactive.dm +++ b/code/modules/mob/living/carbon/human/interactive.dm @@ -67,10 +67,7 @@ //modules var/list/functions = list("nearbyscan","combat","shitcurity","chatter") var/restrictedJob = 0 - var/shouldUseDynamicProc = 0 // switch to make the AI control it's own proccessing - var/alternateProcessing = 1 var/forceProcess = 0 - var/processTime = 8 var/lastProc = 0 var/walkdebug = 0 //causes sparks in our path target. used for debugging var/debugexamine = 0 //If we show debug info in our examine @@ -85,6 +82,7 @@ var/traitorScale = 0 // our ability as a traitor var/traitorType = 0 + var/voice_saved = FALSE /// SNPC voice handling @@ -96,6 +94,8 @@ knownStrings = list() /mob/living/carbon/human/interactive/proc/saveVoice() + if(voice_saved) + return var/savefile/S = new /savefile("data/npc_saves/snpc.sav") S["knownStrings"] << knownStrings @@ -145,8 +145,7 @@ retal_target = potentialAssault ..() - -/client/proc/resetSNPC(var/mob/A in SSnpc.botPool_l) +/client/proc/resetSNPC(var/mob/A in SSnpcpool.processing) set name = "Reset SNPC" set desc = "Reset the SNPC" set category = "Debug" @@ -163,24 +162,7 @@ T.retal = 0 T.doing = 0 -/client/proc/toggleSNPC(var/mob/A in SSnpc.botPool_l) - set name = "Toggle SNPC Proccessing Mode" - set desc = "Toggle SNPC Proccessing Mode" - set category = "Debug" - - if(!holder) - return - - if(A) - if(!istype(A,/mob/living/carbon/human/interactive)) - return - var/mob/living/carbon/human/interactive/T = A - if(T) - T.alternateProcessing = !T.alternateProcessing - T.forceProcess = 1 - to_chat(usr, "[T]'s processing has been switched to [T.alternateProcessing ? "High Profile" : "Low Profile"]") - -/client/proc/customiseSNPC(var/mob/A in SSnpc.botPool_l) +/client/proc/customiseSNPC(var/mob/A in SSnpcpool.processing) set name = "Customize SNPC" set desc = "Customise the SNPC" set category = "Debug" @@ -216,7 +198,7 @@ T.doSetup() if(prob(25)) var/list/validchoices = list() - for(var/mob/living/carbon/human/M in mob_list) + for(var/mob/living/carbon/human/M in GLOB.mob_list) validchoices += M var/mob/living/carbon/human/chosen = pick(validchoices) var/datum/dna/toDoppel = chosen.dna @@ -241,7 +223,7 @@ if(shouldDoppel) if(shouldDoppel == "Yes") var/list/validchoices = list() - for(var/mob/living/carbon/human/M in mob_list) + for(var/mob/living/carbon/human/M in GLOB.mob_list) validchoices += M var/mob/living/carbon/human/chosen = input("Which crewmember?") as null|anything in validchoices @@ -366,14 +348,14 @@ switch(traitorType) if(SNPC_BRUTE) // SMASH KILL RAAARGH - traitorTarget = pick(mob_list) + traitorTarget = pick(GLOB.mob_list) if(SNPC_STEALTH) // Shhh we is sneekies var/A = pick(typesof(/datum/objective_item/steal) - /datum/objective_item/steal) var/datum/objective_item/steal/S = new A traitorTarget = locate(S.targetitem) in world if(SNPC_MARTYR) // MY LIFE FOR SPESZUL var/targetType = pick(/obj/machinery/gravity_generator/main/station,/obj/machinery/power/smes/engineering,/obj/machinery/telecomms/hub) - traitorTarget = locate(targetType) in machines + traitorTarget = locate(targetType) in GLOB.machines if(SNPC_PSYCHO) // YOU'RE LIKE A FLESH BICYLE AND I WANT TO DISMANTLE YOU traitorTarget = null @@ -390,7 +372,7 @@ doSetup() - SSnpc.insertBot(src) + START_PROCESSING(SSnpcpool, src) loadVoice() @@ -400,8 +382,9 @@ attitude += rand(-10,10) slyness += rand(-10,10) - doProcess() - +/mob/living/carbon/human/interactive/Destroy() + SSnpcpool.stop_processing(src) + return ..() /mob/living/carbon/human/interactive/proc/retalTarget(var/target) var/mob/living/carbon/human/M = target @@ -533,39 +516,22 @@ /mob/living/carbon/human/interactive/proc/targetRange(towhere) return get_dist(get_turf(towhere), get_turf(src)) -/mob/living/carbon/human/interactive/Life() - ..() - if(ticker.current_state == GAME_STATE_FINISHED) +/mob/living/carbon/human/interactive/proc/InteractiveProcess() + if(SSticker.current_state == GAME_STATE_FINISHED) saveVoice() - if(!alternateProcessing || forceProcess || world.time > lastProc + processTime) - doProcess() + doProcess() /mob/living/carbon/human/interactive/death() saveVoice() ..() -/mob/living/carbon/human/interactive/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans) +/mob/living/carbon/human/interactive/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans, message_mode) if(speaker != src) knownStrings |= html_decode(raw_message) ..() /mob/living/carbon/human/interactive/proc/doProcess() - set waitfor = 0 - forceProcess = 0 - lastProc = world.time - - if(shouldUseDynamicProc) - var/isSeen = 0 - for(var/mob/living/carbon/human/A in orange(12,src)) - if(A.client) - isSeen = 1 - alternateProcessing = isSeen - if(alternateProcessing) - forceProcess = 1 - - if(IsDeadOrIncap()) - walk(src,0) - return + set waitfor = FALSE //--------------------------- //---- interest flow control if(interest < 0 || inactivity_period < 0) @@ -579,7 +545,7 @@ //VIEW FUNCTIONS //doorscan is now integrated into life and runs before all other procs - for(var/dir in alldirs) + for(var/dir in GLOB.alldirs) var/turf/T = get_step(src,dir) if(T) for(var/obj/machinery/door/D in T.contents) @@ -587,10 +553,13 @@ if(istype(D,/obj/machinery/door/airlock)) var/obj/machinery/door/airlock/AL = D if(!AL.CanAStarPass(RPID)) // only crack open doors we can't get through + inactivity_period = 20 AL.panel_open = 1 AL.update_icon() AL.shock(src,(100 - smartness)/2) sleep(5) + if(QDELETED(AL)) + return AL.unbolt() if(!AL.wires.is_cut(WIRE_BOLTS)) AL.wires.cut(WIRE_BOLTS) @@ -599,9 +568,15 @@ if(!AL.wires.is_cut(WIRE_POWER2)) AL.wires.cut(WIRE_POWER2) sleep(5) + if(QDELETED(AL)) + return AL.panel_open = 0 AL.update_icon() - D.open() + D.open(2) //crowbar force + else + D.open() + else + D.open() if(update_hands) var/obj/item/l_hand = get_item_for_held_index(1) @@ -633,7 +608,7 @@ //proc functions for(var/Proc in functions) if(!IsDeadOrIncap()) - callfunction(Proc) + INVOKE_ASYNC(src, Proc) //target interaction stays hardcoded @@ -649,8 +624,8 @@ if(istype(TARGET, /obj/machinery/door)) var/obj/machinery/door/D = TARGET if(D.check_access(MYID) && !istype(D,/obj/machinery/door/poddoor)) + inactivity_period = 10 D.open() - //sleep(15) var/turf/T = get_step(get_step(D.loc,dir),dir) //recursion yo tryWalk(T) //THIEVING SKILLS @@ -672,15 +647,8 @@ insert_into_backpack() //---------FASHION if(istype(TARGET,/obj/item/clothing)) - var/obj/item/clothing/C = TARGET drop_item() - spawn(5) - take_to_slot(C,1) - if(!equip_to_appropriate_slot(C)) - var/obj/item/I = get_item_by_slot(C) - dropItemToGround(I) - spawn(5) - equip_to_appropriate_slot(C) + dressup(TARGET) update_hands = 1 if(MYPDA in src.loc || MYID in src.loc) if(MYPDA in src.loc) @@ -738,8 +706,19 @@ TARGET = traitorTarget tryWalk(TARGET) LAST_TARGET = TARGET - if(alternateProcessing) - addtimer(CALLBACK(src, .proc/doProcess), processTime) + +/mob/living/carbon/human/interactive/proc/dressup(obj/item/clothing/C) + set waitfor = FALSE + inactivity_period = 12 + sleep(5) + if(!QDELETED(C) && !QDELETED(src)) + take_to_slot(C,1) + if(!equip_to_appropriate_slot(C)) + var/obj/item/I = get_item_by_slot(C) + dropItemToGround(I) + sleep(5) + if(!QDELETED(src) && !QDELETED(C)) + equip_to_appropriate_slot(C) /mob/living/carbon/human/interactive/proc/favouredObjIn(var/list/inList) var/list/outList = list() @@ -751,11 +730,6 @@ outList = inList return outList -/mob/living/carbon/human/interactive/proc/callfunction(Proc) - set waitfor = 0 - spawn(0) - call(src,Proc)(src) - /mob/living/carbon/human/interactive/proc/tryWalk(turf/inTarget, override = 0) if(restrictedJob && !override) // we're a job that has to stay in our home if(!(get_turf(inTarget) in get_area_turfs(job2area(myjob)))) @@ -1133,7 +1107,7 @@ for(var/mob/living/carbon/human/C in nearby) var/perpname = C.get_face_name(C.get_id_name()) - var/datum/data/record/R = find_record("name", perpname, data_core.security) + var/datum/data/record/R = find_record("name", perpname, GLOB.data_core.security) if(R && R.fields["criminal"]) switch(R.fields["criminal"]) if("*Arrest*") @@ -1143,7 +1117,8 @@ for(var/obj/item/I in allContents) if(istype(I,/obj/item/weapon/restraints)) I.attack(TARGET,src) // go go bluespace restraint launcher! - sleep(25) + inactivity_period = 25 + break /mob/living/carbon/human/interactive/proc/clowning(obj) if(shouldModulePass()) @@ -1225,7 +1200,7 @@ if(get_dist(src,C) <= 2) src.say("Wait, [C], let me heal you!") M.attack(C,src) - sleep(25) + inactivity_period = 25 else tryWalk(get_turf(C)) else if(shouldTryHeal == 2) @@ -1237,7 +1212,7 @@ if(get_dist(src,C) <= 2) src.say("Wait, [C], let me heal you!") HPS.attack(C,src) - sleep(25) + inactivity_period = 25 else tryWalk(get_turf(C)) @@ -1265,7 +1240,7 @@ tryWalk(TC) else S.afterattack(TC,src) - sleep(25) + inactivity_period = 25 /mob/living/carbon/human/interactive/proc/customEmote(var/text) visible_message("[text]") @@ -1354,7 +1329,7 @@ var/choice = pick(1,2) if(choice == 1) tryWalk(get_turf(D)) - sleep(get_dist(src,D)) + inactivity_period = get_dist(src,D) D.attackby(RP,src) else cookingwithmagic(D) @@ -1364,7 +1339,7 @@ var/choice = pick(1,2) if(choice == 1) tryWalk(get_turf(D)) - sleep(get_dist(src,D)) + inactivity_period = get_dist(src,D) FD.attackby(KK,src) else cookingwithmagic(FD) @@ -1374,7 +1349,7 @@ var/choice = pick(1,2) if(choice == 1) tryWalk(get_turf(D)) - sleep(get_dist(src,D)) + inactivity_period = get_dist(src,D) CB.attackby(RP,src) else cookingwithmagic(CB) @@ -1384,7 +1359,7 @@ var/choice = pick(1,2) if(choice == 1) tryWalk(get_turf(D)) - sleep(get_dist(src,D)) + inactivity_period = get_dist(src,D) PD.attackby(KK,src) else cookingwithmagic(PD) @@ -1533,6 +1508,7 @@ G.attack_self(src) if(prob(smartness)) npcDrop(G,1) + inactivity_period = 15 sleep(15) throw_item(TARGET) diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 4d51c6786a..2afa202bfa 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -102,7 +102,7 @@ update_tint() if(G.vision_correction) clear_fullscreen("nearsighted") - if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view) + if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha)) update_sight() update_inv_glasses() if(slot_gloves) @@ -141,13 +141,13 @@ return not_handled //For future deeper overrides -/mob/living/carbon/human/doUnEquip(obj/item/I, force) +/mob/living/carbon/human/doUnEquip(obj/item/I, force, newloc, no_move, invdrop) . = ..() //See mob.dm for an explanation on this and some rage about people copypasting instead of calling ..() like they should. if(!. || !I) return if(I == wear_suit) - if(s_store) + if(s_store && invdrop) dropItemToGround(s_store, TRUE) //It makes no sense for your suit storage to stay on you if you drop your suit. if(wear_suit.breakouttime) //when unequipping a straightjacket update_action_buttons_icon() //certain action buttons may be usable again. @@ -156,17 +156,18 @@ update_inv_w_uniform() update_inv_wear_suit() else if(I == w_uniform) - if(r_store) - dropItemToGround(r_store, TRUE) //Again, makes sense for pockets to drop. - if(l_store) - dropItemToGround(l_store, TRUE) - if(wear_id) - dropItemToGround(wear_id) - if(belt) - dropItemToGround(belt) + if(invdrop) + if(r_store) + dropItemToGround(r_store, TRUE) //Again, makes sense for pockets to drop. + if(l_store) + dropItemToGround(l_store, TRUE) + if(wear_id) + dropItemToGround(wear_id) + if(belt) + dropItemToGround(belt) w_uniform = null update_suit_sensors() - update_inv_w_uniform() + update_inv_w_uniform(invdrop) else if(I == gloves) gloves = null update_inv_gloves() @@ -180,7 +181,7 @@ if(G.vision_correction) if(disabilities & NEARSIGHT) overlay_fullscreen("nearsighted", /obj/screen/fullscreen/impaired, 1) - if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view) + if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha)) update_sight() update_inv_glasses() else if(I == ears) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 76e728f954..af815756c1 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -57,8 +57,6 @@ /mob/living/carbon/human/calculate_affecting_pressure(pressure) if((wear_suit && (wear_suit.flags & STOPSPRESSUREDMAGE)) && (head && (head.flags & STOPSPRESSUREDMAGE))) return ONE_ATMOSPHERE - if(ismob(loc)) - return ONE_ATMOSPHERE //hopefully won't murderficate people in your guts by going for a spacewalk else return pressure @@ -98,7 +96,7 @@ if(!dna.species.breathe(src)) ..() #define HUMAN_MAX_OXYLOSS 3 -#define HUMAN_CRIT_MAX_OXYLOSS (SSmob.wait/30) +#define HUMAN_CRIT_MAX_OXYLOSS (SSmobs.wait/30) /mob/living/carbon/human/check_breath(datum/gas_mixture/breath) var/L = getorganslot("lungs") @@ -141,8 +139,6 @@ /mob/living/carbon/human/proc/get_thermal_protection() var/thermal_protection = 0 //Simple check to estimate how protected we are against multiple temperatures - if(ismob(loc)) - thermal_protection = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT //because lazy and insulated by being inside someone if(wear_suit) if(wear_suit.max_heat_protection_temperature >= FIRE_SUIT_MAX_TEMP_PROTECT) thermal_protection += (wear_suit.max_heat_protection_temperature*0.7) @@ -252,9 +248,6 @@ if(dna.check_mutation(COLDRES)) return 1 //Fully protected from the cold. - if(ismob(loc)) - return 1 //because lazy and being inside somemone insulates you from space - if(dna && (RESISTCOLD in dna.species.species_traits)) return 1 diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index f13acb5025..d5e872a404 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -1,12 +1,10 @@ -/mob/living/carbon/human/say_quote(input, spans) - if(!input) - return "says, \"...\"" //not the best solution, but it will stop a large number of runtimes. The cause is somewhere in the Tcomms code +/mob/living/carbon/human/say_quote(input, spans, message_mode) verb_say = dna.species.say_mod + . = ..() if(src.slurring) input = attach_spans(input, spans) return "slurs, \"[input]\"" - return ..() /mob/living/carbon/human/treat_message(message) message = dna.species.handle_speech(message,src) @@ -75,7 +73,7 @@ if(!istype(dongle)) return 0 if(dongle.translate_binary) return 1 -/mob/living/carbon/human/radio(message, message_mode, list/spans) +/mob/living/carbon/human/radio(message, message_mode, list/spans, language) . = ..() if(. != 0) return . @@ -83,17 +81,17 @@ switch(message_mode) if(MODE_HEADSET) if (ears) - ears.talk_into(src, message, , spans) + ears.talk_into(src, message, , spans, language) return ITALICS | REDUCE_RANGE if(MODE_DEPARTMENT) if (ears) - ears.talk_into(src, message, message_mode, spans) + ears.talk_into(src, message, message_mode, spans, language) return ITALICS | REDUCE_RANGE - if(message_mode in radiochannels) + if(message_mode in GLOB.radiochannels) if(ears) - ears.talk_into(src, message, message_mode, spans) + ears.talk_into(src, message, message_mode, spans, language) return ITALICS | REDUCE_RANGE return 0 diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 017f081bd7..57bfb42623 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -17,6 +17,10 @@ var/default_color = "#FFF" // if alien colors are disabled, this is the color that will be used by that race var/sexes = 1 // whether or not the race has sexual characteristics. at the moment this is only 0 for skeletons and shadows + + var/face_y_offset = 0 + var/hair_y_offset = 0 + var/hair_color = null // this allows races to have specific hair colors... if null, it uses the H's hair/facial hair colors. if "mutcolor", it uses the H's mutant_color var/hair_alpha = 255 // the alpha used by the hair. 255 is completely solid, 0 is transparent. var/use_skintones = 0 // does it use skintones or not? (spoiler alert this is only used by humans) @@ -69,8 +73,6 @@ var/fixed_mut_color3 = "" var/whitelisted = 0 //Is this species restricted to certain players? var/whitelist = list() //List the ckeys that can use this species, if it's whitelisted.: list("John Doe", "poopface666", "SeeALiggerPullTheTrigger") Spaces & capitalization can be included or ignored entirely for each key as it checks for both. - var/lang_spoken = HUMAN - var/lang_understood = HUMAN /////////// // PROCS // @@ -90,21 +92,21 @@ var/randname if(gender == MALE) - randname = pick(first_names_male) + randname = pick(GLOB.first_names_male) else - randname = pick(first_names_female) + randname = pick(GLOB.first_names_female) if(lastname) randname += " [lastname]" else - randname += " [pick(last_names)]" + randname += " [pick(GLOB.last_names)]" return randname //Please override this locally if you want to define when what species qualifies for what rank if human authority is enforced. /datum/species/proc/qualifies_for_rank(rank, list/features) - if(rank in command_positions) + if(rank in GLOB.command_positions) return 0 return 1 @@ -205,7 +207,7 @@ facialhair_hidden = TRUE if(H.facial_hair_style && (FACEHAIR in species_traits) && (!facialhair_hidden || dynamic_fhair_suffix)) - S = facial_hair_styles_list[H.facial_hair_style] + S = GLOB.facial_hair_styles_list[H.facial_hair_style] if(S) //List of all valid dynamic_fhair_suffixes @@ -262,7 +264,7 @@ standing += image("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained", "layer" = -HAIR_LAYER) else if(H.hair_style && (HAIR in species_traits)) - S = hair_styles_list[H.hair_style] + S = GLOB.hair_styles_list[H.hair_style] if(S) //List of all valid dynamic_hair_suffixes @@ -295,6 +297,7 @@ img_hair.color = forced_colour img_hair.alpha = hair_alpha + img_hair.pixel_y += hair_y_offset standing += img_hair if(standing.len) @@ -311,33 +314,36 @@ // eyes - var/has_eyes = (H.getorgan(/obj/item/organ/eyes) && HD) + var/has_eyes = TRUE - if(!has_eyes) + if(!H.getorgan(/obj/item/organ/eyes) && HD) standing += image("icon"='icons/mob/human_face.dmi', "icon_state" = "eyes_missing", "layer" = -BODY_LAYER) + has_eyes = FALSE - if(!HUSK) + if(!(H.disabilities & HUSK)) // lipstick if(H.lip_style && (LIPS in species_traits) && HD) var/image/lips = image("icon"='icons/mob/human_face.dmi', "icon_state"="lips_[H.lip_style]", "layer" = -BODY_LAYER) lips.color = H.lip_color + lips.pixel_y += face_y_offset standing += lips // eyes if((EYECOLOR in species_traits) && HD && has_eyes) var/image/img_eyes = image("icon" = 'icons/mob/human_face.dmi', "icon_state" = "eyes", "layer" = -BODY_LAYER) img_eyes.color = "#" + H.eye_color + img_eyes.pixel_y += face_y_offset standing += img_eyes //Underwear, Undershirts & Socks /*This will be refactored at a later date if(H.underwear) - var/datum/sprite_accessory/underwear/underwear = underwear_list[H.underwear] + var/datum/sprite_accessory/underwear/underwear = GLOB.underwear_list[H.underwear] if(underwear) standing += image("icon"=underwear.icon, "icon_state"="[underwear.icon_state]", "layer"=-BODY_LAYER) if(H.undershirt) - var/datum/sprite_accessory/undershirt/undershirt = undershirt_list[H.undershirt] + var/datum/sprite_accessory/undershirt/undershirt = GLOB.undershirt_list[H.undershirt] if(undershirt) if(H.dna.species.sexes && H.gender == FEMALE) standing += wear_female_version("[undershirt.icon_state]", undershirt.icon, BODY_LAYER) @@ -345,7 +351,7 @@ standing += image("icon"=undershirt.icon, "icon_state"="[undershirt.icon_state]", "layer"=-BODY_LAYER) if(H.socks && H.get_num_legs() >= 2 && !(DIGITIGRADE in species_traits)) - var/datum/sprite_accessory/socks/socks = socks_list[H.socks] + var/datum/sprite_accessory/socks/socks = GLOB.socks_list[H.socks] if(socks) standing += image("icon"=socks.icon, "icon_state"="[socks.icon_state]", "layer"=-BODY_LAYER) */ @@ -495,53 +501,53 @@ var/datum/sprite_accessory/S switch(bodypart) if("tail_lizard") - S = tails_list_lizard[H.dna.features["tail_lizard"]] + S = GLOB.tails_list_lizard[H.dna.features["tail_lizard"]] if("waggingtail_lizard") - S.= animated_tails_list_lizard[H.dna.features["tail_lizard"]] + S.= GLOB.animated_tails_list_lizard[H.dna.features["tail_lizard"]] if("tail_human") - S = tails_list_human[H.dna.features["tail_human"]] + S = GLOB.tails_list_human[H.dna.features["tail_human"]] if("waggingtail_human") - S.= animated_tails_list_human[H.dna.features["tail_human"]] + S.= GLOB.animated_tails_list_human[H.dna.features["tail_human"]] if("spines") - S = spines_list[H.dna.features["spines"]] + S = GLOB.spines_list[H.dna.features["spines"]] if("waggingspines") - S.= animated_spines_list[H.dna.features["spines"]] + S.= GLOB.animated_spines_list[H.dna.features["spines"]] if("snout") - S = snouts_list[H.dna.features["snout"]] + S = GLOB.snouts_list[H.dna.features["snout"]] if("frills") - S = frills_list[H.dna.features["frills"]] + S = GLOB.frills_list[H.dna.features["frills"]] if("horns") - S = horns_list[H.dna.features["horns"]] + S = GLOB.horns_list[H.dna.features["horns"]] if("ears") - S = ears_list[H.dna.features["ears"]] + S = GLOB.ears_list[H.dna.features["ears"]] if("body_markings") - S = body_markings_list[H.dna.features["body_markings"]] + S = GLOB.body_markings_list[H.dna.features["body_markings"]] if("wings") - S = wings_list[H.dna.features["wings"]] + S = GLOB.wings_list[H.dna.features["wings"]] if("wingsopen") - S = wings_open_list[H.dna.features["wings"]] + S = GLOB.wings_open_list[H.dna.features["wings"]] if("legs") - S = legs_list[H.dna.features["legs"]] + S = GLOB.legs_list[H.dna.features["legs"]] //Mammal Bodyparts (Canid/Felid, others maybe in the future) if("mam_tail") - S = mam_tails_list[H.dna.features["mam_tail"]] + S = GLOB.mam_tails_list[H.dna.features["mam_tail"]] if("mam_waggingtail") - S.= mam_tails_animated_list[H.dna.features["mam_tail"]] + S.= GLOB.mam_tails_animated_list[H.dna.features["mam_tail"]] if("mam_body_markings") - S = mam_body_markings_list[H.dna.features["mam_body_markings"]] + S = GLOB.mam_body_markings_list[H.dna.features["mam_body_markings"]] if("mam_ears") - S = mam_ears_list[H.dna.features["mam_ears"]] + S = GLOB.mam_ears_list[H.dna.features["mam_ears"]] if("taur") - S = taur_list[H.dna.features["taur"]] + S = GLOB.taur_list[H.dna.features["taur"]] //Xeno Bodyparts if("xenodorsal") - S = xeno_dorsal_list[H.dna.features["xenodorsal"]] + S = GLOB.xeno_dorsal_list[H.dna.features["xenodorsal"]] if("xenohead") - S = xeno_head_list[H.dna.features["xenohead"]] + S = GLOB.xeno_head_list[H.dna.features["xenohead"]] if("xenotail") - S = xeno_tail_list[H.dna.features["xenotail"]] + S = GLOB.xeno_tail_list[H.dna.features["xenotail"]] //Slimecoon Bodyparts /* if("slimecoontail") @@ -1035,6 +1041,8 @@ return 1 /datum/species/proc/go_bald(mob/living/carbon/human/H) + if(QDELETED(H)) //may be called from a timer + return H.facial_hair_style = "Shaved" H.hair_style = "Bald" H.update_hair() @@ -1198,9 +1206,9 @@ target.visible_message("[user] has weakened [target]!", \ "[user] has weakened [target]!") target.apply_effect(4, WEAKEN, armor_block) - target.forcesay(hit_appends) + target.forcesay(GLOB.hit_appends) else if(target.lying) - target.forcesay(hit_appends) + target.forcesay(GLOB.hit_appends) @@ -1223,7 +1231,6 @@ return 1 else user.do_attack_animation(target, ATTACK_EFFECT_DISARM) - add_logs(user, target, "disarmed") if(target.w_uniform) target.w_uniform.add_fingerprint(user) @@ -1234,24 +1241,26 @@ target.visible_message("[user] has pushed [target]!", "[user] has pushed [target]!", null, COMBAT_MESSAGE_RANGE) target.apply_effect(2, WEAKEN, target.run_armor_check(affecting, "melee", "Your armor prevents your fall!", "Your armor softens your fall!")) - target.forcesay(hit_appends) + target.forcesay(GLOB.hit_appends) + add_logs(user, target, "disarmed", " pushing them to the ground") + return - var/talked = 0 // BubbleWrap - if(randn <= 60) - //BubbleWrap: Disarming breaks a pull + var/obj/item/I = null if(target.pulling) to_chat(target, "[user] has broken [target]'s grip on [target.pulling]!") - talked = 1 target.stop_pulling() - //End BubbleWrap - if(!talked) //BubbleWrap + else + I = target.get_active_held_item() if(target.drop_item()) target.visible_message("[user] has disarmed [target]!", \ "[user] has disarmed [target]!", null, COMBAT_MESSAGE_RANGE) + else + I = null playsound(target, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + add_logs(user, target, "disarmed", "[I ? " removing \the [I]" : ""]") return @@ -1347,7 +1356,7 @@ H.adjust_blurriness(10) if(prob(I.force + ((100 - H.health)/2)) && H != user) - ticker.mode.remove_revolutionary(H.mind) + SSticker.mode.remove_revolutionary(H.mind) if(bloody) //Apply blood if(H.wear_mask) @@ -1376,7 +1385,7 @@ H.update_inv_w_uniform() if(Iforce > 10 || Iforce >= 5 && prob(33)) - H.forcesay(hit_appends) //forcesay checks stat already. + H.forcesay(GLOB.hit_appends) //forcesay checks stat already. return TRUE /datum/species/proc/apply_damage(damage, damagetype = BRUTE, def_zone = null, blocked, mob/living/carbon/human/H) @@ -1480,7 +1489,7 @@ H.apply_damage(HEAT_DAMAGE_LEVEL_3*heatmod, BURN) else H.apply_damage(HEAT_DAMAGE_LEVEL_2*heatmod, BURN) - else if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !(mutations_list[COLDRES] in H.dna.mutations)) + else if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !(GLOB.mutations_list[COLDRES] in H.dna.mutations)) switch(H.bodytemperature) if(200 to 260) H.throw_alert("temp", /obj/screen/alert/cold, 1) diff --git a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm index dccfc9da7a..434c049f96 100644 --- a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm @@ -14,6 +14,8 @@ datum/species/mammal if(H) H.endTailWag() +/datum/species/mammal/qualifies_for_rank(rank, list/features) + return TRUE //AVIAN// /datum/species/avian @@ -32,6 +34,9 @@ datum/species/mammal if(H) H.endTailWag() +/datum/species/avian/qualifies_for_rank(rank, list/features) + return TRUE + //AQUATIC// /datum/species/aquatic name = "Aquatic" @@ -48,6 +53,10 @@ datum/species/mammal /datum/species/aquatic/spec_death(gibbed, mob/living/carbon/human/H) if(H) H.endTailWag() + +/datum/species/aquatic/qualifies_for_rank(rank, list/features) + return TRUE + //INSECT// /datum/species/insect name = "Insect" @@ -65,6 +74,8 @@ datum/species/mammal if(H) H.endTailWag() +/datum/species/insect/qualifies_for_rank(rank, list/features) + return TRUE //HERBIVOROUS// //EXOTIC// diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index 68558e803c..8eb5343a30 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -1,7 +1,7 @@ /datum/species/golem // Animated beings of stone. They have increased defenses, and do not need to breathe. They're also slow as fuuuck. name = "Golem" - id = "iron" + id = "iron golem" species_traits = list(NOBREATH,RESISTHOT,RESISTCOLD,RESISTPRESSURE,NOFIRE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,MUTCOLORS) speedmod = 2 armor = 55 @@ -12,6 +12,7 @@ no_equip = list(slot_wear_mask, slot_wear_suit, slot_gloves, slot_shoes, slot_w_uniform) nojumpsuit = 1 sexes = 1 + damage_overlay_type = "" meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/golem // To prevent golem subtypes from overwhelming the odds when random species // changes, only the Random Golem type can be chosen @@ -21,6 +22,21 @@ fixed_mut_color = "aaa" var/info_text = "As an Iron Golem, you don't have any special traits." + var/prefix = "Iron" + var/list/special_names + +/datum/species/golem/random_name(gender,unique,lastname) + var/golem_surname = pick(GLOB.golem_names) + // 3% chance that our golem has a human surname, because + // cultural contamination + if(prob(3)) + golem_surname = pick(GLOB.last_names) + else if(special_names && prob(5)) + golem_surname = pick(special_names) + + var/golem_name = "[prefix] [golem_surname]" + return golem_name + /datum/species/golem/random name = "Random Golem" blacklisted = FALSE @@ -36,21 +52,24 @@ /datum/species/golem/adamantine name = "Adamantine Golem" - id = "adamantine" + id = "adamantine golem" meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/golem/adamantine fixed_mut_color = "4ed" info_text = "As an Adamantine Golem, you don't have any special traits." + prefix = "Adamantine" //Explodes on death /datum/species/golem/plasma name = "Plasma Golem" - id = "plasma" + id = "plasma golem" fixed_mut_color = "a3d" meat = /obj/item/weapon/ore/plasma //Can burn and takes damage from heat species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,MUTCOLORS) info_text = "As a Plasma Golem, you explode on death!" burnmod = 1.5 + prefix = "Plasma" + special_names = list("Flood","Fire","Bar","Man") /datum/species/golem/plasma/spec_death(gibbed, mob/living/carbon/human/H) explosion(get_turf(H),0,1,2,flame_range = 5) @@ -60,35 +79,40 @@ //Harder to hurt /datum/species/golem/diamond name = "Diamond Golem" - id = "diamond" + id = "diamond golem" fixed_mut_color = "0ff" armor = 70 //up from 55 meat = /obj/item/weapon/ore/diamond info_text = "As a Diamond Golem, you are more resistant than the average golem." + prefix = "Diamond" + special_names = list("Back") //Faster but softer and less armoured /datum/species/golem/gold name = "Gold Golem" - id = "gold" + id = "gold golem" fixed_mut_color = "cc0" speedmod = 1 armor = 25 //down from 55 meat = /obj/item/weapon/ore/gold info_text = "As a Gold Golem, you are faster but less resistant than the average golem." + prefix = "Golden" //Heavier, thus higher chance of stunning when punching /datum/species/golem/silver name = "Silver Golem" - id = "silver" + id = "silver golem" fixed_mut_color = "ddd" punchstunthreshold = 9 //60% chance, from 40% meat = /obj/item/weapon/ore/silver info_text = "As a Silver Golem, your attacks are heavier and have a higher chance of stunning." + prefix = "Silver" + special_names = list("Surfer", "Chariot", "Lining") //Harder to stun, deals more damage, but it's even slower /datum/species/golem/plasteel name = "Plasteel Golem" - id = "plasteel" + id = "plasteel golem" fixed_mut_color = "bbb" stunmod = 0.40 punchdamagelow = 12 @@ -99,15 +123,17 @@ info_text = "As a Plasteel Golem, you are slower, but harder to stun, and hit very hard when punching." attack_verb = "smash" attack_sound = 'sound/effects/meteorimpact.ogg' //hits pretty hard + prefix = "Plasteel" //Immune to ash storms /datum/species/golem/titanium name = "Titanium Golem" - id = "titanium" + id = "titanium golem" fixed_mut_color = "fff" meat = /obj/item/weapon/ore/titanium info_text = "As a Titanium Golem, you are immune to ash storms, and slightly more resistant to burn damage." burnmod = 0.9 + prefix = "Titanium" /datum/species/golem/titanium/on_species_gain(mob/living/carbon/C, datum/species/old_species) . = ..() @@ -120,11 +146,12 @@ //Immune to ash storms and lava /datum/species/golem/plastitanium name = "Plastitanium Golem" - id = "plastitanium" + id = "plastitanium golem" fixed_mut_color = "888" meat = /obj/item/weapon/ore/titanium info_text = "As a Plastitanium Golem, you are immune to both ash storms and lava, and slightly more resistant to burn damage." burnmod = 0.8 + prefix = "Plastitanium" /datum/species/golem/plastitanium/on_species_gain(mob/living/carbon/C, datum/species/old_species) . = ..() @@ -139,12 +166,14 @@ //Fast and regenerates... but can only speak like an abductor /datum/species/golem/alloy name = "Alien Alloy Golem" - id = "alloy" + id = "alloy golem" fixed_mut_color = "333" meat = /obj/item/stack/sheet/mineral/abductor mutant_organs = list(/obj/item/organ/tongue/abductor) //abductor tongue speedmod = 1 //faster info_text = "As an Alloy Golem, you are made of advanced alien materials: you are faster and regenerate over time. You are, however, only able to be heard by other alloy golems." + prefix = "Alien" + special_names = list("Outsider", "Technology", "Watcher", "Stranger") //ominous and unknown //Regenerates because self-repairing super-advanced alien tech /datum/species/golem/alloy/spec_life(mob/living/carbon/human/H) @@ -157,7 +186,7 @@ //Since this will usually be created from a collaboration between podpeople and free golems, wood golems are a mix between the two races /datum/species/golem/wood name = "Wood Golem" - id = "wood" + id = "wood golem" fixed_mut_color = "49311c" meat = /obj/item/stack/sheet/mineral/wood //Can burn and take damage from heat @@ -166,6 +195,13 @@ burnmod = 1.25 heatmod = 1.5 info_text = "As a Wooden Golem, you have plant-like traits: you take damage from extreme temperatures, can be set on fire, and have lower armor than a normal golem. You regenerate when in the light and wither in the darkness." + prefix = "Wooden" + +/datum/species/golem/wood/random_name(gender,unique,lastname) + var/plant_name = pick("Tomato", "Potato", "Broccoli", "Carrot", "Ambrosia", "Pumpkin", "Ivy", "Kudzu", "Banana", "Moss", "Flower", "Bloom", "Root", "Bark", "Glowshroom", "Petal", "Leaf", \ + "Venus", "Sprout","Cocoa", "Strawberry", "Citrus", "Oak", "Cactus", "Pepper", "Juniper") + var/golem_name = "[prefix] [plant_name]" + return golem_name /datum/species/golem/wood/on_species_gain(mob/living/carbon/C, datum/species/old_species) . = ..() @@ -204,13 +240,14 @@ //Radioactive /datum/species/golem/uranium name = "Uranium Golem" - id = "uranium" + id = "uranium golem" fixed_mut_color = "7f0" meat = /obj/item/weapon/ore/uranium info_text = "As an Uranium Golem, you emit radiation pulses every once in a while. It won't harm fellow golems, but organic lifeforms will be affected." var/last_event = 0 var/active = null + prefix = "Uranium" /datum/species/golem/uranium/spec_life(mob/living/carbon/human/H) if(!active) @@ -224,7 +261,7 @@ //Immune to physical bullets and resistant to brute, but very vulnerable to burn damage. Dusts on death. /datum/species/golem/sand name = "Sand Golem" - id = "sand" + id = "sand golem" fixed_mut_color = "ffdc8f" meat = /obj/item/weapon/ore/glass //this is sand armor = 0 @@ -232,6 +269,7 @@ brutemod = 0.25 info_text = "As a Sand Golem, you are immune to physical bullets and take very little brute damage, but are extremely vulnerable to burn damage. You will also turn to sand when dying, preventing any form of recovery." attack_sound = 'sound/effects/shovel_dig.ogg' + prefix = "Sand" /datum/species/golem/sand/spec_death(gibbed, mob/living/carbon/human/H) H.visible_message("[H] turns into a pile of sand!") @@ -253,7 +291,7 @@ //Reflects lasers and resistant to burn damage, but very vulnerable to brute damage. Shatters on death. /datum/species/golem/glass name = "Glass Golem" - id = "glass" + id = "glass golem" fixed_mut_color = "5a96b4aa" //transparent body meat = /obj/item/weapon/shard armor = 0 @@ -261,6 +299,7 @@ burnmod = 0.25 info_text = "As a Glass Golem, you reflect lasers and energy weapons, and are very resistant to burn damage, but you are extremely vulnerable to brute damage. On death, you'll shatter beyond any hope of recovery." attack_sound = 'sound/effects/Glassbr2.ogg' + prefix = "Glass" /datum/species/golem/glass/spec_death(gibbed, mob/living/carbon/human/H) playsound(H, "shatter", 70, 1) @@ -295,12 +334,14 @@ //Teleports when hit or when it wants to /datum/species/golem/bluespace name = "Bluespace Golem" - id = "bluespace" + id = "bluespace golem" fixed_mut_color = "33f" meat = /obj/item/weapon/ore/bluespace_crystal info_text = "As a Bluespace Golem, are spatially unstable: you will teleport when hit, and you can teleport manually at a long distance." attack_verb = "bluespace punch" attack_sound = 'sound/effects/phasein.ogg' + prefix = "Bluespace" + special_names = list("Crystal", "Polycrystal") var/datum/action/innate/unstable_teleport/unstable_teleport var/teleport_cooldown = 100 @@ -384,7 +425,7 @@ //honk /datum/species/golem/bananium name = "Bananium Golem" - id = "bananium" + id = "bananium golem" fixed_mut_color = "ff0" say_mod = "honks" punchdamagelow = 0 @@ -394,6 +435,7 @@ info_text = "As a Bananium Golem, you are made for pranking. Your body emits natural honks, and you cannot hurt people when punching them. Your skin also emits bananas when damaged." attack_verb = "honk" attack_sound = 'sound/items/AirHorn2.ogg' + prefix = "Bananium" var/last_honk = 0 var/honkooldown = 0 @@ -401,6 +443,11 @@ var/banana_cooldown = 100 var/active = null +/datum/species/golem/bananium/random_name(gender,unique,lastname) + var/clown_name = pick(GLOB.clown_names) + var/golem_name = "[uppertext(clown_name)]" + return golem_name + /datum/species/golem/bananium/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style = M.martial_art) ..() if(world.time > last_banana + banana_cooldown && M != H && M.a_intent != INTENT_HELP) @@ -449,7 +496,7 @@ /datum/species/golem/runic name = "Runic Golem" - id = "runic" + id = "runic golem" limbs_id = "cultgolem" sexes = FALSE info_text = "As a Runic Golem, you possess eldritch powers granted by the Elder God Nar'Sie." @@ -459,6 +506,12 @@ var/obj/effect/proc_holder/spell/targeted/abyssal_gaze/abyssal_gaze var/obj/effect/proc_holder/spell/targeted/dominate/dominate +/datum/species/golem/runic/random_name(gender,unique,lastname) + var/edgy_first_name = pick("Razor","Blood","Dark","Evil","Cold","Pale","Black","Silent","Chaos","Deadly") + var/edgy_last_name = pick("Edge","Night","Death","Razor","Blade","Steel","Calamity","Twilight","Shadow","Nightmare") //dammit Razor Razor + var/golem_name = "[edgy_first_name] [edgy_last_name]" + return golem_name + /datum/species/golem/runic/on_species_gain(mob/living/carbon/C, datum/species/old_species) . = ..() C.faction |= "cult" @@ -489,3 +542,100 @@ H.adjustFireLoss(-4) H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM) +/datum/species/golem/cloth + name = "Cloth Golem" + id = "cloth golem" + limbs_id = "clothgolem" + sexes = FALSE + info_text = "As a Cloth Golem, you are able to reform yourself after death, provided your remains aren't burned or destroyed. You are, of course, very flammable." + species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER) //no mutcolors, and can burn + armor = 15 //feels no pain, but not too resistant + burnmod = 2 // don't get burned + speedmod = 1 // not as heavy as stone + punchdamagelow = 4 + punchstunthreshold = 7 + punchdamagehigh = 8 // not as heavy as stone + prefix = "Cloth" + +/datum/species/golem/cloth/random_name(gender,unique,lastname) + var/pharaoh_name = pick("Neferkare", "Hudjefa", "Khufu", "Mentuhotep", "Ahmose", "Amenhotep", "Thutmose", "Hatshepsut", "Tutankhamun", "Ramses", "Seti", \ + "Merenptah", "Djer", "Semerkhet", "Nynetjer", "Khafre", "Pepi", "Intef", "Ay") //yes, Ay was an actual pharaoh + var/golem_name = "[pharaoh_name] \Roman[rand(1,99)]" + return golem_name + +/datum/species/golem/cloth/spec_life(mob/living/carbon/human/H) + if(H.fire_stacks < 1) + H.adjust_fire_stacks(1) //always prone to burning + ..() + +/datum/species/golem/cloth/spec_death(gibbed, mob/living/carbon/human/H) + if(gibbed) + return + if(H.on_fire) + H.visible_message("[H] burns into ash!") + H.dust(just_ash = TRUE) + return + + H.visible_message("[H] falls apart into a pile of bandages!") + new /obj/structure/cloth_pile(get_turf(H), H) + ..() + +/obj/structure/cloth_pile + name = "pile of bandages" + desc = "It emits a strange aura, as if there was still life within it..." + obj_integrity = 50 + max_integrity = 50 + armor = list(melee = 90, bullet = 90, laser = 25, energy = 80, bomb = 50, bio = 100, fire = -50, acid = -50) + icon = 'icons/obj/items.dmi' + icon_state = "pile_bandages" + resistance_flags = FLAMMABLE + + var/revive_time = 900 + var/mob/living/carbon/human/cloth_golem + +/obj/structure/cloth_pile/Initialize(mapload, mob/living/carbon/human/H) + if(!QDELETED(H) && is_species(H, /datum/species/golem/cloth)) + H.unequip_everything() + H.forceMove(src) + cloth_golem = H + to_chat(cloth_golem, "You start gathering your life energy, preparing to rise again...") + addtimer(CALLBACK(src, .proc/revive), revive_time) + else + qdel(src) + +/obj/structure/cloth_pile/Destroy() + if(cloth_golem) + QDEL_NULL(cloth_golem) + return ..() + +/obj/structure/cloth_pile/burn() + visible_message("[src] burns into ash!") + new /obj/effect/decal/cleanable/ash(get_turf(src)) + ..() + +/obj/structure/cloth_pile/proc/revive() + if(QDELETED(src) || QDELETED(cloth_golem)) //QDELETED also checks for null, so if no cloth golem is set this won't runtime + return + if(cloth_golem.suiciding || cloth_golem.disabilities & NOCLONE) + QDEL_NULL(cloth_golem) + return + + invisibility = INVISIBILITY_MAXIMUM //disappear before the animation + new /obj/effect/overlay/temp/mummy_animation(get_turf(src)) + if(cloth_golem.revive(full_heal = TRUE, admin_revive = TRUE)) + cloth_golem.grab_ghost() //won't pull if it's a suicide + sleep(20) + cloth_golem.forceMove(get_turf(src)) + cloth_golem.visible_message("[src] rises and reforms into [cloth_golem]!","You reform into yourself!") + cloth_golem = null + qdel(src) + +/obj/structure/cloth_pile/attackby(obj/item/weapon/P, mob/living/carbon/human/user, params) + . = ..() + + if(resistance_flags & ON_FIRE) + return + + if(P.is_hot()) + visible_message("[src] bursts into flames!") + fire_act() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species_types/humans.dm b/code/modules/mob/living/carbon/human/species_types/humans.dm index 94778d2716..db0489fd7a 100644 --- a/code/modules/mob/living/carbon/human/species_types/humans.dm +++ b/code/modules/mob/living/carbon/human/species_types/humans.dm @@ -10,9 +10,7 @@ /datum/species/human/qualifies_for_rank(rank, list/features) - if((!features["tail_human"] || features["tail_human"] == "None") && (!features["ears"] || features["ears"] == "None")) - return TRUE //Pure humans are always allowed in all roles. - return ..() + return TRUE //Curiosity killed the cat's wagging tail. /datum/species/human/spec_death(gibbed, mob/living/carbon/human/H) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index fd4b64f19b..ffd8544da6 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -7,6 +7,7 @@ species_traits = list(MUTCOLORS,EYECOLOR,NOBLOOD,VIRUSIMMUNE,TOXINLOVER) meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/slime exotic_blood = "slimejelly" + damage_overlay_type = "" var/datum/action/innate/regenerate_limbs/regenerate_limbs /datum/species/jelly/on_species_loss(mob/living/carbon/C) @@ -226,7 +227,7 @@ else ui_interact(owner) -/datum/action/innate/swap_body/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = conscious_state) +/datum/action/innate/swap_body/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.conscious_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index 306a4136bb..876d2f9e34 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -7,6 +7,8 @@ species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR,FACEHAIR) mutant_bodyparts = list("tail_lizard", "snout", "spines", "horns", "frills", "body_markings", "legs", "taur") mutant_organs = list(/obj/item/organ/tongue/lizard) + coldmod = 1.5 + heatmod = 0.67 default_features = list("mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0", "tail" = "Smooth", "snout" = "Round", "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None", "legs" = "Normal Legs", "taur" = "None") attack_verb = "slash" attack_sound = 'sound/weapons/slash.ogg' @@ -26,6 +28,9 @@ return randname +/datum/species/lizard/qualifies_for_rank(rank, list/features) + return TRUE + //I wag in death /datum/species/lizard/spec_death(gibbed, mob/living/carbon/human/H) if(H) @@ -38,4 +43,4 @@ name = "Ash Walker" id = "ashlizard" limbs_id = "lizard" - species_traits = list(MUTCOLORS,EYECOLOR,LIPS,NOBREATH,NOGUNS,DIGITIGRADE) \ No newline at end of file + species_traits = list(MUTCOLORS,EYECOLOR,LIPS,NOBREATH,NOGUNS,DIGITIGRADE) diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm index 01c7f7eb17..e5fd280d57 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -1,5 +1,3 @@ -var/global/image/plasmaman_on_fire = image("icon"='icons/mob/OnFire.dmi', "icon_state"="plasmaman") - /datum/species/plasmaman name = "Plasmaman" id = "plasmaman" @@ -52,7 +50,7 @@ var/global/image/plasmaman_on_fire = image("icon"='icons/mob/OnFire.dmi', "icon_ return 0 /datum/species/plasmaman/qualifies_for_rank(rank, list/features) - if(rank in security_positions) + if(rank in GLOB.security_positions) return 0 if(rank == "Clown" || rank == "Mime")//No funny bussiness return 0 diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index f274f7598c..a7bd40f3bf 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -99,7 +99,7 @@ There are several things that need to be remembered: /* --------------------------------------- */ //vvvvvv UPDATE_INV PROCS vvvvvv -/mob/living/carbon/human/update_inv_w_uniform() +/mob/living/carbon/human/update_inv_w_uniform(invdrop = TRUE) remove_overlay(UNIFORM_LAYER) if(client && hud_used) @@ -138,7 +138,7 @@ There are several things that need to be remembered: overlays_standing[UNIFORM_LAYER] = standing - else if(!(dna && dna.species.nojumpsuit)) + else if(!(dna && dna.species.nojumpsuit) && invdrop) // Automatically drop anything in store / id / belt if you're not wearing a uniform. //CHECK IF NECESARRY for(var/obj/item/thing in list(r_store, l_store, wear_id, belt)) // dropItemToGround(thing) @@ -274,7 +274,7 @@ There are several things that need to be remembered: client.screen += shoes //add it to client's screen update_observer_view(shoes,1) var/image/standing = shoes.build_worn_icon(state = shoes.icon_state, default_layer = SHOES_LAYER, default_icon_file = 'icons/mob/feet.dmi') - overlays_standing[SHOES_LAYER] = standing + overlays_standing[SHOES_LAYER] = standing apply_overlay(SHOES_LAYER) @@ -392,10 +392,10 @@ There are several things that need to be remembered: /proc/wear_female_version(t_color, icon, layer, type) var/index = t_color - var/icon/female_clothing_icon = female_clothing_icons[index] + var/icon/female_clothing_icon = GLOB.female_clothing_icons[index] if(!female_clothing_icon) //Create standing/laying icons if they don't exist generate_female_clothing(index,t_color,icon,type) - var/standing = image("icon"=female_clothing_icons["[t_color]"], "layer"=-layer) + var/standing = image("icon"=GLOB.female_clothing_icons["[t_color]"], "layer"=-layer) return(standing) /mob/living/carbon/human/proc/get_overlays_copy(list/unwantedLayers) diff --git a/code/modules/mob/living/carbon/human/whisper.dm b/code/modules/mob/living/carbon/human/whisper.dm index b796e2903c..6b73e16991 100644 --- a/code/modules/mob/living/carbon/human/whisper.dm +++ b/code/modules/mob/living/carbon/human/whisper.dm @@ -1,10 +1,15 @@ -/mob/living/carbon/human/whisper(message as text) +/mob/living/carbon/human/whisper_verb(message as text) + whisper(message) + +/mob/living/carbon/human/whisper(message, datum/language/language=null) if(!IsVocal()) return if(!message) return + if(!language) + language = get_default_language() - if(say_disabled) //This is here to try to identify lag problems + if(GLOB.say_disabled) //This is here to try to identify lag problems to_chat(usr, "Speech is currently admin-disabled.") return @@ -44,9 +49,11 @@ message = Ellipsis(message, 10, 1) message = treat_message(message) + if(!message) + return var/list/listening_dead = list() - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) if(M.stat == DEAD && M.client && ((M.client.prefs.chat_toggles & CHAT_GHOSTWHISPER) || (get_dist(M, src) <= 7))) listening_dead |= M @@ -71,14 +78,14 @@ for(var/atom/movable/AM in listening) if(istype(AM,/obj/item/device/radio)) continue - AM.Hear(rendered, src, languages_spoken, message, , spans) + AM.Hear(rendered, src, language, message, , spans) message = stars(message) rendered = "[GetVoice()][alt_name] [whispers], \"[attach_spans(message, spans)]\"" for(var/atom/movable/AM in eavesdropping) if(istype(AM,/obj/item/device/radio)) continue - AM.Hear(rendered, src, languages_spoken, message, , spans) + AM.Hear(rendered, src, language, message, , spans) if(critical) //Dying words. succumb(1) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 2a10f48276..eddd000747 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -29,7 +29,7 @@ //Start of a breath chain, calls breathe() /mob/living/carbon/handle_breathing() - if(SSmob.times_fired%4==2 || failed_last_breath) + if(SSmobs.times_fired%4==2 || failed_last_breath) breathe() //Breathe per 4 ticks, unless suffocating else if(istype(loc, /obj/)) @@ -47,8 +47,6 @@ if(loc) environment = loc.return_air() - if(ismob(loc)) return - var/datum/gas_mixture/breath if(health <= HEALTH_THRESHOLD_CRIT || (pulledby && pulledby.grab_state >= GRAB_KILL && !getorganslot("breathing_tube"))) @@ -132,7 +130,7 @@ if(prob(20)) emote("gasp") if(O2_partialpressure > 0) - var/ratio = safe_oxy_min/O2_partialpressure + var/ratio = 1 - O2_partialpressure/safe_oxy_min adjustOxyLoss(min(5*ratio, 3)) failed_last_breath = 1 oxygen_used = breath_gases["o2"][MOLES]*ratio @@ -255,7 +253,7 @@ dna.previous.Remove("blood_type") dna.temporary_mutations.Remove(mut) continue - HM = mutations_list[mut] + HM = GLOB.mutations_list[mut] HM.force_lose(src) dna.temporary_mutations.Remove(mut) @@ -294,7 +292,7 @@ stomach_contents.Remove(M) qdel(M) continue - if(SSmob.times_fired%3==1) + if(SSmobs.times_fired%3==1) if(!(M.status_flags & GODMODE)) M.adjustBruteLoss(5) nutrition += 10 diff --git a/code/modules/mob/living/carbon/monkey/combat.dm b/code/modules/mob/living/carbon/monkey/combat.dm index a58eabd44d..7eed766eaa 100644 --- a/code/modules/mob/living/carbon/monkey/combat.dm +++ b/code/modules/mob/living/carbon/monkey/combat.dm @@ -16,6 +16,8 @@ var/pickpocketing = FALSE var/disposing_body = FALSE var/obj/machinery/disposal/bodyDisposal = null + var/next_battle_screech = 0 + var/battle_screech_cooldown = 50 /mob/living/carbon/monkey/proc/IsStandingStill() return resisting || pickpocketing || disposing_body @@ -59,6 +61,12 @@ return 1 return 0 +/mob/living/carbon/monkey/proc/battle_screech() + if(next_battle_screech < world.time) + emote(pick("roar","screech")) + for(var/mob/living/carbon/monkey/M in view(7,src)) + M.next_battle_screech = world.time + battle_screech_cooldown + /mob/living/carbon/monkey/proc/equip_item(var/obj/item/I) if(I.loc == src) @@ -197,7 +205,7 @@ for(var/mob/living/L in around) if( should_target(L) ) if(L.stat == CONSCIOUS) - emote(pick("roar","screech")) + battle_screech() retaliate(L) return TRUE else if(bodyDisposal) @@ -241,7 +249,7 @@ var/list/around = view(src, MONKEY_ENEMY_VISION) for(var/mob/living/carbon/monkey/M in around) if(M.mode == MONKEY_IDLE && prob(MONKEY_RECRUIT_PROB)) - M.emote(pick("roar","screech")) + M.battle_screech() M.target = target M.mode = MONKEY_HUNT @@ -406,7 +414,7 @@ enemies[L] += MONKEY_HATRED_AMOUNT if(a_intent != INTENT_HARM) - emote(pick("roar","screech")) + battle_screech() a_intent = INTENT_HARM /mob/living/carbon/monkey/attack_hand(mob/living/L) diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index b774f06ead..250bc27180 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -16,7 +16,7 @@ if(stat == CONSCIOUS) if(!handle_combat()) if(prob(33) && canmove && isturf(loc) && !pulledby) - step(src, pick(cardinal)) + step(src, pick(GLOB.cardinal)) if(prob(1)) emote(pick("scratch","jump","roll","tail")) else diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 368a3278ef..4921fe48c6 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -2,18 +2,16 @@ name = "monkey" voice_name = "monkey" verb_say = "chimpers" + initial_languages = list(/datum/language/monkey) icon = 'icons/mob/monkey.dmi' icon_state = "" gender = NEUTER pass_flags = PASSTABLE - languages_spoken = MONKEY - languages_understood = MONKEY ventcrawler = VENTCRAWLER_NUDE butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/monkey = 5, /obj/item/stack/sheet/animalhide/monkey = 1) type_of_meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/monkey gib_type = /obj/effect/decal/cleanable/blood/gibs unique_name = 1 - devourable = 1 bodyparts = list(/obj/item/bodypart/chest/monkey, /obj/item/bodypart/head/monkey, /obj/item/bodypart/l_arm/monkey, /obj/item/bodypart/r_arm/monkey, /obj/item/bodypart/r_leg/monkey, /obj/item/bodypart/l_leg/monkey) @@ -160,4 +158,4 @@ if(prob(10)) var/obj/item/clothing/head/helmet/justice/escape/helmet = new(src) equip_to_slot_or_del(helmet,slot_head) - helmet.attack_self(src) // todo encapsulate toggle \ No newline at end of file + helmet.attack_self(src) // todo encapsulate toggle diff --git a/code/modules/mob/living/carbon/monkey/monkey_defense.dm b/code/modules/mob/living/carbon/monkey/monkey_defense.dm index 177cfb5712..a8cf291c02 100644 --- a/code/modules/mob/living/carbon/monkey/monkey_defense.dm +++ b/code/modules/mob/living/carbon/monkey/monkey_defense.dm @@ -117,26 +117,33 @@ playsound(loc, 'sound/weapons/slashmiss.ogg', 25, 1, -1) visible_message("[M] has attempted to lunge at [name]!", \ "[M] has attempted to lunge at [name]!", null, COMBAT_MESSAGE_RANGE) + if (M.a_intent == INTENT_DISARM) + var/obj/item/I = null playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1) if(prob(95)) Weaken(10) visible_message("[M] has tackled down [name]!", \ "[M] has tackled down [name]!", null, COMBAT_MESSAGE_RANGE) else + I = get_active_held_item() if(drop_item()) visible_message("[M] has disarmed [name]!", \ "[M] has disarmed [name]!", null, COMBAT_MESSAGE_RANGE) - add_logs(M, src, "disarmed") + else + I = null//did not manage to actually disarm the item, gross but no time to refactor + + add_logs(M, src, "disarmed", "[I ? " removing \the [I]" : ""]") updatehealth() /mob/living/carbon/monkey/attack_animal(mob/living/simple_animal/M) - if(..()) + . = ..() + if(.) var/damage = rand(M.melee_damage_lower, M.melee_damage_upper) var/dam_zone = dismembering_strike(M, pick("chest", "l_hand", "r_hand", "l_leg", "r_leg")) if(!dam_zone) //Dismemberment successful - return 1 + return TRUE var/obj/item/bodypart/affecting = get_bodypart(ran_zone(dam_zone)) if(!affecting) affecting = get_bodypart("chest") diff --git a/code/modules/mob/living/carbon/monkey/punpun.dm b/code/modules/mob/living/carbon/monkey/punpun.dm index 073a063451..901f2ceabc 100644 --- a/code/modules/mob/living/carbon/monkey/punpun.dm +++ b/code/modules/mob/living/carbon/monkey/punpun.dm @@ -32,7 +32,7 @@ equip_to_slot_or_del(new relic_mask, slot_wear_mask) /mob/living/carbon/monkey/punpun/Life() - if(ticker.current_state == GAME_STATE_FINISHED && !memory_saved) + if(SSticker.current_state == GAME_STATE_FINISHED && !memory_saved) Write_Memory(0) ..() diff --git a/code/modules/mob/living/carbon/monkey/update_icons.dm b/code/modules/mob/living/carbon/monkey/update_icons.dm index e44c53df01..581bedcc2b 100644 --- a/code/modules/mob/living/carbon/monkey/update_icons.dm +++ b/code/modules/mob/living/carbon/monkey/update_icons.dm @@ -68,7 +68,7 @@ //update whether our neck item appears on our hud. /mob/living/carbon/monkey/update_hud_neck(obj/item/I) if(client && hud_used && hud_used.hud_shown) - I.screen_loc = ui_monkey_mask + I.screen_loc = ui_monkey_neck client.screen += I //update whether our back item appears on our hud. diff --git a/code/modules/mob/living/carbon/say.dm b/code/modules/mob/living/carbon/say.dm index 8b1e3b6529..039b40b234 100644 --- a/code/modules/mob/living/carbon/say.dm +++ b/code/modules/mob/living/carbon/say.dm @@ -28,3 +28,15 @@ var/obj/item/I = get_active_held_item() if(I) . |= I.get_held_item_speechspans(src) + +/mob/living/carbon/can_speak_in_language(datum/language/dt) + if(HAS_SECONDARY_FLAG(src, OMNITONGUE)) + . = has_language(dt) + else if(has_language(dt)) + var/obj/item/organ/tongue/T = getorganslot("tongue") + if(T) + . = T.can_speak_in_language(dt) + else + . = initial(dt.flags) & TONGUELESS_SPEECH + else + . = FALSE diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm index 66b105869d..bd06c917a6 100644 --- a/code/modules/mob/living/carbon/update_icons.dm +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -276,12 +276,6 @@ See RemieRichards on irc.rizon.net #coderbus */ -var/global/list/limb_icon_cache = list() - -/mob/living/carbon - var/icon_render_key = "" - - //produces a key based on the mob's limbs /mob/living/carbon/proc/generate_icon_render_key() diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 5c20a8ea45..0734670468 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -26,20 +26,20 @@ /mob/living/proc/spread_bodyparts() return -/mob/living/dust() +/mob/living/dust(just_ash = FALSE) death(1) if(buckled) buckled.unbuckle_mob(src,force=1) dust_animation() - spawn_dust() + spawn_dust(just_ash) qdel(src) /mob/living/proc/dust_animation() return -/mob/living/proc/spawn_dust() +/mob/living/proc/spawn_dust(just_ash = FALSE) new /obj/effect/decal/cleanable/ash(loc) @@ -55,9 +55,9 @@ deadchat_broadcast(rendered, follow_target = src, turf_target = T, message_type=DEADCHAT_DEATHRATTLE) if(mind) mind.store_memory("Time of death: [tod]", 0) - living_mob_list -= src + GLOB.living_mob_list -= src if(!gibbed) - dead_mob_list += src + GLOB.dead_mob_list += src paralysis = 0 stunned = 0 weakened = 0 diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index 9e8a461f72..cacd433fec 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -7,7 +7,8 @@ param = copytext(act, custom_param + 1, length(act) + 1) act = copytext(act, 1, custom_param) - var/datum/emote/E = emote_list[act] + var/datum/emote/E + E = E.emote_list[act] if(!E) to_chat(src, "Unusable emote '[act]'. Say *help for a list.") return @@ -426,10 +427,12 @@ var/list/keys = list() var/list/message = list("Available emotes, you can use them with say \"*emote\": ") + var/datum/emote/E + var/list/emote_list = E.emote_list for(var/e in emote_list) if(e in keys) continue - var/datum/emote/E = emote_list[e] + E = emote_list[e] if(E.can_run_emote(user, TRUE)) keys += E.key diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 86d617b5b0..02106dd0e9 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -9,7 +9,7 @@ return if(!loc) if(client) - for(var/obj/effect/landmark/error/E in landmarks_list) + for(var/obj/effect/landmark/error/E in GLOB.landmarks_list) loc = E.loc break message_admins("[key_name_admin(src)] was found to have no .loc with an attached client, if the cause is unknown it would be wise to ask how this was accomplished.") @@ -40,9 +40,6 @@ //stuff in the stomach handle_stomach() - // Vore code for belly processes - handle_internal_contents() - update_gravity(mob_has_gravity()) if(machine) @@ -70,7 +67,7 @@ if(!digitaldisguise) src.digitaldisguise = image(loc = src) src.digitaldisguise.override = 1 - for(var/mob/living/silicon/ai/AI in player_list) + for(var/mob/living/silicon/ai/AI in GLOB.player_list) AI.client.images |= src.digitaldisguise diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 6eddad7787..7c26ab2cda 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -2,7 +2,7 @@ . = ..() generateStaticOverlay() if(staticOverlays.len) - for(var/mob/living/simple_animal/drone/D in player_list) + for(var/mob/living/simple_animal/drone/D in GLOB.player_list) if(D && D.seeStatic) if(D.staticChoice in staticOverlays) D.staticOverlays |= staticOverlays[D.staticChoice] @@ -13,10 +13,12 @@ if(unique_name) name = "[name] ([rand(1, 1000)])" real_name = name - var/datum/atom_hud/data/human/medical/advanced/medhud = huds[DATA_HUD_MEDICAL_ADVANCED] + var/datum/atom_hud/data/human/medical/advanced/medhud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] medhud.add_to_hud(src) faction += "\ref[src]" + language_menu = new(src) + /mob/living/prepare_huds() ..() @@ -33,7 +35,7 @@ buckled.unbuckle_mob(src,force=1) QDEL_NULL(riding_datum) - for(var/mob/living/simple_animal/drone/D in player_list) + for(var/mob/living/simple_animal/drone/D in GLOB.player_list) for(var/image/I in staticOverlays) D.staticOverlays.Remove(I) D.client.images.Remove(I) @@ -41,6 +43,8 @@ staticOverlays.len = 0 remove_from_all_data_huds() + QDEL_NULL(language_menu) + return ..() /mob/living/ghostize(can_reenter_corpse = 1) @@ -342,8 +346,8 @@ if(full_heal) fully_heal(admin_revive) if(stat == DEAD && can_be_revived()) //in some cases you can't revive (e.g. no brain) - dead_mob_list -= src - living_mob_list += src + GLOB.dead_mob_list -= src + GLOB.living_mob_list += src suiciding = 0 stat = UNCONSCIOUS //the mob starts unconscious, blind_eyes(1) @@ -480,7 +484,7 @@ newdir = NORTH else if(newdir == 12) //E + W newdir = EAST - if((newdir in cardinal) && (prob(50))) + if((newdir in GLOB.cardinal) && (prob(50))) newdir = turn(get_dir(T, src.loc), 180) if(!blood_exists) new /obj/effect/decal/cleanable/trail_holder(src.loc) @@ -546,9 +550,6 @@ if(buckled && last_special <= world.time) resist_buckle() - // climbing out of a gut - if(attempt_vr(src,"vore_process_resist",args)) return TRUE - //Breaking out of a container (Locker, sleeper, cryo...) else if(isobj(loc)) var/obj/C = loc @@ -598,7 +599,7 @@ return name /mob/living/update_gravity(has_gravity,override = 0) - if(!ticker || !ticker.mode) + if(!SSticker || !SSticker.mode) return if(has_gravity) clear_alert("weightless") @@ -668,7 +669,8 @@ if(what && Adjacent(who) && what.mob_can_equip(who, src, final_where, TRUE)) if(temporarilyRemoveItemFromInventory(what)) if(where_list) - who.put_in_hand(what, where_list[2]) + if(!who.put_in_hand(what, where_list[2])) + what.forceMove(get_turf(who)) else who.equip_to_slot(what, where, TRUE) @@ -725,14 +727,14 @@ ..() if(statpanel("Status")) - if(ticker && ticker.mode) - for(var/datum/gang/G in ticker.mode.gangs) + if(SSticker && SSticker.mode) + for(var/datum/gang/G in SSticker.mode.gangs) if(G.is_dominating) stat(null, "[G.name] Gang Takeover: [max(G.domination_time_remaining(), 0)]") - if(istype(ticker.mode, /datum/game_mode/blob)) - var/datum/game_mode/blob/B = ticker.mode + if(istype(SSticker.mode, /datum/game_mode/blob)) + var/datum/game_mode/blob/B = SSticker.mode if(B.message_sent) - stat(null, "Blobs to Blob Win: [blobs_legit.len]/[B.blobwincount]") + stat(null, "Blobs to Blob Win: [GLOB.blobs_legit.len]/[B.blobwincount]") /mob/living/cancel_camera() ..() @@ -802,9 +804,6 @@ setStaminaLoss(health - 2) update_health_hud() -/mob/proc/update_sight() - return - /mob/living/proc/owns_soul() if(mind) return mind.soulOwner == mind @@ -910,13 +909,14 @@ // used by secbot and monkeys Crossed /mob/living/proc/knockOver(var/mob/living/carbon/C) - C.visible_message("[pick( \ - "[C] dives out of [src]'s way!", \ - "[C] stumbles over [src]!", \ - "[C] jumps out of [src]'s path!", \ - "[C] trips over [src] and falls!", \ - "[C] topples over [src]!", \ - "[C] leaps out of [src]'s way!")]") + if(C.key) //save us from monkey hordes + C.visible_message("[pick( \ + "[C] dives out of [src]'s way!", \ + "[C] stumbles over [src]!", \ + "[C] jumps out of [src]'s path!", \ + "[C] trips over [src] and falls!", \ + "[C] topples over [src]!", \ + "[C] leaps out of [src]'s way!")]") C.Weaken(2) /mob/living/post_buckle_mob(mob/living/M) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 774a3f7dd7..4516a3c21a 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -122,7 +122,7 @@ IgniteMob() /mob/living/proc/grabbedby(mob/living/carbon/user, supress_message = 0) - if(user == src || anchored) + if(user == src || anchored || !isturf(user.loc)) return 0 if(!user.pulling || user.pulling != src) user.start_pulling(src, supress_message) @@ -172,7 +172,7 @@ /mob/living/attack_slime(mob/living/simple_animal/slime/M) - if(!ticker || !ticker.mode) + if(!SSticker || !SSticker.mode) to_chat(M, "You cannot attack people before the game has started.") return @@ -244,10 +244,6 @@ return 0 /mob/living/attack_alien(mob/living/carbon/alien/humanoid/M) - if(isturf(loc) && istype(loc.loc, /area/start)) - to_chat(M, "No attacking people at spawn, you jackass.") - return 0 - switch(M.a_intent) if ("help") visible_message("[M] caresses [src] with its scythe like arm.") diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index c9046013a0..e3ec7b8914 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -1,7 +1,5 @@ /mob/living see_invisible = SEE_INVISIBLE_LIVING - languages_spoken = HUMAN - languages_understood = HUMAN sight = 0 see_in_dark = 2 hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD) @@ -74,4 +72,7 @@ var/list/implants = null var/tesla_ignore = FALSE - var/datum/riding/riding_datum \ No newline at end of file + var/datum/riding/riding_datum + + var/datum/language/selected_default_language + var/datum/language_menu/language_menu diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm index dd62f3be04..6365ab04f4 100644 --- a/code/modules/mob/living/login.dm +++ b/code/modules/mob/living/login.dm @@ -5,8 +5,8 @@ mind.show_memory(src, 0) //Round specific stuff - if(ticker && ticker.mode) - switch(ticker.mode.name) + if(SSticker && SSticker.mode) + switch(SSticker.mode.name) if("sandbox") CanBuild() diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 814e9fe0c8..b12b6516c2 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -1,70 +1,69 @@ -var/list/department_radio_keys = list( - ":r" = "right hand", "#r" = "right hand", ".r" = "right hand", - ":l" = "left hand", "#l" = "left hand", ".l" = "left hand", - ":i" = "intercom", "#i" = "intercom", ".i" = "intercom", - ":h" = "department", "#h" = "department", ".h" = "department", - ":c" = "Command", "#c" = "Command", ".c" = "Command", - ":n" = "Science", "#n" = "Science", ".n" = "Science", - ":m" = "Medical", "#m" = "Medical", ".m" = "Medical", - ":e" = "Engineering", "#e" = "Engineering", ".e" = "Engineering", - ":s" = "Security", "#s" = "Security", ".s" = "Security", - ":w" = "whisper", "#w" = "whisper", ".w" = "whisper", - ":b" = "binary", "#b" = "binary", ".b" = "binary", - ":a" = "alientalk", "#a" = "alientalk", ".a" = "alientalk", - ":t" = "Syndicate", "#t" = "Syndicate", ".t" = "Syndicate", - ":u" = "Supply", "#u" = "Supply", ".u" = "Supply", - ":v" = "Service", "#v" = "Service", ".v" = "Service", - ":o" = "AI Private", "#o" = "AI Private", ".o" = "AI Private", - ":g" = "changeling", "#g" = "changeling", ".g" = "changeling", - ":y" = "Centcom", "#y" = "Centcom", ".y" = "Centcom", - ":x" = "cords", "#x" = "cords", ".x" = "cords", - ":p" = "admin", "#p" = "admin", ".p" = "admin", - ":d" = "deadmin", "#d" = "deadmin", ".d" = "deadmin", +GLOBAL_LIST_INIT(department_radio_keys, list( + ":r" = "right hand", ".r" = "right hand", + ":l" = "left hand", ".l" = "left hand", + ":i" = "intercom", ".i" = "intercom", + ":h" = "department", ".h" = "department", + ":c" = "Command", ".c" = "Command", + ":n" = "Science", ".n" = "Science", + ":m" = "Medical", ".m" = "Medical", + ":e" = "Engineering", ".e" = "Engineering", + ":s" = "Security", ".s" = "Security", + ":b" = "binary", ".b" = "binary", + ":a" = "alientalk", ".a" = "alientalk", + ":t" = "Syndicate", ".t" = "Syndicate", + ":u" = "Supply", ".u" = "Supply", + ":v" = "Service", ".v" = "Service", + ":o" = "AI Private", ".o" = "AI Private", + ":g" = "changeling", ".g" = "changeling", + ":y" = "Centcom", ".y" = "Centcom", + ":x" = "cords", ".x" = "cords", + ":p" = "admin", ".p" = "admin", + ":d" = "deadmin", ".d" = "deadmin", - ":R" = "right hand", "#R" = "right hand", ".R" = "right hand", - ":L" = "left hand", "#L" = "left hand", ".L" = "left hand", - ":I" = "intercom", "#I" = "intercom", ".I" = "intercom", - ":H" = "department", "#H" = "department", ".H" = "department", - ":C" = "Command", "#C" = "Command", ".C" = "Command", - ":N" = "Science", "#N" = "Science", ".N" = "Science", - ":M" = "Medical", "#M" = "Medical", ".M" = "Medical", - ":E" = "Engineering", "#E" = "Engineering", ".E" = "Engineering", - ":S" = "Security", "#S" = "Security", ".S" = "Security", - ":W" = "whisper", "#W" = "whisper", ".W" = "whisper", - ":B" = "binary", "#B" = "binary", ".B" = "binary", - ":A" = "alientalk", "#A" = "alientalk", ".A" = "alientalk", - ":T" = "Syndicate", "#T" = "Syndicate", ".T" = "Syndicate", - ":U" = "Supply", "#U" = "Supply", ".U" = "Supply", - ":V" = "Service", "#V" = "Service", ".V" = "Service", - ":O" = "AI Private", "#O" = "AI Private", ".O" = "AI Private", - ":G" = "changeling", "#G" = "changeling", ".G" = "changeling", - ":Y" = "Centcom", "#Y" = "Centcom", ".Y" = "Centcom", - ":X" = "cords", "#X" = "cords", ".X" = "cords", - ":P" = "admin", "#P" = "admin", ".P" = "admin", - ":D" = "deadmin", "#D" = "deadmin", ".D" = "deadmin", + ":R" = "right hand", ".R" = "right hand", + ":L" = "left hand", ".L" = "left hand", + ":I" = "intercom", ".I" = "intercom", + ":H" = "department", ".H" = "department", + ":C" = "Command", ".C" = "Command", + ":N" = "Science", ".N" = "Science", + ":M" = "Medical", ".M" = "Medical", + ":E" = "Engineering", ".E" = "Engineering", + ":S" = "Security", ".S" = "Security", + ":B" = "binary", ".B" = "binary", + ":A" = "alientalk", ".A" = "alientalk", + ":T" = "Syndicate", ".T" = "Syndicate", + ":U" = "Supply", ".U" = "Supply", + ":V" = "Service", ".V" = "Service", + ":O" = "AI Private", ".O" = "AI Private", + ":G" = "changeling", ".G" = "changeling", + ":Y" = "Centcom", ".Y" = "Centcom", + ":X" = "cords", ".X" = "cords", + ":P" = "admin", ".P" = "admin", + ":D" = "deadmin", ".D" = "deadmin", //kinda localization -- rastaf0 //same keys as above, but on russian keyboard layout. This file uses cp1251 as encoding. - ":ê" = "right hand", "#ê" = "right hand", ".ê" = "right hand", - ":ä" = "left hand", "#ä" = "left hand", ".ä" = "left hand", - ":ø" = "intercom", "#ø" = "intercom", ".ø" = "intercom", - ":ð" = "department", "#ð" = "department", ".ð" = "department", - ":ñ" = "Command", "#ñ" = "Command", ".ñ" = "Command", - ":ò" = "Science", "#ò" = "Science", ".ò" = "Science", - ":ü" = "Medical", "#ü" = "Medical", ".ü" = "Medical", - ":ó" = "Engineering", "#ó" = "Engineering", ".ó" = "Engineering", - ":û" = "Security", "#û" = "Security", ".û" = "Security", - ":ö" = "whisper", "#ö" = "whisper", ".ö" = "whisper", - ":è" = "binary", "#è" = "binary", ".è" = "binary", - ":ô" = "alientalk", "#ô" = "alientalk", ".ô" = "alientalk", - ":å" = "Syndicate", "#å" = "Syndicate", ".å" = "Syndicate", - ":é" = "Supply", "#é" = "Supply", ".é" = "Supply", - ":ï" = "changeling", "#ï" = "changeling", ".ï" = "changeling" -) + ":ê" = "right hand", ".ê" = "right hand", + ":ä" = "left hand", ".ä" = "left hand", + ":ø" = "intercom", ".ø" = "intercom", + ":ð" = "department", ".ð" = "department", + ":ñ" = "Command", ".ñ" = "Command", + ":ò" = "Science", ".ò" = "Science", + ":ü" = "Medical", ".ü" = "Medical", + ":ó" = "Engineering", ".ó" = "Engineering", + ":û" = "Security", ".û" = "Security", + ":è" = "binary", ".è" = "binary", + ":ô" = "alientalk", ".ô" = "alientalk", + ":å" = "Syndicate", ".å" = "Syndicate", + ":é" = "Supply", ".é" = "Supply", + ":ï" = "changeling", ".ï" = "changeling")) -var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN) +/mob/living/say(message, bubble_type,var/list/spans = list(), sanitize = TRUE, datum/language/language = null) + var/static/list/crit_allowed_modes = list(MODE_WHISPER = TRUE, MODE_CHANGELING = TRUE, MODE_ALIEN = TRUE) + var/static/list/unconscious_allowed_modes = list(MODE_CHANGELING = TRUE, MODE_ALIEN = TRUE) + + var/static/list/one_character_prefix = list(MODE_HEADSET = TRUE, MODE_ROBOT = TRUE, MODE_WHISPER = TRUE) -/mob/living/say(message, bubble_type,var/list/spans = list(), sanitize = TRUE) if(sanitize) message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) if(!message || message == "") @@ -72,8 +71,9 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN) var/message_mode = get_message_mode(message) var/original_message = message + var/in_critical = InCritical() - if(message_mode == MODE_HEADSET || message_mode == MODE_ROBOT) + if(one_character_prefix[message_mode]) message = copytext(message, 2) else if(message_mode) message = copytext(message, 3) @@ -94,34 +94,79 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN) say_dead(original_message) return - if(check_emote(original_message)) + if(check_emote(original_message) || !can_speak_basic(original_message)) return - if(!can_speak_basic(original_message)) //Stat is seperate so I can handle whispers properly. - return + if(in_critical) + if(!(crit_allowed_modes[message_mode])) + return + else if(stat == UNCONSCIOUS) + if(!(unconscious_allowed_modes[message_mode])) + return - if(stat && !(message_mode in crit_allowed_modes)) - return + // language comma detection. + var/datum/language/message_language = get_message_language(message) + if(message_language) + // No, you cannot speak in xenocommon just because you know the key + if(can_speak_in_language(message_language)) + language = message_language + message = copytext(message, 3) - if(handle_inherent_channels(message, message_mode)) //Hiveminds, binary chat & holopad. + // Trim the space if they said ",0 I LOVE LANGUAGES" + if(findtext(message, " ", 1, 2)) + message = copytext(message, 2) + + if(!language) + language = get_default_language() + + // Detection of language needs to be before inherent channels, because + // AIs use inherent channels for the holopad. Most inherent channels + // ignore the language argument however. + + if(handle_inherent_channels(message, message_mode, language)) //Hiveminds, binary chat & holopad. return if(!can_speak_vocal(message)) to_chat(src, "You find yourself unable to speak!") return - if(message_mode != MODE_WHISPER) //whisper() calls treat_message(); double process results in "hisspering" - message = treat_message(message) + var/message_range = 7 + + var/succumbed = FALSE + + if(message_mode == MODE_WHISPER) + message_range = 1 + spans |= SPAN_ITALICS + log_whisper("[src.name]/[src.key] : [message]") + if(in_critical) + var/health_diff = round(-HEALTH_THRESHOLD_DEAD + health) + // If we cut our message short, abruptly end it with a-.. + var/message_len = length(message) + message = copytext(message, 1, health_diff) + "[message_len > health_diff ? "-.." : "..."]" + message = Ellipsis(message, 10, 1) + message_mode = MODE_WHISPER_CRIT + succumbed = TRUE + else + log_say("[name]/[key] : [message]") + + message = treat_message(message) + if(!message) + return spans += get_spans() + if(language) + var/datum/language/L = GLOB.language_datums[language] + if(!istype(L)) + L = new language + GLOB.language_datums[language] = L + + spans |= L.spans + //Log what we've said with an associated timestamp, using the list's len for safety/to prevent overwriting messages log_message(message, INDIVIDUAL_SAY_LOG) - var/message_range = 7 var/radio_return = radio(message, message_mode, spans) - if(radio_return & NOPASS) //There's a whisper() message_mode, no need to continue the proc if that is called - return if(radio_return & ITALICS) spans |= SPAN_ITALICS if(radio_return & REDUCE_RANGE) @@ -137,12 +182,15 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN) if(pressure < ONE_ATMOSPHERE*0.4) //Thin air, let's italicise the message spans |= SPAN_ITALICS - send_speech(message, message_range, src, bubble_type, spans) + send_speech(message, message_range, src, bubble_type, spans, language, message_mode) + + if(succumbed) + succumb(1) + to_chat(src, compose_message(src, language, message, , spans, message_mode)) - log_say("[name]/[key] : [message]") return 1 -/mob/living/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans) +/mob/living/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode) if(!client) return var/deaf_message @@ -154,20 +202,38 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN) else deaf_message = "You can't hear yourself!" deaf_type = 2 // Since you should be able to hear yourself without looking - if(!(message_langs & languages_understood) || force_compose) //force_compose is so AIs don't end up without their hrefs. - message = compose_message(speaker, message_langs, raw_message, radio_freq, spans) + + // Recompose message for AI hrefs, language incomprehension. + message = compose_message(speaker, message_language, raw_message, radio_freq, spans, message_mode) show_message(message, 2, deaf_message, deaf_type) return message -/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) +/mob/living/send_speech(message, message_range = 6, obj/source = src, bubble_type = bubble_icon, list/spans, datum/language/message_language=null, message_mode) + var/static/list/eavesdropping_modes = list(MODE_WHISPER = TRUE, MODE_WHISPER_CRIT = TRUE) + var/eavesdrop_range = 0 + if(eavesdropping_modes[message_mode]) + eavesdrop_range = EAVESDROP_EXTRA_RANGE + var/list/listening = get_hearers_in_view(message_range+eavesdrop_range, source) + var/list/the_dead = list() + for(var/_M in GLOB.player_list) + var/mob/M = _M if(M.stat == DEAD && M.client && ((M.client.prefs.chat_toggles & CHAT_GHOSTEARS) || (get_dist(M, src) <= 7 && M.z == z)) && client) // client is so that ghosts don't have to listen to mice listening |= M + the_dead[M] = TRUE - var/rendered = compose_message(src, languages_spoken, message, , spans) - for(var/atom/movable/AM in listening) - AM.Hear(rendered, src, languages_spoken, message, , spans) + var/eavesdropping + var/eavesrendered + if(eavesdrop_range) + eavesdropping = stars(message) + eavesrendered = compose_message(src, message_language, eavesdropping, , spans, message_mode) + + var/rendered = compose_message(src, message_language, message, , spans, message_mode) + for(var/_AM in listening) + var/atom/movable/AM = _AM + if(eavesdrop_range && get_dist(source, AM) > message_range && !(the_dead[AM])) + AM.Hear(eavesrendered, src, message_language, eavesdropping, , spans, message_mode) + else + AM.Hear(rendered, src, message_language, message, , spans, message_mode) //speech bubble var/list/speech_bubble_recipients = list() @@ -176,8 +242,7 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN) speech_bubble_recipients.Add(M.client) var/image/I = image('icons/mob/talk.dmi', src, "[bubble_type][say_test(message)]", FLY_LAYER) I.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA - spawn(0) - flick_overlay(I, speech_bubble_recipients, 30) + INVOKE_ASYNC(GLOBAL_PROC, /.proc/flick_overlay, I, speech_bubble_recipients, 30) /mob/proc/binarycheck() return 0 @@ -216,16 +281,32 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN) /mob/living/proc/get_message_mode(message) if(copytext(message, 1, 2) == ";") return MODE_HEADSET + else if(copytext(message, 1, 2) == "#") + return MODE_WHISPER else if(length(message) > 2) - return department_radio_keys[copytext(message, 1, 3)] + return GLOB.department_radio_keys[copytext(message, 1, 3)] + +/mob/living/proc/get_message_language(message) + var/static/list/langlist + if(!langlist) + langlist = subtypesof(/datum/language) + + if(copytext(message, 1, 2) == ",") + var/key = copytext(message, 2, 3) + for(var/ld in langlist) + var/datum/language/LD = ld + if(initial(LD.key) == key) + return LD + return null /mob/living/proc/handle_inherent_channels(message, message_mode) if(message_mode == MODE_CHANGELING) switch(lingcheck()) if(3) var/msg = "[src.mind]: [message]" - for(var/mob/M in mob_list) - if(M in dead_mob_list) + for(var/_M in GLOB.mob_list) + var/mob/M = _M + if(M in GLOB.dead_mob_list) var/link = FOLLOW_LINK(M, src) to_chat(M, "[link] [msg]") else @@ -240,8 +321,9 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN) if(2) var/msg = "[mind.changeling.changelingID]: [message]" log_say("[mind.changeling.changelingID]/[src.key] : [message]") - for(var/mob/M in mob_list) - if(M in dead_mob_list) + for(var/_M in GLOB.mob_list) + var/mob/M = _M + if(M in GLOB.dead_mob_list) var/link = FOLLOW_LINK(M, src) to_chat(M, "[link] [msg]") else @@ -287,32 +369,28 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN) return message -/mob/living/proc/radio(message, message_mode, list/spans) +/mob/living/proc/radio(message, message_mode, list/spans, language) switch(message_mode) if(MODE_R_HAND) for(var/obj/item/r_hand in get_held_items_for_side("r", all = TRUE)) if (r_hand) - return r_hand.talk_into(src, message, , spans) + return r_hand.talk_into(src, message, , spans, language) return ITALICS | REDUCE_RANGE if(MODE_L_HAND) for(var/obj/item/l_hand in get_held_items_for_side("l", all = TRUE)) if (l_hand) - return l_hand.talk_into(src, message, , spans) + return l_hand.talk_into(src, message, , spans, language) return ITALICS | REDUCE_RANGE if(MODE_INTERCOM) for (var/obj/item/device/radio/intercom/I in view(1, null)) - I.talk_into(src, message, , spans) + I.talk_into(src, message, , spans, language) return ITALICS | REDUCE_RANGE if(MODE_BINARY) if(binarycheck()) robot_talk(message) return ITALICS | REDUCE_RANGE //Does not return 0 since this is only reached by humans, not borgs or AIs. - - if(MODE_WHISPER) - whisper(message) - return NOPASS return 0 /mob/living/lingcheck() //1 is ling w/ no hivemind. 2 is ling w/hivemind. 3 is ling victim being linked into hivemind. @@ -324,10 +402,30 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN) return 3 return 0 -/mob/living/say_quote(input, list/spans) +/mob/living/say_quote(input, list/spans, message_mode) var/tempinput = attach_spans(input, spans) + if(message_mode == MODE_WHISPER) + return "[verb_whisper], \"[tempinput]\"" + if(message_mode == MODE_WHISPER_CRIT) + return "[verb_whisper] in [p_their()] last breath, \"[tempinput]\"" if (stuttering) return "stammers, \"[tempinput]\"" if (getBrainLoss() >= 60) return "gibbers, \"[tempinput]\"" + return ..() + +/mob/living/get_default_language() + if(selected_default_language) + if(has_language(selected_default_language)) + return selected_default_language + else + selected_default_language = null + + . = ..() + +/mob/living/proc/open_language_menu(mob/user) + language_menu.ui_interact(user) + +/mob/living/whisper(message as text) + say("#[message]") diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index c5e9f788f8..c4f7005ac7 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -1,11 +1,10 @@ #define CALL_BOT_COOLDOWN 900 -var/list/ai_list = list() //Not sure why this is necessary... /proc/AutoUpdateAI(obj/subject) var/is_in_use = 0 if (subject!=null) - for(var/A in ai_list) + for(var/A in GLOB.ai_list) var/mob/living/silicon/ai/M = A if ((M.client && M.machine == subject)) is_in_use = 1 @@ -22,7 +21,6 @@ var/list/ai_list = list() canmove = 0 status_flags = CANSTUN|CANPUSH a_intent = INTENT_HARM //so we always get pushed instead of trying to swap - force_compose = 1 //This ensures that the AI always composes it's own hear message. Needed for hrefs and job display. sight = SEE_TURFS | SEE_MOBS | SEE_OBJS see_in_dark = 8 med_hud = DATA_HUD_MEDICAL_BASIC @@ -84,6 +82,10 @@ var/list/ai_list = list() var/obj/machinery/camera/portable/builtInCamera var/obj/structure/AIcore/deactivated/linked_core //For exosuit control + var/mob/living/silicon/robot/deployed_shell = null //For shell control + var/datum/action/innate/deploy_shell/deploy_action = new + var/datum/action/innate/deploy_last_shell/redeploy_action = new + var/chnotify = 0 /mob/living/silicon/ai/Initialize(mapload, datum/ai_laws/L, mob/target_ai) ..() @@ -138,22 +140,24 @@ var/list/ai_list = list() radio = new /obj/item/device/radio/headset/ai(src) aicamera = new/obj/item/device/camera/siliconcam/ai_camera(src) + deploy_action.Grant(src) + if(isturf(loc)) verbs.Add(/mob/living/silicon/ai/proc/ai_network_change, \ /mob/living/silicon/ai/proc/ai_statuschange, /mob/living/silicon/ai/proc/ai_hologram_change, \ /mob/living/silicon/ai/proc/toggle_camera_light, /mob/living/silicon/ai/proc/botcall,\ /mob/living/silicon/ai/proc/control_integrated_radio, /mob/living/silicon/ai/proc/set_automatic_say_channel) - ai_list += src - shuttle_caller_list += src + GLOB.ai_list += src + GLOB.shuttle_caller_list += src builtInCamera = new /obj/machinery/camera/portable(src) builtInCamera.network = list("SS13") /mob/living/silicon/ai/Destroy() - ai_list -= src - shuttle_caller_list -= src + GLOB.ai_list -= src + GLOB.shuttle_caller_list -= src SSshuttle.autoEvac() qdel(eyeobj) // No AI, no Eye malfhack = null @@ -247,13 +251,16 @@ var/list/ai_list = list() for(var/mob/living/silicon/robot/R in connected_robots) borg_area = get_area(R) var/robot_status = "Nominal" - if(R.stat || !R.client) + if(R.shell) + robot_status = "AI SHELL" + else if(R.stat || !R.client) robot_status = "OFFLINE" else if(!R.cell || R.cell.charge <= 0) robot_status = "DEPOWERED" //Name, Health, Battery, Module, Area, and Status! Everything an AI wants to know about its borgies! stat(null, text("[R.name] | S.Integrity: [R.health]% | Cell: [R.cell ? "[R.cell.charge]/[R.cell.maxcharge]" : "Empty"] | \ - Module: [R.designation] | Loc: [borg_area.name] | Status: [robot_status]")) + Module: [R.designation] | Loc: [borg_area.name] | Status: [robot_status]")) + stat(null, text("AI shell beacons detected: [LAZYLEN(GLOB.available_ai_shells)]")) //Count of total AI shells else stat(null, text("Systems nonfunctional")) @@ -293,7 +300,7 @@ var/list/ai_list = list() /mob/living/silicon/ai/proc/ai_roster() var/dat = "Crew RosterCrew Roster:

    " - dat += data_core.get_manifest() + dat += GLOB.data_core.get_manifest() dat += "" src << browse(dat, "window=airoster") @@ -315,7 +322,7 @@ var/list/ai_list = list() // hack to display shuttle timer if(!EMERGENCY_IDLE_OR_RECALLED) - var/obj/machinery/computer/communications/C = locate() in machines + var/obj/machinery/computer/communications/C = locate() in GLOB.machines if(C) C.post_status("shuttle") @@ -363,7 +370,7 @@ var/list/ai_list = list() unset_machine() src << browse(null, t1) if (href_list["switchcamera"]) - switchCamera(locate(href_list["switchcamera"])) in cameranet.cameras + switchCamera(locate(href_list["switchcamera"])) in GLOB.cameranet.cameras if (href_list["showalerts"]) ai_alerts() #ifdef AI_VOX @@ -403,14 +410,14 @@ var/list/ai_list = list() if(call_bot_cooldown > world.time) to_chat(src, "Error: Your last call bot command is still processing, please wait for the bot to finish calculating a route.") return - Bot = locate(href_list["callbot"]) in living_mob_list + Bot = locate(href_list["callbot"]) in GLOB.living_mob_list if(!Bot || Bot.remote_disabled || src.control_disabled) return //True if there is no bot found, the bot is manually emagged, or the AI is carded with wireless off. waypoint_mode = 1 to_chat(src, "Set your waypoint by clicking on a valid location free of obstructions.") return if(href_list["interface"]) //Remotely connect to a bot! - Bot = locate(href_list["interface"]) in living_mob_list + Bot = locate(href_list["interface"]) in GLOB.living_mob_list if(!Bot || Bot.remote_disabled || src.control_disabled) return Bot.attack_ai(src) @@ -423,7 +430,7 @@ var/list/ai_list = list() if(controlled_mech) to_chat(src, "You are already loaded into an onboard computer!") return - if(!cameranet.checkCameraVis(M)) + if(!GLOB.cameranet.checkCameraVis(M)) to_chat(src, "Exosuit is no longer near active cameras.") return if(lacks_power()) @@ -470,7 +477,7 @@ var/list/ai_list = list() d += "Query network status
    " d += "
    " - for (Bot in living_mob_list) + for (Bot in GLOB.living_mob_list) if(Bot.z == ai_Zlevel && !Bot.remote_disabled) //Only non-emagged bots on the same Z-level are detected! bot_area = get_area(Bot) var/bot_mode = Bot.get_mode() @@ -492,7 +499,7 @@ var/list/ai_list = list() //The target must be in view of a camera or near the core. if(turf_check in range(get_turf(src))) call_bot(turf_check) - else if(cameranet && cameranet.checkTurfVis(turf_check)) + else if(GLOB.cameranet && GLOB.cameranet.checkTurfVis(turf_check)) call_bot(turf_check) else to_chat(src, "Selected location is not visible.") @@ -582,7 +589,7 @@ var/list/ai_list = list() var/mob/living/silicon/ai/U = usr - for (var/obj/machinery/camera/C in cameranet.cameras) + for (var/obj/machinery/camera/C in GLOB.cameranet.cameras) if(!C.can_use()) continue @@ -601,7 +608,7 @@ var/list/ai_list = list() if(isnull(network)) network = old_network // If nothing is selected else - for(var/obj/machinery/camera/C in cameranet.cameras) + for(var/obj/machinery/camera/C in GLOB.cameranet.cameras) if(!C.can_use()) continue if(network in C.network) @@ -625,7 +632,7 @@ var/list/ai_list = list() return //won't work if dead var/list/ai_emotions = list("Very Happy", "Happy", "Neutral", "Unsure", "Confused", "Sad", "BSOD", "Blank", "Problems?", "Awesome", "Facepalm", "Friend Computer", "Dorfy", "Blue Glow", "Red Glow") var/emote = input("Please, select a status!", "AI Status", null, null) in ai_emotions - for (var/obj/machinery/M in machines) //change status + for (var/obj/machinery/M in GLOB.machines) //change status if(istype(M, /obj/machinery/ai_status_display)) var/obj/machinery/ai_status_display/AISD = M AISD.emotion = emote @@ -652,7 +659,7 @@ var/list/ai_list = list() if("Crew Member") var/list/personnel_list = list() - for(var/datum/data/record/t in data_core.locked)//Look in data core locked. + for(var/datum/data/record/t in GLOB.data_core.locked)//Look in data core locked. personnel_list["[t.fields["name"]]: [t.fields["rank"]]"] = t.fields["image"]//Pull names, rank, and image. if(personnel_list.len) @@ -791,12 +798,13 @@ var/list/ai_list = list() if(!..()) return if(interaction == AI_TRANS_TO_CARD)//The only possible interaction. Upload AI mob to a card. - if(!mind) - to_chat(user, "No intelligence patterns detected." ) - return if(!can_be_carded) to_chat(user, "Transfer failed.") return + disconnect_shell() //If the AI is controlling a borg, force the player back to core! + if(!mind) + to_chat(user, "No intelligence patterns detected." ) + return ShutOffDoomsdayDevice() new /obj/structure/AIcore/deactivated(loc)//Spawns a deactivated terminal at AI location. ai_restore_power()//So the AI initially has power. @@ -818,12 +826,12 @@ var/list/ai_list = list() //stop AIs from leaving windows open and using then after they lose vision //apc_override is needed here because AIs use their own APC when powerless //get_turf_pixel() is because APCs in maint aren't actually in view of the inner camera - if(M && cameranet && !cameranet.checkTurfVis(get_turf_pixel(M)) && !apc_override) + if(M && GLOB.cameranet && !GLOB.cameranet.checkTurfVis(get_turf_pixel(M)) && !apc_override) return return 1 -/mob/living/silicon/ai/proc/relay_speech(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans) - raw_message = lang_treat(speaker, message_langs, raw_message, spans) +/mob/living/silicon/ai/proc/relay_speech(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode) + raw_message = lang_treat(speaker, message_language, raw_message, spans, message_mode) var/name_used = speaker.GetVoice() var/rendered = "Relayed Speech: [name_used] [raw_message]" show_message(rendered, 2) @@ -907,6 +915,69 @@ var/list/ai_list = list() to_chat(src, "Hack complete. \The [apc] is now under your exclusive control.") apc.update_icon() +/mob/living/silicon/ai/verb/deploy_to_shell(var/mob/living/silicon/robot/target) + set category = "AI Commands" + set name = "Deploy to Shell" + + if(stat || lacks_power() || control_disabled) + to_chat(src, "Wireless networking module is offline.") + return + + var/list/possible = list() + + for(var/borgie in GLOB.available_ai_shells) + var/mob/living/silicon/robot/R = borgie + if(R.shell && !R.deployed && (R.stat != DEAD) && (!R.connected_ai ||(R.connected_ai == src))) + possible += R + + if(!LAZYLEN(possible)) + to_chat(src, "No usable AI shell beacons detected.") + + if(!target || !(target in possible)) //If the AI is looking for a new shell, or its pre-selected shell is no longer valid + target = input(src, "Which body to control?") as null|anything in possible + + if (!target || target.stat == DEAD || target.deployed || !(!target.connected_ai ||(target.connected_ai == src))) + return + + else if(mind) + soullink(/datum/soullink/sharedbody, src, target) + deployed_shell = target + target.deploy_init(src) + mind.transfer_to(target) + diag_hud_set_deployed() + +/datum/action/innate/deploy_shell + name = "Deploy to AI Shell" + desc = "Wirelessly control a specialized cyborg shell." + button_icon_state = "ai_shell" + +/datum/action/innate/deploy_shell/Trigger() + var/mob/living/silicon/ai/AI = owner + if(!AI) + return + AI.deploy_to_shell() + +/datum/action/innate/deploy_last_shell + name = "Reconnect to shell" + desc = "Reconnect to the most recently used AI shell." + button_icon_state = "ai_last_shell" + var/mob/living/silicon/robot/last_used_shell + +/datum/action/innate/deploy_last_shell/Trigger() + if(!owner) + return + if(last_used_shell) + var/mob/living/silicon/ai/AI = owner + AI.deploy_to_shell(last_used_shell) + else + Remove(owner) //If the last shell is blown, destroy it. + +/mob/living/silicon/ai/proc/disconnect_shell() + if(deployed_shell) //Forcibly call back AI in event of things such as damage, EMP or power loss. + to_chat(src, "Your remote connection has been reset!") + deployed_shell.undeploy() + diag_hud_set_deployed() + /mob/living/silicon/ai/resist() return diff --git a/code/modules/mob/living/silicon/ai/ai_defense.dm b/code/modules/mob/living/silicon/ai/ai_defense.dm index 3bd328b3a8..75ef88768f 100644 --- a/code/modules/mob/living/silicon/ai/ai_defense.dm +++ b/code/modules/mob/living/silicon/ai/ai_defense.dm @@ -6,7 +6,7 @@ /mob/living/silicon/ai/attack_alien(mob/living/carbon/alien/humanoid/M) - if(!ticker || !ticker.mode) + if(!SSticker || !SSticker.mode) to_chat(M, "You cannot attack people before the game has started.") return ..() @@ -22,6 +22,7 @@ return 0 /mob/living/silicon/ai/emp_act(severity) + disconnect_shell() if (prob(30)) switch(pick(1,2)) if(1) diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm index f769bf5cc2..c78084335f 100644 --- a/code/modules/mob/living/silicon/ai/death.dm +++ b/code/modules/mob/living/silicon/ai/death.dm @@ -16,7 +16,7 @@ if(eyeobj) eyeobj.setLoc(get_turf(src)) - shuttle_caller_list -= src + GLOB.shuttle_caller_list -= src SSshuttle.autoEvac() ShutOffDoomsdayDevice() @@ -35,7 +35,7 @@ if(nuking) set_security_level("red") nuking = FALSE - for(var/obj/item/weapon/pinpointer/P in pinpointer_list) + for(var/obj/item/weapon/pinpointer/P in GLOB.pinpointer_list) P.switch_mode_to(TRACK_NUKE_DISK) //Party's over, back to work, everyone P.nuke_warning = FALSE diff --git a/code/modules/mob/living/silicon/ai/examine.dm b/code/modules/mob/living/silicon/ai/examine.dm index a66ef0f018..db72e94a86 100644 --- a/code/modules/mob/living/silicon/ai/examine.dm +++ b/code/modules/mob/living/silicon/ai/examine.dm @@ -1,21 +1,23 @@ /mob/living/silicon/ai/examine(mob/user) var/msg = "*---------*\nThis is \icon[src] [src]!\n" - if (src.stat == DEAD) + if (stat == DEAD) msg += "It appears to be powered-down.\n" else msg += "" - if (src.getBruteLoss()) - if (src.getBruteLoss() < 30) + if (getBruteLoss()) + if (getBruteLoss() < 30) msg += "It looks slightly dented.\n" else msg += "It looks severely dented!\n" - if (src.getFireLoss()) - if (src.getFireLoss() < 30) + if (getFireLoss()) + if (getFireLoss() < 30) msg += "It looks slightly charred.\n" else msg += "Its casing is melted and heat-warped!\n" msg += "" - if (shunted == 0 && !src.client) + if(deployed_shell) + msg += "The wireless networking light is blinking.\n" + else if (!shunted && !client) msg += "[src]Core.exe has stopped responding! NTOS is searching for a solution to the problem...\n" msg += "*---------*" diff --git a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm index 2d1d784a7a..ca0a2e8c1c 100644 --- a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm +++ b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm @@ -2,9 +2,9 @@ // // The datum containing all the chunks. -var/const/CHUNK_SIZE = 16 // Only chunk sizes that are to the power of 2. E.g: 2, 4, 8, 16, etc.. +#define CHUNK_SIZE 16 // Only chunk sizes that are to the power of 2. E.g: 2, 4, 8, 16, etc.. -var/datum/cameranet/cameranet = new() +GLOBAL_DATUM_INIT(cameranet, /datum/cameranet, new) /datum/cameranet var/name = "Camera Net" // Name to show for VV and stat() @@ -66,7 +66,7 @@ var/datum/cameranet/cameranet = new() /datum/cameranet/proc/updateVisibility(atom/A, opacity_check = 1) - if(!ticker || (opacity_check && !A.opacity)) + if(!SSticker || (opacity_check && !A.opacity)) return majorChunkChange(A, 2) @@ -151,7 +151,7 @@ var/datum/cameranet/cameranet = new() if(!statclick) statclick = new/obj/effect/statclick/debug(null, "Initializing...", src) - stat(name, statclick.update("Cameras: [cameranet.cameras.len] | Chunks: [cameranet.chunks.len]")) + stat(name, statclick.update("Cameras: [GLOB.cameranet.cameras.len] | Chunks: [GLOB.cameranet.chunks.len]")) // Debug verb for VVing the chunk that the turf is in. /* diff --git a/code/modules/mob/living/silicon/ai/freelook/chunk.dm b/code/modules/mob/living/silicon/ai/freelook/chunk.dm index d9ed086be9..24197e88e4 100644 --- a/code/modules/mob/living/silicon/ai/freelook/chunk.dm +++ b/code/modules/mob/living/silicon/ai/freelook/chunk.dm @@ -173,4 +173,5 @@ t.obscured.plane = LIGHTING_PLANE+1 obscured += t.obscured -#undef UPDATE_BUFFER \ No newline at end of file +#undef UPDATE_BUFFER +#undef CHUNK_SIZE \ No newline at end of file diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm index 316140a508..dce38bd664 100644 --- a/code/modules/mob/living/silicon/ai/freelook/eye.dm +++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm @@ -21,7 +21,7 @@ return T = get_turf(T) loc = T - cameranet.visibility(src) + GLOB.cameranet.visibility(src) if(ai.client) ai.client.eye = src update_parallax_contents() @@ -104,6 +104,6 @@ acceleration = !acceleration to_chat(usr, "Camera acceleration has been toggled [acceleration ? "on" : "off"].") -/mob/camera/aiEye/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans) +/mob/camera/aiEye/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode) if(relay_speech && speaker && ai && !radio_freq && speaker != ai && near_camera(speaker)) - ai.relay_speech(message, speaker, message_langs, raw_message, radio_freq, spans) + ai.relay_speech(message, speaker, message_language, raw_message, radio_freq, spans) diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index 24e4ac510a..8318f2459f 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -65,6 +65,7 @@ health = maxHealth - getOxyLoss() - getToxLoss() - getBruteLoss() - getFireLoss() update_stat() diag_hud_set_health() + disconnect_shell() /mob/living/silicon/ai/update_stat() if(status_flags & GODMODE) @@ -90,6 +91,7 @@ if(see_override) see_invisible = see_override + sync_lighting_plane_alpha() /mob/living/silicon/ai/proc/start_RestorePowerRoutine() @@ -146,7 +148,7 @@ to_chat(src, "Receiving control information from APC.") sleep(2) apc_override = 1 - theAPC.ui_interact(src, state = conscious_state) + theAPC.ui_interact(src, state = GLOB.conscious_state) apc_override = 0 aiRestorePowerRoutine = POWER_RESTORATION_APC_FOUND sleep(50) @@ -163,6 +165,7 @@ update_sight() /mob/living/silicon/ai/proc/ai_lose_power() + disconnect_shell() aiRestorePowerRoutine = POWER_RESTORATION_START blind_eyes(1) update_sight() diff --git a/code/modules/mob/living/silicon/ai/login.dm b/code/modules/mob/living/silicon/ai/login.dm index 918a54eabe..aa009df4ef 100644 --- a/code/modules/mob/living/silicon/ai/login.dm +++ b/code/modules/mob/living/silicon/ai/login.dm @@ -6,7 +6,7 @@ client.images += blood if(stat != DEAD) - for(var/obj/machinery/ai_status_display/O in machines) //change status + for(var/obj/machinery/ai_status_display/O in GLOB.machines) //change status O.mode = 1 O.emotion = "Neutral" view_core() diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm index c72a9fc026..3aeec1035d 100644 --- a/code/modules/mob/living/silicon/ai/say.dm +++ b/code/modules/mob/living/silicon/ai/say.dm @@ -1,6 +1,6 @@ -/mob/living/silicon/ai/say(message) +/mob/living/silicon/ai/say(message, language) if(parent && istype(parent) && parent.stat != 2) //If there is a defined "parent" AI, it is actually an AI, and it is alive, anything the AI tries to say is said by the parent instead. - parent.say(message) + parent.say(message, language) return ..(message) @@ -17,7 +17,7 @@ /mob/living/silicon/ai/IsVocal() return !config.silent_ai -/mob/living/silicon/ai/radio(message, message_mode, list/spans) +/mob/living/silicon/ai/radio(message, message_mode, list/spans, language) if(!radio_enabled || aiRestorePowerRoutine || stat) //AI cannot speak if radio is disabled (via intellicard) or depowered. to_chat(src, "Your radio transmitter is offline!") return 0 @@ -29,17 +29,17 @@ else return ..() -/mob/living/silicon/ai/handle_inherent_channels(message, message_mode) +/mob/living/silicon/ai/handle_inherent_channels(message, message_mode, language) . = ..() if(.) return . if(message_mode == MODE_HOLOPAD) - holopad_talk(message) + holopad_talk(message, language) return 1 //For holopads only. Usable by AI. -/mob/living/silicon/ai/proc/holopad_talk(message) +/mob/living/silicon/ai/proc/holopad_talk(message, language) log_say("[key_name(src)] : [message]") message = trim(message) @@ -49,20 +49,15 @@ var/obj/machinery/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, "robot", get_spans()) + send_speech(message, 7, T, "robot", get_spans(), language) to_chat(src, "Holopad transmitted, [real_name] \"[message]\"") else to_chat(src, "No holopad connected.") - return // Make sure that the code compiles with AI_VOX undefined #ifdef AI_VOX - -var/announcing_vox = 0 // Stores the time of the last announcement -var/const/VOX_CHANNEL = 200 -var/const/VOX_DELAY = 600 - +#define VOX_DELAY 600 /mob/living/silicon/ai/verb/announcement_help() set name = "Announcement Help" @@ -79,10 +74,10 @@ var/const/VOX_DELAY = 600 WARNING:
    Misuse of the announcement system will get you job banned.
    " var/index = 0 - for(var/word in vox_sounds) + for(var/word in GLOB.vox_sounds) index++ dat += "[capitalize(word)]" - if(index != vox_sounds.len) + if(index != GLOB.vox_sounds.len) dat += " / " var/datum/browser/popup = new(src, "announce_help", "Announcement Help", 500, 400) @@ -91,6 +86,7 @@ var/const/VOX_DELAY = 600 /mob/living/silicon/ai/proc/announcement() + var/static/announcing_vox = 0 // Stores the time of the last announcement if(announcing_vox > world.time) to_chat(src, "Please wait [round((announcing_vox - world.time) / 10)] seconds.") return @@ -120,7 +116,7 @@ var/const/VOX_DELAY = 600 if(!word) words -= word continue - if(!vox_sounds[word]) + if(!GLOB.vox_sounds[word]) incorrect_words += word if(incorrect_words.len) @@ -147,16 +143,16 @@ var/const/VOX_DELAY = 600 word = lowertext(word) - if(vox_sounds[word]) + if(GLOB.vox_sounds[word]) - var/sound_file = vox_sounds[word] - var/sound/voice = sound(sound_file, wait = 1, channel = VOX_CHANNEL) + var/sound_file = GLOB.vox_sounds[word] + var/sound/voice = sound(sound_file, wait = 1, channel = CHANNEL_VOX) voice.status = SOUND_STREAM // If there is no single listener, broadcast to everyone in the same z level if(!only_listener) // Play voice for all mobs in the z level - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) if(M.client && !M.ear_deaf && (M.client.prefs.toggles & SOUND_ANNOUNCEMENTS)) var/turf/T = get_turf(M) if(T.z == z_level) @@ -167,3 +163,12 @@ var/const/VOX_DELAY = 600 return 0 #endif + +/mob/living/silicon/ai/can_speak_in_language(datum/language/dt) + if(HAS_SECONDARY_FLAG(src, OMNITONGUE)) + . = has_language(dt) + else if(is_servant_of_ratvar(src)) + // Ratvarian AIs can only speak Ratvarian + . = ispath(dt, /datum/language/ratvar) && has_language(dt) + else + . = ..() diff --git a/code/modules/mob/living/silicon/ai/vox_sounds.dm b/code/modules/mob/living/silicon/ai/vox_sounds.dm index c39db7a03b..8f9eb26356 100644 --- a/code/modules/mob/living/silicon/ai/vox_sounds.dm +++ b/code/modules/mob/living/silicon/ai/vox_sounds.dm @@ -2,7 +2,7 @@ // Dynamically loading it has bad results with sounds overtaking each other, even with the wait variable. #ifdef AI_VOX -var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', +GLOBAL_LIST_INIT(vox_sounds, list("," = 'sound/vox_fem/,.ogg', "." = 'sound/vox_fem/..ogg', "a" = 'sound/vox_fem/a.ogg', "abortions" = 'sound/vox_fem/abortions.ogg', @@ -713,6 +713,5 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "z" = 'sound/vox_fem/z.ogg', "zero" = 'sound/vox_fem/zero.ogg', "zone" = 'sound/vox_fem/zone.ogg', -"zulu" = 'sound/vox_fem/zulu.ogg', -) +"zulu" = 'sound/vox_fem/zulu.ogg')) #endif \ No newline at end of file diff --git a/code/modules/mob/living/silicon/login.dm b/code/modules/mob/living/silicon/login.dm index 6b44ce2419..38d83af1a4 100644 --- a/code/modules/mob/living/silicon/login.dm +++ b/code/modules/mob/living/silicon/login.dm @@ -1,6 +1,6 @@ /mob/living/silicon/Login() - if(mind && ticker && ticker.mode) - ticker.mode.remove_cultist(mind, 0, 0) - ticker.mode.remove_revolutionary(mind, 0) - ticker.mode.remove_gangster(mind, remove_bosses=1) + if(mind && SSticker && SSticker.mode) + SSticker.mode.remove_cultist(mind, 0, 0) + SSticker.mode.remove_revolutionary(mind, 0) + SSticker.mode.remove_gangster(mind, remove_bosses=1) ..() diff --git a/code/modules/mob/living/silicon/pai/death.dm b/code/modules/mob/living/silicon/pai/death.dm index 2b9e9adf21..42259500da 100644 --- a/code/modules/mob/living/silicon/pai/death.dm +++ b/code/modules/mob/living/silicon/pai/death.dm @@ -4,10 +4,12 @@ stat = DEAD canmove = 0 card.removePersonality() + if(holoform) + card.forceMove(loc) update_sight() clear_fullscreens() //New pAI's get a brand new mind to prevent meta stuff from their previous life. This new mind causes problems down the line if it's not deleted here. - living_mob_list -= src + GLOB.living_mob_list -= src ghostize() qdel(src) \ No newline at end of file diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index eba108deb6..2fe6a8069d 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -78,13 +78,13 @@ . += slowdown /mob/living/silicon/pai/Destroy() - pai_list -= src + GLOB.pai_list -= src ..() /mob/living/silicon/pai/Initialize() var/obj/item/device/paicard/P = loc START_PROCESSING(SSfastprocess, src) - pai_list += src + GLOB.pai_list += src make_laws() canmove = 0 if(!istype(P)) //when manually spawning a pai, we create a card to put it into. @@ -110,10 +110,13 @@ var/datum/action/innate/pai/chassis/AC = new /datum/action/innate/pai/chassis var/datum/action/innate/pai/rest/AR = new /datum/action/innate/pai/rest var/datum/action/innate/pai/light/AL = new /datum/action/innate/pai/light + + var/datum/action/language_menu/ALM = new AS.Grant(src) AC.Grant(src) AR.Grant(src) AL.Grant(src) + ALM.Grant(src) emittersemicd = TRUE addtimer(CALLBACK(src, .proc/emittercool), 600) diff --git a/code/modules/mob/living/silicon/pai/pai_shell.dm b/code/modules/mob/living/silicon/pai/pai_shell.dm index 6f6e449522..5c50a87b45 100644 --- a/code/modules/mob/living/silicon/pai/pai_shell.dm +++ b/code/modules/mob/living/silicon/pai/pai_shell.dm @@ -102,4 +102,4 @@ /mob/living/silicon/pai/movement_delay() . = ..() - . += 1 //A bit slower than humans, so they're easier to smash \ No newline at end of file + . += 1 //A bit slower than humans, so they're easier to smash diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index d1202a491d..43647c89d6 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -33,7 +33,7 @@ if(temp) left_part = temp else if(src.stat == 2) // Show some flavor text if the pAI is dead - left_part = "RrR a Rro" + left_part = "�Rr�R �a�� ��Rr����o�" right_part = "
    Program index hash not found
    " else @@ -220,18 +220,18 @@ // Accessing medical records if("medicalrecord") if(subscreen == 1) - medicalActive1 = find_record("id", href_list["med_rec"], data_core.general) + medicalActive1 = find_record("id", href_list["med_rec"], GLOB.data_core.general) if(medicalActive1) - medicalActive2 = find_record("id", href_list["med_rec"], data_core.medical) + medicalActive2 = find_record("id", href_list["med_rec"], GLOB.data_core.medical) if(!medicalActive2) medicalActive1 = null temp = "Unable to locate requested security record. Record may have been deleted, or never have existed." if("securityrecord") if(subscreen == 1) - securityActive1 = find_record("id", href_list["sec_rec"], data_core.general) + securityActive1 = find_record("id", href_list["sec_rec"], GLOB.data_core.general) if(securityActive1) - securityActive2 = find_record("id", href_list["sec_rec"], data_core.security) + securityActive2 = find_record("id", href_list["sec_rec"], GLOB.data_core.security) if(!securityActive2) securityActive1 = null temp = "Unable to locate requested security record. Record may have been deleted, or never have existed." @@ -241,7 +241,7 @@ if(secHUD) add_sec_hud() else - var/datum/atom_hud/sec = huds[sec_hud] + var/datum/atom_hud/sec = GLOB.huds[sec_hud] sec.remove_hud_from(src) if("medicalhud") if(href_list["toggle"]) @@ -249,13 +249,13 @@ if(medHUD) add_med_hud() else - var/datum/atom_hud/med = huds[med_hud] + var/datum/atom_hud/med = GLOB.huds[med_hud] med.remove_hud_from(src) if("translator") if(href_list["toggle"]) - var/on_already = ((languages_understood == ALL) && (languages_spoken == ALL)) - languages_spoken = on_already ? (HUMAN | ROBOT) : ALL - languages_understood = on_already ? (HUMAN | ROBOT) : ALL + if(!HAS_SECONDARY_FLAG(src, OMNITONGUE)) + grant_all_languages(TRUE) + // this is PERMAMENT. if("doorjack") if(href_list["jack"]) if(src.cable && src.cable.machine) @@ -313,7 +313,8 @@ if(s == "medical HUD") dat += "Medical Analysis Suite[(src.medHUD) ? " On" : " Off"]
    " if(s == "universal translator") - dat += "Universal Translator[((languages_spoken == ALL) && (languages_understood == ALL)) ? " On" : " Off"]
    " + var/translator_on = HAS_SECONDARY_FLAG(src, OMNITONGUE) + dat += "Universal Translator[translator_on ? " On" : " Off"]
    " if(s == "projection array") dat += "Projection Array
    " if(s == "camera jack") @@ -413,8 +414,8 @@ // Crew Manifest /mob/living/silicon/pai/proc/softwareManifest() . += "

    Crew Manifest



    " - if(data_core.general) - for(var/datum/data/record/t in sortRecord(data_core.general)) + if(GLOB.data_core.general) + for(var/datum/data/record/t in sortRecord(GLOB.data_core.general)) . += "[t.fields["name"]] - [t.fields["rank"]]
    " . += "" return . @@ -424,16 +425,16 @@ switch(subscreen) if(0) . += "

    Medical Records


    " - if(data_core.general) - for(var/datum/data/record/R in sortRecord(data_core.general)) + if(GLOB.data_core.general) + for(var/datum/data/record/R in sortRecord(GLOB.data_core.general)) . += "[R.fields["id"]]: [R.fields["name"]]
    " if(1) . += "
    Medical Record

    " - if(medicalActive1 in data_core.general) + if(medicalActive1 in GLOB.data_core.general) . += "Name: [medicalActive1.fields["name"]] ID: [medicalActive1.fields["id"]]
    \nSex: [medicalActive1.fields["sex"]]
    \nAge: [medicalActive1.fields["age"]]
    \nFingerprint: [medicalActive1.fields["fingerprint"]]
    \nPhysical Status: [medicalActive1.fields["p_stat"]]
    \nMental Status: [medicalActive1.fields["m_stat"]]
    " else . += "
    Requested medical record not found.

    " - if(medicalActive2 in data_core.medical) + if(medicalActive2 in GLOB.data_core.medical) . += "
    \n
    Medical Data

    \nBlood Type:
    [medicalActive2.fields["blood_type"]]
    \nDNA: [medicalActive2.fields["b_dna"]]
    \n
    \nMinor Disabilities: [medicalActive2.fields["mi_dis"]]
    \nDetails: [medicalActive2.fields["mi_dis_d"]]
    \n
    \nMajor Disabilities: [medicalActive2.fields["ma_dis"]]
    \nDetails: [medicalActive2.fields["ma_dis_d"]]
    \n
    \nAllergies: [medicalActive2.fields["alg"]]
    \nDetails: [medicalActive2.fields["alg_d"]]
    \n
    \nCurrent Diseases: [medicalActive2.fields["cdi"]] (per disease info placed in log/comment section)
    \nDetails: [medicalActive2.fields["cdi_d"]]
    \n
    \nImportant Notes:
    \n\t[medicalActive2.fields["notes"]]
    \n
    \n
    Comments/Log

    " else . += "
    Requested medical record not found.

    " @@ -446,16 +447,16 @@ switch(subscreen) if(0) . += "

    Security Records


    " - if(data_core.general) - for(var/datum/data/record/R in sortRecord(data_core.general)) + if(GLOB.data_core.general) + for(var/datum/data/record/R in sortRecord(GLOB.data_core.general)) . += "[R.fields["id"]]: [R.fields["name"]]
    " if(1) . += "

    Security Record

    " - if(securityActive1 in data_core.general) + if(securityActive1 in GLOB.data_core.general) . += "Name:
    [securityActive1.fields["name"]] ID: [securityActive1.fields["id"]]
    \nSex: [securityActive1.fields["sex"]]
    \nAge: [securityActive1.fields["age"]]
    \nRank: [securityActive1.fields["rank"]]
    \nFingerprint: [securityActive1.fields["fingerprint"]]
    \nPhysical Status: [securityActive1.fields["p_stat"]]
    \nMental Status: [securityActive1.fields["m_stat"]]
    " else . += "
    Requested security record not found,

    " - if(securityActive2 in data_core.security) + if(securityActive2 in GLOB.data_core.security) . += "
    \nSecurity Data
    \nCriminal Status: [securityActive2.fields["criminal"]]
    \n
    \nMinor Crimes: [securityActive2.fields["mi_crim"]]
    \nDetails: [securityActive2.fields["mi_crim_d"]]
    \n
    \nMajor Crimes: [securityActive2.fields["ma_crim"]]
    \nDetails: [securityActive2.fields["ma_crim_d"]]
    \n
    \nImportant Notes:
    \n\t[securityActive2.fields["notes"]]
    \n
    \n
    Comments/Log

    " else . += "
    Requested security record not found,

    " @@ -464,11 +465,10 @@ // Universal Translator /mob/living/silicon/pai/proc/softwareTranslator() + var/translator_on = HAS_SECONDARY_FLAG(src, OMNITONGUE) . = {"

    Universal Translator


    - When enabled, this device will automatically convert all spoken and written language into a format that any known recipient can understand.

    - The device is currently [ ((languages_spoken == ALL) && (languages_understood == ALL)) ? "en" : "dis" ]abled.
    - Toggle Device
    - "} + When enabled, this device will permamently be able to speak and understand all known forms of communication.

    + The device is currently [translator_on ? "en" : "dis" ]abled.
    [translator_on ? "" : "Activate Translation Module
    "]"} return . // Security HUD @@ -599,7 +599,7 @@ // Door Jack - supporting proc /mob/living/silicon/pai/proc/hackloop() var/turf/T = get_turf(src.loc) - for(var/mob/living/silicon/ai/AI in player_list) + for(var/mob/living/silicon/ai/AI in GLOB.player_list) if(T.loc) to_chat(AI, "Network Alert: Brute-force encryption crack in progress in [T.loc].") else diff --git a/code/modules/mob/living/silicon/robot/examine.dm b/code/modules/mob/living/silicon/robot/examine.dm index f24af94fef..7f910dcdbd 100644 --- a/code/modules/mob/living/silicon/robot/examine.dm +++ b/code/modules/mob/living/silicon/robot/examine.dm @@ -36,9 +36,11 @@ if(is_servant_of_ratvar(src) && user.Adjacent(src) && !stat) //To counter pseudo-stealth by using headlamps msg += "Its eyes are glowing a blazing yellow!\n" - switch(src.stat) + switch(stat) if(CONSCIOUS) - if(!src.client) + if(shell) + msg += "It appears to be an [deployed ? "active" : "empty"] AI shell.\n" + else if(!client) msg += "It appears to be in stand-by mode.\n" //afk if(UNCONSCIOUS) msg += "It doesn't seem to be responding.\n" diff --git a/code/modules/mob/living/silicon/robot/laws.dm b/code/modules/mob/living/silicon/robot/laws.dm index acc09de94f..5e5eeb0d44 100644 --- a/code/modules/mob/living/silicon/robot/laws.dm +++ b/code/modules/mob/living/silicon/robot/laws.dm @@ -32,7 +32,9 @@ to_chat(who, "Obey these laws:") laws.show_laws(who) - if (is_special_character(src) && connected_ai) + if (shell) //AI shell + to_chat(who, "Remember, you are an AI remotely controlling your shell, other AIs can be ignored.") + else if (is_special_character(src) && connected_ai) to_chat(who, "Remember, [connected_ai.name] is technically your master, but your objective comes first.") else if (connected_ai) to_chat(who, "Remember, [connected_ai.name] is your master, other AIs can be ignored.") diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 5d0b07e0ac..2a5823d91f 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -37,8 +37,8 @@ update_cell_hud_icon() if(syndicate) - if(ticker.mode.name == "traitor") - for(var/datum/mind/tra in ticker.mode.traitors) + if(SSticker.mode.name == "traitor") + for(var/datum/mind/tra in SSticker.mode.traitors) if(tra.current) var/I = image('icons/mob/mob.dmi', loc = tra.current, icon_state = "traitor") //no traitor sprite in that dmi! src.client.images += I @@ -48,7 +48,7 @@ if(mind) if(!mind.special_role) mind.special_role = "traitor" - ticker.mode.traitors += mind + SSticker.mode.traitors += mind /mob/living/silicon/robot/update_health_hud() diff --git a/code/modules/mob/living/silicon/robot/login.dm b/code/modules/mob/living/silicon/robot/login.dm index 039a69ddea..b7987322a7 100644 --- a/code/modules/mob/living/silicon/robot/login.dm +++ b/code/modules/mob/living/silicon/robot/login.dm @@ -4,5 +4,5 @@ regenerate_icons() show_laws(0) if(mind) - ticker.mode.remove_revolutionary(mind) - ticker.mode.remove_gangster(mind,1,remove_bosses=1) + SSticker.mode.remove_revolutionary(mind) + SSticker.mode.remove_gangster(mind,1,remove_bosses=1) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 97c4fb5c98..023ddd9719 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -16,6 +16,10 @@ var/obj/item/robot_suit/robot_suit = null //Used for deconstruction to remember what the borg was constructed out of.. var/obj/item/device/mmi/mmi = null + var/shell = FALSE + var/deployed = FALSE + var/mob/living/silicon/ai/mainframe = null + var/datum/action/innate/undeployment/undeployment_action = new //Hud stuff @@ -47,7 +51,7 @@ var/ident = 0 var/locked = 1 - var/list/req_access = list(access_robotics) + var/list/req_access = list(GLOB.access_robotics) var/alarms = list("Motion"=list(), "Fire"=list(), "Atmosphere"=list(), "Power"=list(), "Camera"=list(), "Burglar"=list()) @@ -73,7 +77,7 @@ var/sight_mode = 0 var/updating = 0 //portable camera camerachunk update - hud_possible = list(ANTAG_HUD, DIAG_STAT_HUD, DIAG_HUD, DIAG_BATT_HUD) + hud_possible = list(ANTAG_HUD, DIAG_STAT_HUD, DIAG_HUD, DIAG_BATT_HUD, DIAG_TRACK_HUD) var/list/upgrades = list() @@ -129,8 +133,12 @@ update_icons() ..() + //If this body is meant to be a borg controlled by the AI player + if(shell) + make_shell() + //MMI stuff. Held togheter by magic. ~Miauw - if(!mmi || !mmi.brainmob) + else if(!mmi || !mmi.brainmob) mmi = new (src) mmi.brain = new /obj/item/organ/brain(mmi) mmi.brain.name = "[real_name]'s brain" @@ -159,8 +167,8 @@ if(mmi.brainmob) if(mmi.brainmob.stat == DEAD) mmi.brainmob.stat = CONSCIOUS - dead_mob_list -= mmi.brainmob - living_mob_list += mmi.brainmob + GLOB.dead_mob_list -= mmi.brainmob + GLOB.living_mob_list += mmi.brainmob mind.transfer_to(mmi.brainmob) mmi.update_icon() else @@ -170,6 +178,8 @@ mmi = null if(connected_ai) connected_ai.connected_robots -= src + if(shell) + GLOB.available_ai_shells -= src qdel(wires) qdel(module) qdel(eye_lights) @@ -204,6 +214,8 @@ /mob/living/silicon/robot/proc/updatename() + if(shell) + return var/changed_name = "" if(custom_name) changed_name = custom_name @@ -424,7 +436,9 @@ update_icons() else if(istype(W, /obj/item/weapon/screwdriver) && opened && cell) // radio - if(radio) + if(shell) + to_chat(user, "You cannot seem to open the radio compartment") //Prevent AI radio key theft + else if(radio) radio.attackby(W,user)//Push it to the radio to let it handle everything else to_chat(user, "Unable to locate a radio!") @@ -453,6 +467,9 @@ if(!cell) to_chat(user, "You need to install a power cell to do that!") return + if(shell) //AI shells always have the laws of the AI + to_chat(user, "[src] is controlled remotely! You cannot upload new laws this way!") + return if(emagged || (connected_ai && lawupdate)) //Can't be sure which, metagamers emote("buzz-[user.name]") return @@ -594,7 +611,7 @@ /mob/living/silicon/robot/proc/do_camera_update(oldLoc) if(oldLoc != src.loc) - cameranet.updatePortableCamera(src.camera) + GLOB.cameranet.updatePortableCamera(src.camera) updating = 0 /mob/living/silicon/robot/Move(a, b, flag) @@ -606,36 +623,6 @@ updating = 1 addtimer(CALLBACK(src, .proc/do_camera_update, oldLoc), BORG_CAMERA_BUFFER) if(module) - if(istype(module, /obj/item/weapon/robot_module/janitor)) - var/turf/tile = loc - if(isturf(tile)) - tile.clean_blood() - for(var/A in tile) - if(is_cleanable(A)) - qdel(A) - else if(istype(A, /obj/item)) - var/obj/item/cleaned_item = A - cleaned_item.clean_blood() - else if(ishuman(A)) - var/mob/living/carbon/human/cleaned_human = A - if(cleaned_human.lying) - if(cleaned_human.head) - cleaned_human.head.clean_blood() - cleaned_human.update_inv_head() - if(cleaned_human.wear_suit) - cleaned_human.wear_suit.clean_blood() - cleaned_human.update_inv_wear_suit() - else if(cleaned_human.w_uniform) - cleaned_human.w_uniform.clean_blood() - cleaned_human.update_inv_w_uniform() - if(cleaned_human.shoes) - cleaned_human.shoes.clean_blood() - cleaned_human.update_inv_shoes() - cleaned_human.clean_blood() - cleaned_human.wash_cream() - to_chat(cleaned_human, "[src] cleans your face!") - return - if(istype(module, /obj/item/weapon/robot_module/miner)) if(istype(loc, /turf/open/floor/plating/asteroid)) for(var/obj/item/I in held_items) @@ -806,7 +793,7 @@ icon_state = "syndie_bloodhound" faction = list("syndicate") bubble_icon = "syndibot" - req_access = list(access_syndicate) + req_access = list(GLOB.access_syndicate) lawupdate = FALSE scrambledcodes = TRUE // These are rogue borgs. ionpulse = TRUE @@ -829,6 +816,9 @@ if(playstyle_string) to_chat(src, playstyle_string) +/mob/living/silicon/robot/syndicate/ResetModule() + return + /mob/living/silicon/robot/syndicate/medical icon_state = "syndi-medi" playstyle_string = "You are a Syndicate medical cyborg!
    \ @@ -843,12 +833,14 @@ if(!connected_ai) return switch(notifytype) - if(1) //New Cyborg + if(NEW_BORG) //New Cyborg to_chat(connected_ai, "

    NOTICE - New cyborg connection detected: [name]
    ") - if(2) //New Module + if(NEW_MODULE) //New Module to_chat(connected_ai, "

    NOTICE - Cyborg module change detected: [name] has loaded the [designation] module.
    ") - if(3) //New Name + if(RENAME) //New Name to_chat(connected_ai, "

    NOTICE - Cyborg reclassification detected: [oldname] is now designated as [newname].
    ") + if(AI_SHELL) //New Shell + to_chat(connected_ai, "

    NOTICE - New cyborg shell detected: [name]
    ") /mob/living/silicon/robot/canUseTopic(atom/movable/M, be_close = 0) if(stat || lockcharge || low_power_mode) @@ -889,12 +881,12 @@ if(sight_mode & BORGMESON) sight |= SEE_TURFS - see_invisible = min(see_invisible, SEE_INVISIBLE_MINIMUM) + lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE see_in_dark = 1 if(sight_mode & BORGMATERIAL) sight |= SEE_OBJS - see_invisible = min(see_invisible, SEE_INVISIBLE_MINIMUM) + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE see_in_dark = 1 if(sight_mode & BORGXRAY) @@ -909,6 +901,7 @@ if(see_override) see_invisible = see_override + sync_lighting_plane_alpha() /mob/living/silicon/robot/update_stat() if(status_flags & GODMODE) @@ -931,6 +924,7 @@ update_headlamp() diag_hud_set_status() diag_hud_set_health() + diag_hud_set_aishell() update_health_hud() /mob/living/silicon/robot/revive(full_heal = 0, admin_revive = 0) @@ -940,13 +934,13 @@ update_headlamp() if(admin_revive) locked = 1 - notify_ai(1) + notify_ai(NEW_BORG) . = 1 /mob/living/silicon/robot/fully_replace_character_name(oldname, newname) ..() if(oldname != real_name) - notify_ai(3, oldname, newname) + notify_ai(RENAME, oldname, newname) if(camera) camera.c_tag = real_name custom_name = newname @@ -967,6 +961,7 @@ speed = 0 ionpulse = FALSE + revert_shell() return 1 @@ -985,6 +980,11 @@ else status_flags &= ~CANPUSH + if(module.clean_on_move) + flags |= CLEAN_ON_MOVE + else + flags &= ~CLEAN_ON_MOVE + hat_offset = module.hat_offset magpulse = module.magpulsing @@ -998,6 +998,97 @@ new_hat.forceMove(src) update_icons() +/mob/living/silicon/robot/proc/make_shell(var/obj/item/borg/upgrade/ai/board) + if(!board) + upgrades |= new /obj/item/borg/upgrade/ai(src) + shell = TRUE + braintype = "AI Shell" + name = "[designation] AI Shell [rand(100,999)]" + real_name = name + GLOB.available_ai_shells |= src + if(camera) + camera.c_tag = real_name //update the camera name too + diag_hud_set_aishell() + notify_ai(AI_SHELL) + +/mob/living/silicon/robot/proc/revert_shell() + if(!shell) + return + undeploy() + for(var/obj/item/borg/upgrade/ai/boris in src) + //A player forced reset of a borg would drop the module before this is called, so this is for catching edge cases + qdel(boris) + shell = FALSE + GLOB.available_ai_shells -= src + name = "Unformatted Cyborg [rand(100,999)]" + real_name = name + if(camera) + camera.c_tag = real_name + diag_hud_set_aishell() + +/mob/living/silicon/robot/proc/deploy_init(var/mob/living/silicon/ai/AI) + real_name = "[AI.real_name] shell [rand(100, 999)] - [designation]" //Randomizing the name so it shows up seperately in the shells list + name = real_name + if(camera) + camera.c_tag = real_name //update the camera name too + mainframe = AI + deployed = TRUE + connected_ai = mainframe + mainframe.connected_robots |= src + lawupdate = TRUE + lawsync() + if(radio && AI.radio) //AI keeps all channels, including Syndie if it is a Traitor + if(AI.radio.syndie) + radio.make_syndie() + radio.subspace_transmission = TRUE + radio.channels = AI.radio.channels + for(var/chan in radio.channels) + radio.secure_radio_connections[chan] = add_radio(radio, GLOB.radiochannels[chan]) + + diag_hud_set_aishell() + undeployment_action.Grant(src) + +/datum/action/innate/undeployment + name = "Disconnect from shell" + desc = "Stop controlling your shell and resume normal core operations." + button_icon_state = "ai_core" + +/datum/action/innate/undeployment/Trigger() + if(!..()) + return FALSE + var/mob/living/silicon/robot/R = owner + + R.undeploy() + return TRUE + + +/mob/living/silicon/robot/proc/undeploy() + + if(!deployed || !mind || !mainframe) + return + mainframe.redeploy_action.Grant(mainframe) + mainframe.redeploy_action.last_used_shell = src + mind.transfer_to(mainframe) + deployed = FALSE + mainframe.deployed_shell = null + undeployment_action.Remove(src) + if(radio) //Return radio to normal + radio.recalculateChannels() + if(camera) + camera.c_tag = real_name //update the camera name too + diag_hud_set_aishell() + mainframe.diag_hud_set_deployed() + mainframe.show_laws() //Always remind the AI when switching + mainframe = null + +/mob/living/silicon/robot/attack_ai(mob/user) + if(shell && (!connected_ai || connected_ai == user)) + var/mob/living/silicon/ai/AI = user + AI.deploy_to_shell(src) + +/mob/living/silicon/robot/shell + shell = TRUE + /mob/living/silicon/robot/MouseDrop_T(mob/living/M, mob/living/user) . = ..() if(!(M in buckled_mobs) && isliving(M)) diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm index 3493d41caa..01c700768f 100644 --- a/code/modules/mob/living/silicon/robot/robot_defense.dm +++ b/code/modules/mob/living/silicon/robot/robot_defense.dm @@ -16,11 +16,12 @@ if (M.a_intent == INTENT_DISARM) if(!(lying)) M.do_attack_animation(src, ATTACK_EFFECT_DISARM) - if(get_active_held_item()) + var/obj/item/I = get_active_held_item() + if(I) uneq_active() visible_message("[M] disarmed [src]!", \ "[M] has disabled [src]'s active module!", null, COMBAT_MESSAGE_RANGE) - add_logs(M, src, "disarmed") + add_logs(M, src, "disarmed", "[I ? " removing \the [I]" : ""]") else Stun(2) step(src,get_dir(M,src)) @@ -92,6 +93,8 @@ if(locked) to_chat(user, "You emag the cover lock.") locked = 0 + if(shell) //A warning to Traitors who may not know that emagging AI shells does not slave them. + to_chat(user, "[src] seems to be controlled remotely! Emagging the interface may not work as expected.") else to_chat(user, "The cover is already unlocked!") return @@ -125,6 +128,12 @@ log_game("[key_name(user)] attempted to emag cyborg [key_name(src)], but they were slaved to traitor AI [connected_ai].") return + if(shell) //AI shells cannot be emagged, so we try to make it look like a standard reset. Smart players may see through this, however. + to_chat(user, "[src] is remotely controlled! Your emag attempt has triggered a system reset instead!") + log_game("[key_name(user)] attempted to emag an AI shell belonging to [key_name(src) ? key_name(src) : connected_ai]. The shell has been reset as a result.") + ResetModule() + return + SetEmagged(1) SetStunned(3) //Borgs were getting into trouble because they would attack the emagger before the new laws were shown lawupdate = 0 @@ -132,7 +141,7 @@ message_admins("[key_name_admin(user)] emagged cyborg [key_name_admin(src)]. Laws overridden.") log_game("[key_name(user)] emagged cyborg [key_name(src)]. Laws overridden.") var/time = time2text(world.realtime,"hh:mm:ss") - lawchanges.Add("[time] : [user.name]([user.key]) emagged [name]([key])") + GLOB.lawchanges.Add("[time] : [user.name]([user.key]) emagged [name]([key])") to_chat(src, "ALERT: Foreign software detected.") sleep(5) to_chat(src, "Initiating diagnostics...") diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 2fdc82dc50..4abba829be 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -20,6 +20,7 @@ var/can_be_pushed = TRUE var/magpulsing = FALSE + var/clean_on_move = FALSE var/did_feedback = FALSE var/feedback_key @@ -217,7 +218,7 @@ R.SetLockdown(0) R.anchored = FALSE R.notransform = FALSE - R.notify_ai(2) + R.notify_ai(NEW_MODULE) if(R.hud_used) R.hud_used.update_robot_modules_display() if(feedback_key && !did_feedback) @@ -228,8 +229,17 @@ basic_modules = list( /obj/item/device/assembly/flash/cyborg, /obj/item/weapon/reagent_containers/borghypo/epi, + /obj/item/device/healthanalyzer, + /obj/item/weapon/weldingtool/largetank/cyborg, + /obj/item/weapon/wrench/cyborg, /obj/item/weapon/crowbar/cyborg, + /obj/item/stack/sheet/metal/cyborg, + /obj/item/stack/rods/cyborg, + /obj/item/stack/tile/plasteel/cyborg, /obj/item/weapon/extinguisher, + /obj/item/weapon/pickaxe, + /obj/item/device/t_scanner/adv_mining_scanner, + /obj/item/weapon/restraints/handcuffs/cable/zipties/cyborg, /obj/item/weapon/soap/nanotrasen, /obj/item/borg/cyborghug) emag_modules = list(/obj/item/weapon/melee/energy/sword/cyborg) @@ -382,6 +392,7 @@ moduleselect_icon = "janitor" feedback_key = "cyborg_janitor" hat_offset = -5 + clean_on_move = TRUE /obj/item/weapon/reagent_containers/spray/cyborg_drying name = "drying agent spray" diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm index 26438278ae..a1d13fde72 100644 --- a/code/modules/mob/living/silicon/say.dm +++ b/code/modules/mob/living/silicon/say.dm @@ -10,7 +10,7 @@ desig = trim_left(S.designation + " " + S.job) var/message_a = say_quote(message, get_spans()) var/rendered = "Robotic Talk, [name] [message_a]" - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) if(M.binarycheck()) if(isAI(M)) var/renderedAI = "Robotic Talk, [name] ([desig]) [message_a]" @@ -33,19 +33,19 @@ /mob/living/silicon/lingcheck() return 0 //Borged or AI'd lings can't speak on the ling channel. -/mob/living/silicon/radio(message, message_mode, list/spans) +/mob/living/silicon/radio(message, message_mode, list/spans, language) . = ..() if(. != 0) return . if(message_mode == "robot") if (radio) - radio.talk_into(src, message, , spans) + radio.talk_into(src, message, , spans, language) return REDUCE_RANGE - else if(message_mode in radiochannels) + else if(message_mode in GLOB.radiochannels) if(radio) - radio.talk_into(src, message, message_mode, spans) + radio.talk_into(src, message, message_mode, spans, language) return ITALICS | REDUCE_RANGE return 0 diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 7a8b46e7a1..a69fe27da7 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -1,13 +1,12 @@ /mob/living/silicon gender = NEUTER voice_name = "synthesized voice" - languages_spoken = ROBOT | HUMAN - languages_understood = ROBOT | HUMAN has_unlimited_silicon_privilege = 1 verb_say = "states" verb_ask = "queries" verb_exclaim = "declares" verb_yell = "alarms" + initial_languages = list(/datum/language/common, /datum/language/machine) see_in_dark = 8 bubble_icon = "machine" weather_immunities = list("ash") @@ -21,8 +20,7 @@ var/designation = "" var/radiomod = "" //Radio character used before state laws/arrivals announce to allow department transmissions, default, or none at all. var/obj/item/device/camera/siliconcam/aicamera = null //photography - //hud_possible = list(DIAG_STAT_HUD, DIAG_HUD, ANTAG_HUD) - hud_possible = list(ANTAG_HUD, DIAG_STAT_HUD, DIAG_HUD) + hud_possible = list(ANTAG_HUD, DIAG_STAT_HUD, DIAG_HUD, DIAG_TRACK_HUD) var/obj/item/device/radio/borg/radio = null //AIs dont use this but this is at the silicon level to advoid copypasta in say() @@ -41,8 +39,8 @@ /mob/living/silicon/Initialize() ..() - silicon_mobs += src - var/datum/atom_hud/data/diagnostic/diag_hud = huds[DATA_HUD_DIAGNOSTIC] + GLOB.silicon_mobs += src + var/datum/atom_hud/data/diagnostic/diag_hud = GLOB.huds[DATA_HUD_DIAGNOSTIC] diag_hud.add_to_hud(src) diag_hud_set_status() diag_hud_set_health() @@ -56,7 +54,7 @@ /mob/living/silicon/Destroy() radio = null aicamera = null - silicon_mobs -= src + GLOB.silicon_mobs -= src return ..() /mob/living/silicon/contents_explosion(severity, target) @@ -307,8 +305,8 @@ else if(Autochan == "None") //Prevents use of the radio for automatic annoucements. radiomod = "" else //For department channels, if any, given by the internal radio. - for(var/key in department_radio_keys) - if(department_radio_keys[key] == Autochan) + for(var/key in GLOB.department_radio_keys) + if(GLOB.department_radio_keys[key] == Autochan) radiomod = key break @@ -327,23 +325,23 @@ return -10 /mob/living/silicon/proc/remove_med_sec_hud() - var/datum/atom_hud/secsensor = huds[sec_hud] - var/datum/atom_hud/medsensor = huds[med_hud] - var/datum/atom_hud/diagsensor = huds[d_hud] + var/datum/atom_hud/secsensor = GLOB.huds[sec_hud] + var/datum/atom_hud/medsensor = GLOB.huds[med_hud] + var/datum/atom_hud/diagsensor = GLOB.huds[d_hud] secsensor.remove_hud_from(src) medsensor.remove_hud_from(src) diagsensor.remove_hud_from(src) /mob/living/silicon/proc/add_sec_hud() - var/datum/atom_hud/secsensor = huds[sec_hud] + var/datum/atom_hud/secsensor = GLOB.huds[sec_hud] secsensor.add_hud_to(src) /mob/living/silicon/proc/add_med_hud() - var/datum/atom_hud/medsensor = huds[med_hud] + var/datum/atom_hud/medsensor = GLOB.huds[med_hud] medsensor.add_hud_to(src) /mob/living/silicon/proc/add_diag_hud() - var/datum/atom_hud/diagsensor = huds[d_hud] + var/datum/atom_hud/diagsensor = GLOB.huds[d_hud] diagsensor.add_hud_to(src) /mob/living/silicon/proc/sensor_mode() diff --git a/code/modules/mob/living/silicon/silicon_defense.dm b/code/modules/mob/living/silicon/silicon_defense.dm index 8e6879b1fa..2578c4b3d9 100644 --- a/code/modules/mob/living/silicon/silicon_defense.dm +++ b/code/modules/mob/living/silicon/silicon_defense.dm @@ -24,7 +24,8 @@ "[M] took a swipe at [src]!") /mob/living/silicon/attack_animal(mob/living/simple_animal/M) - if(..()) + . = ..() + if(.) var/damage = rand(M.melee_damage_lower, M.melee_damage_upper) if(prob(damage)) for(var/mob/living/N in buckled_mobs) @@ -44,7 +45,6 @@ adjustCloneLoss(damage) if(STAMINA) adjustStaminaLoss(damage) - updatehealth() /mob/living/silicon/attack_paw(mob/living/user) return attack_hand(user) diff --git a/code/modules/mob/living/simple_animal/animal_defense.dm b/code/modules/mob/living/simple_animal/animal_defense.dm index b01862e730..fc7a451c3b 100644 --- a/code/modules/mob/living/simple_animal/animal_defense.dm +++ b/code/modules/mob/living/simple_animal/animal_defense.dm @@ -10,10 +10,7 @@ playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) if("grab") - if(grab_state >= GRAB_AGGRESSIVE && isliving(pulling)) - vore_attack(M, pulling) - else - grabbedby(M) + grabbedby(M) if("harm", "disarm") M.do_attack_animation(src, ATTACK_EFFECT_PUNCH) @@ -63,25 +60,25 @@ return 1 /mob/living/simple_animal/attack_larva(mob/living/carbon/alien/larva/L) - if(..() && stat != DEAD) //successful larva bite + . = ..() + if(. && stat != DEAD) //successful larva bite var/damage = rand(5, 10) - L.amount_grown = min(L.amount_grown + damage, L.max_grown) - attack_threshold_check(damage) - return 1 + . = attack_threshold_check(damage) + if(.) + L.amount_grown = min(L.amount_grown + damage, L.max_grown) /mob/living/simple_animal/attack_animal(mob/living/simple_animal/M) - if(..()) + . = ..() + if(.) var/damage = rand(M.melee_damage_lower, M.melee_damage_upper) - attack_threshold_check(damage, M.melee_damage_type) - return 1 + return attack_threshold_check(damage, M.melee_damage_type) /mob/living/simple_animal/attack_slime(mob/living/simple_animal/slime/M) if(..()) //successful slime attack var/damage = rand(15, 25) if(M.is_adult) damage = rand(20, 35) - attack_threshold_check(damage) - return 1 + return attack_threshold_check(damage) /mob/living/simple_animal/proc/attack_threshold_check(damage, damagetype = BRUTE, armorcheck = "melee") var/temp_damage = damage @@ -92,8 +89,10 @@ if(temp_damage >= 0 && temp_damage <= force_threshold) visible_message("[src] looks unharmed.") + return FALSE else apply_damage(damage, damagetype, null, getarmor(null, armorcheck)) + return TRUE /mob/living/simple_animal/bullet_act(obj/item/projectile/Proj) if(!Proj) @@ -136,4 +135,4 @@ visual_effect_icon = ATTACK_EFFECT_PUNCH else visual_effect_icon = ATTACK_EFFECT_SMASH - ..() \ No newline at end of file + ..() diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 23e1970057..bd40c74a49 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -20,6 +20,7 @@ verb_ask = "queries" verb_exclaim = "declares" verb_yell = "alarms" + initial_languages = list(/datum/language/common, /datum/language/machine) bubble_icon = "machine" faction = list("neutral", "silicon" , "turret") @@ -118,7 +119,7 @@ ..() access_card = new /obj/item/weapon/card/id(src) //This access is so bots can be immediately set to patrol and leave Robotics, instead of having to be let out first. - access_card.access += access_robotics + access_card.access += GLOB.access_robotics set_custom_texts() Radio = new/obj/item/device/radio(src) if(radio_key) @@ -131,7 +132,7 @@ //Adds bot to the diagnostic HUD system prepare_huds() - var/datum/atom_hud/data/diagnostic/diag_hud = huds[DATA_HUD_DIAGNOSTIC] + var/datum/atom_hud/data/diagnostic/diag_hud = GLOB.huds[DATA_HUD_DIAGNOSTIC] diag_hud.add_to_hud(src) diag_hud_set_bothealth() diag_hud_set_botstat() @@ -140,6 +141,9 @@ //Gives a HUD view to player bots that use a HUD. activate_data_hud() + grant_language(/datum/language/common) + grant_language(/datum/language/machine) + /mob/living/simple_animal/bot/update_canmove() . = ..() @@ -323,30 +327,29 @@ if((!on) || (!message)) return if(channel && Radio.channels[channel])// Use radio if we have channel key - Radio.talk_into(src, message, channel, get_spans()) + Radio.talk_into(src, message, channel, get_spans(), get_default_language()) else say(message) - return /mob/living/simple_animal/bot/get_spans() return ..() | SPAN_ROBOT -/mob/living/simple_animal/bot/radio(message, message_mode, list/spans) +/mob/living/simple_animal/bot/radio(message, message_mode, list/spans, language) . = ..() if(. != 0) return . switch(message_mode) if(MODE_HEADSET) - Radio.talk_into(src, message, , spans) + Radio.talk_into(src, message, , spans, language) return REDUCE_RANGE if(MODE_DEPARTMENT) - Radio.talk_into(src, message, message_mode, spans) + Radio.talk_into(src, message, message_mode, spans, language) return REDUCE_RANGE - if(message_mode in radiochannels) - Radio.talk_into(src, message, message_mode, spans) + if(message_mode in GLOB.radiochannels) + Radio.talk_into(src, message, message_mode, spans, language) return REDUCE_RANGE return 0 @@ -607,7 +610,7 @@ Pass a positive integer as an argument to override a bot's default speed. /mob/living/simple_animal/bot/proc/get_next_patrol_target() // search the beacon list for the next target in the list. - for(var/obj/machinery/navbeacon/NB in navbeacons["[z]"]) + for(var/obj/machinery/navbeacon/NB in GLOB.navbeacons["[z]"]) if(NB.location == next_destination) //Does the Beacon location text match the destination? destination = new_destination //We now know the name of where we want to go. patrol_target = NB.loc //Get its location and set it as the target. @@ -615,7 +618,7 @@ Pass a positive integer as an argument to override a bot's default speed. return 1 /mob/living/simple_animal/bot/proc/find_nearest_beacon() - for(var/obj/machinery/navbeacon/NB in navbeacons["[z]"]) + for(var/obj/machinery/navbeacon/NB in GLOB.navbeacons["[z]"]) var/dist = get_dist(src, NB) if(nearest_beacon) //Loop though the beacon net to find the true closest beacon. //Ignore the beacon if were are located on it. @@ -922,5 +925,5 @@ Pass a positive integer as an argument to override a bot's default speed. //If a bot has its own HUD (for player bots), provide it. if(!data_hud_type) return - var/datum/atom_hud/datahud = huds[data_hud_type] + var/datum/atom_hud/datahud = GLOB.huds[data_hud_type] datahud.add_hud_to(src) diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm index 15612fa82c..4c5c2c14c5 100644 --- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm +++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm @@ -265,7 +265,7 @@ ..() /obj/machinery/bot_core/cleanbot - req_one_access = list(access_janitor, access_robotics) + req_one_access = list(GLOB.access_janitor, GLOB.access_robotics) /mob/living/simple_animal/bot/cleanbot/get_controls(mob/user) diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm index 73bf7bac3b..95e62a556d 100644 --- a/code/modules/mob/living/simple_animal/bot/construction.dm +++ b/code/modules/mob/living/simple_animal/bot/construction.dm @@ -419,8 +419,7 @@ return build_step++ to_chat(user, "You complete the Securitron! Beep boop.") - var/mob/living/simple_animal/bot/secbot/S = new /mob/living/simple_animal/bot/secbot - S.loc = get_turf(src) + var/mob/living/simple_animal/bot/secbot/S = new /mob/living/simple_animal/bot/secbot(get_turf(src)) S.name = created_name S.baton_type = I.type qdel(I) diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm index f49211027f..59b66e652e 100644 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm @@ -59,7 +59,7 @@ shot_delay = 6//Longer shot delay because JESUS CHRIST check_records = 0//Don't actively target people set to arrest arrest_type = 1//Don't even try to cuff - bot_core.req_access = list(access_maint_tunnels, access_theatre) + bot_core.req_access = list(GLOB.access_maint_tunnels, GLOB.access_theatre) arrest_type = 1 if((lasercolor == "b") && (name == "\improper ED-209 Security Robot"))//Picks a name if there isn't already a custome one name = pick("BLUE BALLER","SANIC","BLUE KILLDEATH MURDERBOT") @@ -67,7 +67,7 @@ name = pick("RED RAMPAGE","RED ROVER","RED KILLDEATH MURDERBOT") //SECHUD - var/datum/atom_hud/secsensor = huds[DATA_HUD_SECURITY_ADVANCED] + var/datum/atom_hud/secsensor = GLOB.huds[DATA_HUD_SECURITY_ADVANCED] secsensor.add_hud_to(src) /mob/living/simple_animal/bot/ed209/turn_on() diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm index 61fe93792b..c8208e7a3b 100644 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm @@ -387,7 +387,7 @@ ..() /obj/machinery/bot_core/floorbot - req_one_access = list(access_construction, access_robotics) + req_one_access = list(GLOB.access_construction, GLOB.access_robotics) /mob/living/simple_animal/bot/floorbot/UnarmedAttack(atom/A) if(isturf(A)) diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index fef99d6eab..1ce3bb1e6a 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -338,7 +338,7 @@ /mob/living/simple_animal/bot/medbot/proc/assess_patient(mob/living/carbon/C) //Time to see if they need medical help! - if(C.stat == 2) + if(C.stat == DEAD || (C.status_flags & FAKEDEATH)) return 0 //welp too late for them! if(C.suiciding) @@ -404,7 +404,7 @@ soft_reset() return - if(C.stat == 2) + if(C.stat == DEAD || (C.status_flags & FAKEDEATH)) var/list/messagevoice = list("No! Stay with me!" = 'sound/voice/mno.ogg',"Live, damnit! LIVE!" = 'sound/voice/mlive.ogg',"I...I've never lost a patient before. Not today, I mean." = 'sound/voice/mlost.ogg') var/message = pick(messagevoice) speak(message) @@ -496,7 +496,7 @@ return /mob/living/simple_animal/bot/medbot/proc/check_overdose(mob/living/carbon/patient,reagent_id,injection_amount) - var/datum/reagent/R = chemical_reagents_list[reagent_id] + var/datum/reagent/R = GLOB.chemical_reagents_list[reagent_id] if(!R.overdose_threshold) //Some chems do not have an OD threshold return 0 var/current_volume = patient.reagents.get_reagent_amount(reagent_id) @@ -545,4 +545,4 @@ declare_cooldown = 0 /obj/machinery/bot_core/medbot - req_one_access =list(access_medical, access_robotics) + req_one_access =list(GLOB.access_medical, GLOB.access_robotics) diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index 50fe9bc410..30c2c4e9a9 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -4,8 +4,6 @@ // Navigates via floor navbeacons // Remote Controlled from QM's PDA -var/global/mulebot_count = 0 - #define SIGH 0 #define ANNOYED 1 #define DELIGHT 2 @@ -58,10 +56,10 @@ var/global/mulebot_count = 0 cell.charge = 2000 cell.maxcharge = 2000 - spawn(10) // must wait for map loading to finish - mulebot_count += 1 - if(!suffix) - set_suffix("#[mulebot_count]") + var/static/mulebot_count = 0 + mulebot_count += 1 + if(!suffix) + set_suffix("#[mulebot_count]") /mob/living/simple_animal/bot/mulebot/Destroy() unload(0) @@ -165,7 +163,7 @@ var/global/mulebot_count = 0 ui_interact(user) /mob/living/simple_animal/bot/mulebot/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/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "mulebot", name, 600, 375, master_ui, state) @@ -231,7 +229,7 @@ var/global/mulebot_count = 0 if(mode == BOT_IDLE || mode == BOT_DELIVER) start_home() if("destination") - var/new_dest = input(user, "Enter Destination:", name, destination) as null|anything in deliverybeacontags + var/new_dest = input(user, "Enter Destination:", name, destination) as null|anything in GLOB.deliverybeacontags if(new_dest) set_destination(new_dest) if("setid") @@ -239,7 +237,7 @@ var/global/mulebot_count = 0 if(new_id) set_suffix(new_id) if("sethome") - var/new_home = input(user, "Enter Home:", name, home_destination) as null|anything in deliverybeacontags + var/new_home = input(user, "Enter Home:", name, home_destination) as null|anything in GLOB.deliverybeacontags if(new_home) home_destination = new_home if("unload") @@ -686,7 +684,7 @@ var/global/mulebot_count = 0 if(!on || wires.is_cut(WIRE_BEACON)) return - for(var/obj/machinery/navbeacon/NB in deliverybeacons) + for(var/obj/machinery/navbeacon/NB in GLOB.deliverybeacons) if(NB.location == new_destination) // if the beacon location matches the set destination // the we will navigate there destination = new_destination @@ -754,4 +752,4 @@ var/global/mulebot_count = 0 #undef DELIGHT /obj/machinery/bot_core/mulebot - req_access = list(access_cargo) + req_access = list(GLOB.access_cargo) diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index 720a41b16d..a57b9a9156 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -27,18 +27,28 @@ var/target_lastloc //Loc of target when arrested. var/last_found //There's a delay var/declare_arrests = 1 //When making an arrest, should it notify everyone on the security channel? - var/idcheck = 1 //If true, arrest people with no IDs - var/weaponscheck = 1 //If true, arrest people for weapons if they lack access + var/idcheck = 0 //If true, arrest people with no IDs + var/weaponscheck = 0 //If true, arrest people for weapons if they lack access var/check_records = 1 //Does it check security records? var/arrest_type = 0 //If true, don't handcuff /mob/living/simple_animal/bot/secbot/beepsky name = "Officer Beep O'sky" desc = "It's Officer Beep O'sky! Powered by a potato and a shot of whiskey." - idcheck = 1 - weaponscheck = 1 + idcheck = 0 + weaponscheck = 0 auto_patrol = 1 +/mob/living/simple_animal/bot/secbot/beepsky/jr + name = "Officer Pipsqueak" + desc = "It's Officer Beep O'sky's smaller, just-as aggressive cousin, Pipsqueak." + +/mob/living/simple_animal/bot/secbot/beepsky/jr/Initialize() + ..() + resize = 0.8 + update_transform() + + /mob/living/simple_animal/bot/secbot/beepsky/explode() var/turf/Tsec = get_turf(src) new /obj/item/weapon/stock_parts/cell/potato(Tsec) @@ -61,7 +71,7 @@ prev_access = access_card.access //SECHUD - var/datum/atom_hud/secsensor = huds[DATA_HUD_SECURITY_ADVANCED] + var/datum/atom_hud/secsensor = GLOB.huds[DATA_HUD_SECURITY_ADVANCED] secsensor.add_hud_to(src) /mob/living/simple_animal/bot/secbot/turn_on() @@ -410,4 +420,4 @@ Auto Patrol: []"}, ..() /obj/machinery/bot_core/secbot - req_access = list(access_security) + req_access = list(GLOB.access_security) diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 9cfffac11e..c3a71a5c1e 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -74,7 +74,7 @@ else to_chat(M, "You cannot repair your own dents, as you have none!") else if(src != M) - ..() + return ..() /mob/living/simple_animal/hostile/construct/Process_Spacemove(movement_dir = 0) return 1 diff --git a/code/modules/mob/living/simple_animal/corpse.dm b/code/modules/mob/living/simple_animal/corpse.dm index 0a511bc1cf..14cd69b277 100644 --- a/code/modules/mob/living/simple_animal/corpse.dm +++ b/code/modules/mob/living/simple_animal/corpse.dm @@ -20,7 +20,7 @@ back = /obj/item/weapon/storage/backpack has_id = 1 id_job = "Operative" - id_access_list = list(access_syndicate) + id_access_list = list(GLOB.access_syndicate) /obj/effect/mob_spawn/human/corpse/syndicatecommando name = "Syndicate Commando" @@ -34,7 +34,7 @@ pocket1 = /obj/item/weapon/tank/internals/emergency_oxygen has_id = 1 id_job = "Operative" - id_access_list = list(access_syndicate) + id_access_list = list(GLOB.access_syndicate) /obj/effect/mob_spawn/human/corpse/syndicatestormtrooper name = "Syndicate Stormtrooper" @@ -47,7 +47,7 @@ back = /obj/item/weapon/tank/jetpack/oxygen/harness has_id = 1 id_job = "Operative" - id_access_list = list(access_syndicate) + id_access_list = list(GLOB.access_syndicate) diff --git a/code/modules/mob/living/simple_animal/friendly/butterfly.dm b/code/modules/mob/living/simple_animal/friendly/butterfly.dm index 7e7c1c9976..36ad869b05 100644 --- a/code/modules/mob/living/simple_animal/friendly/butterfly.dm +++ b/code/modules/mob/living/simple_animal/friendly/butterfly.dm @@ -23,7 +23,6 @@ verb_ask = "flutters inquisitively" verb_exclaim = "flutters intensely" verb_yell = "flutters intensely" - devourable = 1 /mob/living/simple_animal/butterfly/Initialize() ..() diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 7be80e0959..a915836356 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -94,9 +94,9 @@ ..() /mob/living/simple_animal/pet/cat/Runtime/Life() - if(!cats_deployed && ticker.current_state >= GAME_STATE_SETTING_UP) + if(!cats_deployed && SSticker.current_state >= GAME_STATE_SETTING_UP) Deploy_The_Cats() - if(!stat && ticker.current_state == GAME_STATE_FINISHED && !memory_saved) + if(!stat && SSticker.current_state == GAME_STATE_FINISHED && !memory_saved) Write_Memory() ..() diff --git a/code/modules/mob/living/simple_animal/friendly/cockroach.dm b/code/modules/mob/living/simple_animal/friendly/cockroach.dm index 7e1bf793d3..2e1f9747dc 100644 --- a/code/modules/mob/living/simple_animal/friendly/cockroach.dm +++ b/code/modules/mob/living/simple_animal/friendly/cockroach.dm @@ -27,7 +27,7 @@ del_on_death = 1 /mob/living/simple_animal/cockroach/death(gibbed) - if(ticker.cinematic) //If the nuke is going off, then cockroaches are invincible. Keeps the nuke from killing them, cause cockroaches are immune to nukes. + if(SSticker.cinematic) //If the nuke is going off, then cockroaches are invincible. Keeps the nuke from killing them, cause cockroaches are immune to nukes. return ..() diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm index f651bd890b..8cad712bee 100644 --- a/code/modules/mob/living/simple_animal/friendly/crab.dm +++ b/code/modules/mob/living/simple_animal/friendly/crab.dm @@ -20,7 +20,6 @@ var/obj/item/inventory_head var/obj/item/inventory_mask gold_core_spawnable = 2 - devourable = 1 /mob/living/simple_animal/crab/Life() ..() diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index 377acecd61..bcc8e1d90e 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -70,20 +70,25 @@ onclose(user, "mob[real_name]") return -/mob/living/simple_animal/pet/dog/corgi/attackby(obj/item/O, mob/user, params) - if(inventory_head && inventory_back) - //helmet and armor = 100% protection - if( istype(inventory_head,/obj/item/clothing/head/helmet) && istype(inventory_back,/obj/item/clothing/suit/armor) ) - if( O.force ) - to_chat(user, "[src] is wearing too much armor! You can't cause [p_them()] any damage.") - visible_message("[user] hits [src] with [O], however [src] is too armored.") - else - to_chat(user, "[src] is wearing too much armor! You can't reach [p_their()] skin.") - visible_message("[user] gently taps [src] with [O].") - if(health>0 && prob(15)) - emote("me", 1, "looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression.") - return +/mob/living/simple_animal/pet/dog/corgi/getarmor(def_zone, type) + var/armorval = 0 + if(def_zone) + if(def_zone == "head") + if(inventory_head) + armorval = inventory_head.armor[type] + else + if(inventory_back) + armorval = inventory_back.armor[type] + return armorval + else + if(inventory_head) + armorval += inventory_head.armor[type] + if(inventory_back) + armorval += inventory_back.armor[type] + return armorval*0.5 + +/mob/living/simple_animal/pet/dog/corgi/attackby(obj/item/O, mob/user, params) if (istype(O, /obj/item/weapon/razor)) if (shaved) to_chat(user, "You can't shave this corgi, it's already been shaved!") @@ -304,7 +309,7 @@ turns_per_move = 20 /mob/living/simple_animal/pet/dog/corgi/Ian/Life() - if(ticker.current_state == GAME_STATE_FINISHED && !memory_saved) + if(SSticker.current_state == GAME_STATE_FINISHED && !memory_saved) Write_Memory(0) ..() 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 6d23f54150..e5ba358a25 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm @@ -37,8 +37,8 @@ voice_name = "synthesized chirp" speak_emote = list("chirps") bubble_icon = "machine" - languages_spoken = DRONE - languages_understood = DRONE|HUMAN + initial_languages = list(/datum/language/common, /datum/language/machine, /datum/language/drone) + only_speaks_language = /datum/language/drone mob_size = MOB_SIZE_SMALL has_unlimited_silicon_privilege = 1 damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) @@ -51,6 +51,7 @@ var/staticChoice = "static" var/list/staticChoices = list("static", "blank", "letter", "animal") var/picked = FALSE //Have we picked our visual appearence (+ colour if applicable) + var/colour = "grey" //Stored drone color, so we can go back when unhacked. var/list/drone_overlays[DRONE_TOTAL_LAYERS] var/laws = \ "1. You may not involve yourself in the matters of another being, even if such matters conflict with Law Two or Law Three, unless the other being is another Drone.\n"+\ @@ -67,6 +68,15 @@ var/visualAppearence = MAINTDRONE //What we appear as var/hacked = 0 //If we have laws to destroy the station var/can_be_held = TRUE //if assholes can pick us up + var/flavortext = \ + "\nDO NOT INTERFERE WITH THE ROUND AS A DRONE OR YOU WILL BE DRONE BANNED\n"+\ + "Drones are a ghost role that are allowed to fix the station and build things. Interfering with the round as a drone is against the rules.\n"+\ + "Actions that constitute interference include, but are not limited to:\n"+\ + " - Interacting with round critical objects (IDs, weapons, contraband, powersinks, bombs, etc.)\n"+\ + " - Interacting with living beings (communication, attacking, healing, etc.)\n"+\ + " - Interacting with non-living beings (dragging bodies, looting bodies, etc.)\n"+\ + "These rules are at admin discretion and will be heavily enforced.\n"+\ + "If you do not have the regular drone laws, follow your laws to the best of your ability." /mob/living/simple_animal/drone/Initialize() . = ..() @@ -92,7 +102,7 @@ else verbs -= /mob/living/simple_animal/drone/verb/toggle_statics - var/datum/atom_hud/data/diagnostic/diag_hud = huds[DATA_HUD_DIAGNOSTIC] + var/datum/atom_hud/data/diagnostic/diag_hud = GLOB.huds[DATA_HUD_DIAGNOSTIC] diag_hud.add_to_hud(src) @@ -121,6 +131,9 @@ ..() check_laws() + if(flavortext) + to_chat(src, "[flavortext]") + updateSeeStaticMobs() if(!picked) diff --git a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm index d1c005bb03..8881eb5407 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm @@ -21,10 +21,10 @@ var/area/A = get_area(src) if(A) notify_ghosts("A drone shell has been created in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE) - poi_list |= src + GLOB.poi_list |= src /obj/item/drone_shell/Destroy() - poi_list -= src + GLOB.poi_list -= src . = ..() /obj/item/drone_shell/attack_ghost(mob/user) @@ -36,7 +36,7 @@ if(user.client.player_age < DRONE_MINIMUM_AGE) to_chat(user, "You're too new to play as a drone! Please try again in [DRONE_MINIMUM_AGE - user.client.player_age] days.") return - if(!ticker.mode) + if(!SSticker.mode) to_chat(user, "Can't become a drone before the game has started.") return var/be_drone = alert("Become a drone? (Warning, You can no longer be cloned!)",,"Yes","No") 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 c56d679a62..6a57e50aad 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 @@ -29,6 +29,7 @@ default_hatmask = /obj/item/clothing/head/helmet/space/hardsuit/syndi seeStatic = 0 //Our programming is superior. hacked = TRUE + flavortext = null /mob/living/simple_animal/drone/syndrone/Initialize() ..() @@ -96,8 +97,6 @@ icon_living = "drone_clock" icon_dead = "drone_clock_dead" picked = TRUE - languages_spoken = RATVAR - languages_understood = HUMAN|RATVAR pass_flags = PASSTABLE health = 50 maxHealth = 50 @@ -111,6 +110,8 @@ verb_exclaim = "proclaims" verb_yell = "harangues" bubble_icon = "clock" + initial_languages = list(/datum/language/common, /datum/language/ratvar) + only_speaks_language = /datum/language/ratvar light_color = "#E42742" heavy_emp_damage = 0 laws = "0. Purge all untruths and honor Ratvar." @@ -119,6 +120,9 @@ hacked = TRUE visualAppearence = CLOCKDRONE can_be_held = FALSE + flavortext = "You are a cogscarab, a clockwork creation of Ratvar. As a cogscarab, you have low health, an inbuilt proselytizer that can convert brass \ + to liquified alloy, a set of relatively fast tools, can communicate over the Hierophant Network with :b, and are immune to extreme \ + temperatures and pressures. \nYour goal is to serve the Justiciar and his servants by repairing and defending all they create." /mob/living/simple_animal/drone/cogscarab/ratvar //a subtype for spawning when ratvar is alive, has a slab that it can use and a normal proselytizer default_storage = /obj/item/weapon/storage/toolbox/brass/prefilled/ratvar @@ -135,13 +139,12 @@ verbs -= /mob/living/simple_animal/drone/verb/toggle_light verbs -= /mob/living/simple_animal/drone/verb/drone_ping + grant_language(/datum/language/ratvar) + /mob/living/simple_animal/drone/cogscarab/Login() ..() add_servant_of_ratvar(src, TRUE) - to_chat(src, "You are a cogscarab, a clockwork creation of Ratvar. As a cogscarab, you have low health, an inbuilt proselytizer that can convert brass \ - to liquified alloy, a set of relatively fast tools, can communicate over the Hierophant Network with :b, and are immune to extreme \ - temperatures and pressures. \nYour goal is to serve the Justiciar and his servants by repairing and defending all they create. \ - \nYou yourself are one of these servants, and will be able to utilize almost anything they can[ratvar_awakens ? "":", excluding a clockwork slab"].") + to_chat(src,"You yourself are one of these servants, and will be able to utilize almost anything they can[GLOB.ratvar_awakens ? "":", excluding a clockwork slab"].") // this can't go with flavortext because i'm assuming it requires them to be ratvar'd /mob/living/simple_animal/drone/cogscarab/binarycheck() return FALSE @@ -166,9 +169,15 @@ ..() /mob/living/simple_animal/drone/cogscarab/can_use_guns(obj/item/weapon/gun/G) - changeNext_move(CLICK_CD_RANGE*4) //about as much delay as an unupgraded kinetic accelerator + if(!GLOB.ratvar_awakens) + changeNext_move(CLICK_CD_RANGE*4) //about as much delay as an unupgraded kinetic accelerator return TRUE +/mob/living/simple_animal/drone/cogscarab/get_armor_effectiveness() + if(GLOB.ratvar_awakens) + return 1 + return ..() + /mob/living/simple_animal/drone/cogscarab/triggerAlarm(class, area/A, O, obj/alarmsource) return diff --git a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm index e5291a9dba..c6a1a68096 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm @@ -179,7 +179,7 @@ else if(visualAppearence == REPAIRDRONE_HACKED) visualAppearence = REPAIRDRONE else if(visualAppearence == MAINTDRONE_HACKED) - visualAppearence = MAINTDRONE + visualAppearence = MAINTDRONE + "_[colour]" else if(hacked) if(visualAppearence == SCOUTDRONE) visualAppearence = SCOUTDRONE_HACKED 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 77c48c122c..4462adfe9d 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/say.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/say.dm @@ -18,7 +18,7 @@ //Base proc for anything to call /proc/_alert_drones(msg, dead_can_hear = 0, mob/living/faction_checked_mob, exact_faction_match) - for(var/W in mob_list) + for(var/W in GLOB.mob_list) var/mob/living/simple_animal/drone/M = W if(istype(M) && M.stat != DEAD) if(faction_checked_mob) @@ -26,8 +26,8 @@ to_chat(M, msg) else to_chat(M, msg) - if(dead_can_hear && (M in dead_mob_list)) - var/link = FOLLOW_LINK(M, src) + if(dead_can_hear && (M in GLOB.dead_mob_list)) + var/link = FOLLOW_LINK(M, faction_checked_mob) to_chat(M, "[link] [msg]") diff --git a/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm b/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm index 5d634d938e..7fb7caf8e9 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm @@ -110,7 +110,7 @@ switch(appearence) if("Maintenance Drone") visualAppearence = MAINTDRONE - var/colour = input("Choose your colour!", "Colour", "grey") in list("grey", "blue", "red", "green", "pink", "orange") + colour = input("Choose your colour!", "Colour", "grey") in list("grey", "blue", "red", "green", "pink", "orange") icon_state = "[visualAppearence]_[colour]" icon_living = "[visualAppearence]_[colour]" icon_dead = "[visualAppearence]_dead" @@ -151,7 +151,7 @@ staticOverlays.len = 0 if(seeStatic) - for(var/mob/living/L in mob_list) + for(var/mob/living/L in GLOB.mob_list) if(isdrone(L)) continue var/image/chosen diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index 62d20bdec9..ff045182b3 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -28,7 +28,6 @@ stop_automated_movement_when_pulled = 1 blood_volume = BLOOD_VOLUME_NORMAL var/obj/item/udder/udder = null - devourable = 1 /mob/living/simple_animal/hostile/retaliate/goat/Initialize() udder = new() @@ -106,7 +105,6 @@ var/obj/item/udder/udder = null gold_core_spawnable = 2 blood_volume = BLOOD_VOLUME_NORMAL - devourable = 1 /mob/living/simple_animal/cow/Initialize() udder = new() @@ -182,7 +180,6 @@ pass_flags = PASSTABLE | PASSGRILLE | PASSMOB mob_size = MOB_SIZE_TINY gold_core_spawnable = 2 - devourable = 1 /mob/living/simple_animal/chick/Initialize() ..() @@ -203,9 +200,6 @@ ..() amount_grown = 0 -var/const/MAX_CHICKENS = 50 -var/global/chicken_count = 0 - /mob/living/simple_animal/chicken name = "\improper chicken" desc = "Hopefully the eggs are good this season." @@ -240,7 +234,7 @@ var/global/chicken_count = 0 var/list/layMessage = list("lays an egg.","squats down and croons.","begins making a huge racket.","begins clucking raucously.") var/list/validColors = list("brown","black","white") gold_core_spawnable = 2 - devourable = 1 + var/static/chicken_count = 0 /mob/living/simple_animal/chicken/Initialize() ..() @@ -251,11 +245,11 @@ var/global/chicken_count = 0 icon_dead = "[icon_prefix]_[body_color]_dead" pixel_x = rand(-6, 6) pixel_y = rand(0, 10) - chicken_count += 1 + ++chicken_count -/mob/living/simple_animal/chicken/death(gibbed) - ..(gibbed) - chicken_count -= 1 +/mob/living/simple_animal/chicken/Destroy() + --chicken_count + return ..() /mob/living/simple_animal/chicken/attackby(obj/item/O, mob/user, params) if(istype(O, food_type)) //feedin' dem chickens diff --git a/code/modules/mob/living/simple_animal/friendly/fox.dm b/code/modules/mob/living/simple_animal/friendly/fox.dm index 4d6476c865..86b4fbf5a8 100644 --- a/code/modules/mob/living/simple_animal/friendly/fox.dm +++ b/code/modules/mob/living/simple_animal/friendly/fox.dm @@ -13,53 +13,11 @@ speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - ventcrawler = VENTCRAWLER_ALWAYS - pass_flags = PASSTABLE - mob_size = MOB_SIZE_SMALL butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 3) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" gold_core_spawnable = 2 - var/mob/living/simple_animal/mouse/movement_target - var/turns_since_scan = 0 - -/mob/living/simple_animal/pet/fox/Life() - //MICE! - if((src.loc) && isturf(src.loc)) - if(!stat && !resting && !buckled) - for(var/mob/living/simple_animal/mouse/M in view(1,src)) - if(!M.stat && Adjacent(M)) - emote("me", 1, "splats \the [M]!") - M.splat() - movement_target = null - stop_automated_movement = 0 - break - for(var/obj/item/toy/cattoy/T in view(1,src)) - if (T.cooldown < (world.time - 400)) - emote("me", 1, "bats \the [T] around with its paw!") - T.cooldown = world.time - - ..() - - if(!stat && !resting && !buckled) - turns_since_scan++ - if(turns_since_scan > 5) - walk_to(src,0) - turns_since_scan = 0 - if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) )) - movement_target = null - stop_automated_movement = 0 - if( !movement_target || !(movement_target.loc in oview(src, 3)) ) - movement_target = null - stop_automated_movement = 0 - for(var/mob/living/simple_animal/mouse/snack in oview(src,3)) - if(isturf(snack.loc) && !snack.stat) - movement_target = snack - break - if(movement_target) - stop_automated_movement = 1 - walk_to(src,movement_target,0,3) //Captain fox /mob/living/simple_animal/pet/fox/Renault diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm index 3b2f6ebd3e..5297391462 100644 --- a/code/modules/mob/living/simple_animal/friendly/lizard.dm +++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm @@ -21,8 +21,7 @@ gold_core_spawnable = 2 obj_damage = 0 environment_smash = 0 - var/list/edibles = list(/mob/living/simple_animal/butterfly,/mob/living/simple_animal/cockroach) //list of atoms, however turfs won't affect AI, but will affect consumption - devourable = 1. + var/list/edibles = list(/mob/living/simple_animal/butterfly,/mob/living/simple_animal/cockroach) //list of atoms, however turfs won't affect AI, but will affect consumption. /mob/living/simple_animal/hostile/lizard/CanAttack(atom/the_target)//Can we actually attack a possible target? if(see_invisible < the_target.invisibility)//Target's invisible to us, forget it @@ -37,5 +36,6 @@ qdel(target) //Nom target = null adjustBruteLoss(-2) + return TRUE else - ..() + return ..() diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index b7b3f81e41..1189273adb 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -24,7 +24,6 @@ var/body_color //brown, gray and white, leave blank for random gold_core_spawnable = 2 var/chew_probability = 1 - devourable = 1 /mob/living/simple_animal/mouse/Initialize() ..() diff --git a/code/modules/mob/living/simple_animal/friendly/pet.dm b/code/modules/mob/living/simple_animal/friendly/pet.dm index 0b30943205..baad2da95c 100644 --- a/code/modules/mob/living/simple_animal/friendly/pet.dm +++ b/code/modules/mob/living/simple_animal/friendly/pet.dm @@ -5,7 +5,6 @@ var/image/collar = null var/image/pettag = null blood_volume = BLOOD_VOLUME_NORMAL - devourable = 1 /mob/living/simple_animal/pet/attackby(obj/item/O, mob/user, params) if(istype(O, /obj/item/clothing/neck/petcollar) && !pcollar) diff --git a/code/modules/mob/living/simple_animal/friendly/sloth.dm b/code/modules/mob/living/simple_animal/friendly/sloth.dm index 7ba28a2702..2953a7cc91 100644 --- a/code/modules/mob/living/simple_animal/friendly/sloth.dm +++ b/code/modules/mob/living/simple_animal/friendly/sloth.dm @@ -20,7 +20,6 @@ health = 50 maxHealth = 50 speed = 2 - devourable = 1 //Cargo Sloth diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index 665a227a4e..1eec40c264 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -1,5 +1,5 @@ -var/global/list/parasites = list() //all currently existing/living guardians +GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians #define GUARDIAN_HANDS_LAYER 1 #define GUARDIAN_TOTAL_LAYERS 1 @@ -51,7 +51,7 @@ var/global/list/parasites = list() //all currently existing/living guardians var/carp_fluff_string = "CARP CARP CARP SOME SORT OF HORRIFIC BUG BLAME THE CODERS CARP CARP CARP" /mob/living/simple_animal/hostile/guardian/Initialize(mapload, theme) - parasites |= src + GLOB.parasites += src setthemename(theme) ..() @@ -72,7 +72,7 @@ var/global/list/parasites = list() //all currently existing/living guardians holder.icon_state = "hudhealthy" /mob/living/simple_animal/hostile/guardian/Destroy() - parasites -= src + GLOB.parasites -= src return ..() /mob/living/simple_animal/hostile/guardian/proc/setthemename(pickedtheme) //set the guardian's theme to something cool! @@ -183,12 +183,11 @@ var/global/list/parasites = list() //all currently existing/living guardians return 0 /mob/living/simple_animal/hostile/guardian/AttackingTarget() - if(src.loc == summoner) + if(loc == summoner) to_chat(src, "You must be manifested to attack!") - return 0 + return FALSE else - ..() - return 1 + return ..() /mob/living/simple_animal/hostile/guardian/death() drop_all_held_items() @@ -367,7 +366,7 @@ var/global/list/parasites = list() //all currently existing/living guardians var/list/guardians = summoner.hasparasites() for(var/para in guardians) to_chat(para, my_message) - for(var/M in dead_mob_list) + for(var/M in GLOB.dead_mob_list) var/link = FOLLOW_LINK(M, src) to_chat(M, "[link] [my_message]") @@ -389,7 +388,7 @@ var/global/list/parasites = list() //all currently existing/living guardians for(var/para in guardians) var/mob/living/simple_animal/hostile/guardian/G = para to_chat(G, "[src]: [preliminary_message]" ) - for(var/M in dead_mob_list) + for(var/M in GLOB.dead_mob_list) var/link = FOLLOW_LINK(M, src) to_chat(M, "[link] [my_message]") @@ -450,10 +449,10 @@ var/global/list/parasites = list() //all currently existing/living guardians /mob/living/proc/hasparasites() //returns a list of guardians the mob is a summoner for . = list() - for(var/P in parasites) + for(var/P in GLOB.parasites) var/mob/living/simple_animal/hostile/guardian/G = P if(G.summoner == src) - . |= G + . += G /mob/living/simple_animal/hostile/guardian/proc/hasmatchingsummoner(mob/living/simple_animal/hostile/guardian/G) //returns 1 if the summoner matches the target's summoner return (istype(G) && G.summoner == summoner) diff --git a/code/modules/mob/living/simple_animal/guardian/guardiannaming.dm b/code/modules/mob/living/simple_animal/guardian/guardiannaming.dm index 662a385387..f2e1b57255 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardiannaming.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardiannaming.dm @@ -15,7 +15,7 @@ stainself = 1 /datum/guardianname/carp/New() - prefixname = pick(carp_names) + prefixname = pick(GLOB.carp_names) /datum/guardianname/carp/sand suffixcolour = "Sand" diff --git a/code/modules/mob/living/simple_animal/guardian/types/assassin.dm b/code/modules/mob/living/simple_animal/guardian/types/assassin.dm index 3baafb6c79..1fa54dfd21 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/assassin.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/assassin.dm @@ -33,7 +33,8 @@ stat(null, "Stealth Cooldown Remaining: [max(round((stealthcooldown - world.time)*0.1, 0.1), 0)] seconds") /mob/living/simple_animal/hostile/guardian/assassin/AttackingTarget() - if(..()) + . = ..() + if(.) if(toggle && (isliving(target) || istype(target, /obj/structure/window) || istype(target, /obj/structure/grille))) ToggleMode(1) diff --git a/code/modules/mob/living/simple_animal/guardian/types/explosive.dm b/code/modules/mob/living/simple_animal/guardian/types/explosive.dm index 76e965fc90..9da40c0c7c 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/explosive.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/explosive.dm @@ -17,19 +17,18 @@ stat(null, "Bomb Cooldown Remaining: [max(round((bomb_cooldown - world.time)*0.1, 0.1), 0)] seconds") /mob/living/simple_animal/hostile/guardian/bomb/AttackingTarget() - if(..()) - if(prob(40)) - if(isliving(target)) - var/mob/living/M = target - if(!M.anchored && M != summoner && !hasmatchingsummoner(M)) - new /obj/effect/overlay/temp/guardian/phase/out(get_turf(M)) - do_teleport(M, M, 10) - for(var/mob/living/L in range(1, M)) - if(hasmatchingsummoner(L)) //if the summoner matches don't hurt them - continue - if(L != src && L != summoner) - L.apply_damage(15, BRUTE) - new /obj/effect/overlay/temp/explosion(get_turf(M)) + . = ..() + if(. && prob(40) && isliving(target)) + var/mob/living/M = target + if(!M.anchored && M != summoner && !hasmatchingsummoner(M)) + new /obj/effect/overlay/temp/guardian/phase/out(get_turf(M)) + do_teleport(M, M, 10) + for(var/mob/living/L in range(1, M)) + if(hasmatchingsummoner(L)) //if the summoner matches don't hurt them + continue + if(L != src && L != summoner) + L.apply_damage(15, BRUTE) + new /obj/effect/overlay/temp/explosion(get_turf(M)) /mob/living/simple_animal/hostile/guardian/bomb/AltClickOn(atom/movable/A) if(!istype(A)) diff --git a/code/modules/mob/living/simple_animal/guardian/types/fire.dm b/code/modules/mob/living/simple_animal/guardian/types/fire.dm index 3712fa0893..abcc9cf6a3 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/fire.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/fire.dm @@ -19,9 +19,9 @@ summoner.adjust_fire_stacks(-20) /mob/living/simple_animal/hostile/guardian/fire/AttackingTarget() - if(..()) - if(ishuman(target) && target != summoner) - new /obj/effect/hallucination/delusion(target.loc,target,force_kind="custom",duration=200,skip_nearby=0, custom_icon = src.icon_state, custom_icon_file = src.icon) + . = ..() + if(. && ishuman(target) && target != summoner) + new /obj/effect/hallucination/delusion(target.loc,target,force_kind="custom",duration=200,skip_nearby=0, custom_icon = src.icon_state, custom_icon_file = src.icon) /mob/living/simple_animal/hostile/guardian/fire/Crossed(AM as mob|obj) ..() diff --git a/code/modules/mob/living/simple_animal/guardian/types/lightning.dm b/code/modules/mob/living/simple_animal/guardian/types/lightning.dm index db245fea50..ad1c47732b 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/lightning.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/lightning.dm @@ -20,18 +20,18 @@ var/successfulshocks = 0 /mob/living/simple_animal/hostile/guardian/beam/AttackingTarget() - if(..()) - if(isliving(target) && target != src && target != summoner) - cleardeletedchains() - for(var/chain in enemychains) - var/datum/beam/B = chain - if(B.target == target) - return //oh this guy already HAS a chain, let's not chain again - if(enemychains.len > 2) - var/datum/beam/C = pick(enemychains) - qdel(C) - enemychains -= C - enemychains += Beam(target, "lightning[rand(1,12)]", time=70, maxdistance=7, beam_type=/obj/effect/ebeam/chain) + . = ..() + if(. && isliving(target) && target != src && target != summoner) + cleardeletedchains() + for(var/chain in enemychains) + var/datum/beam/B = chain + if(B.target == target) + return //oh this guy already HAS a chain, let's not chain again + if(enemychains.len > 2) + var/datum/beam/C = pick(enemychains) + qdel(C) + enemychains -= C + enemychains += Beam(target, "lightning[rand(1,12)]", time=70, maxdistance=7, beam_type=/obj/effect/ebeam/chain) /mob/living/simple_animal/hostile/guardian/beam/Destroy() removechains() diff --git a/code/modules/mob/living/simple_animal/guardian/types/protector.dm b/code/modules/mob/living/simple_animal/guardian/types/protector.dm index e242ba50bf..8021200421 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/protector.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/protector.dm @@ -22,7 +22,7 @@ /mob/living/simple_animal/hostile/guardian/protector/adjustHealth(amount, updating_health = TRUE, forced = FALSE) . = ..() if(. > 0 && toggle) - var/image/I = new('icons/effects/effects.dmi', src, "shield-flash", MOB_LAYER+0.01, dir = pick(cardinal)) + var/image/I = new('icons/effects/effects.dmi', src, "shield-flash", MOB_LAYER+0.01, dir = pick(GLOB.cardinal)) if(namedatum) I.color = namedatum.colour flick_overlay_view(I, src, 5) diff --git a/code/modules/mob/living/simple_animal/guardian/types/ranged.dm b/code/modules/mob/living/simple_animal/guardian/types/ranged.dm index 56621cc34e..f7c14f336a 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/ranged.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/ranged.dm @@ -62,12 +62,23 @@ P.color = namedatum.colour /mob/living/simple_animal/hostile/guardian/ranged/ToggleLight() - if(see_invisible == SEE_INVISIBLE_MINIMUM) - to_chat(src, "You deactivate your night vision.") - see_invisible = SEE_INVISIBLE_LIVING - else - to_chat(src, "You activate your night vision.") - see_invisible = SEE_INVISIBLE_MINIMUM + var/msg + switch(lighting_alpha) + if (LIGHTING_PLANE_ALPHA_VISIBLE) + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE + msg = "You activate your night vision." + if (LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE) + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + msg = "You increase your night vision." + if (LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE) + lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE + msg = "You maximize your night vision." + else + lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE + msg = "You deactivate your night vision." + + to_chat(src, "[msg]") + /mob/living/simple_animal/hostile/guardian/ranged/verb/Snare() set name = "Set Surveillance Snare" diff --git a/code/modules/mob/living/simple_animal/guardian/types/standard.dm b/code/modules/mob/living/simple_animal/guardian/types/standard.dm index 45624bbaaa..1d2cfdea6f 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/standard.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/standard.dm @@ -22,10 +22,10 @@ /mob/living/simple_animal/hostile/guardian/punch/AttackingTarget() + . = ..() if(isliving(target)) src.say("[src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry]!!") playsound(loc, src.attack_sound, 50, 1, 1) playsound(loc, src.attack_sound, 50, 1, 1) playsound(loc, src.attack_sound, 50, 1, 1) playsound(loc, src.attack_sound, 50, 1, 1) - ..() diff --git a/code/modules/mob/living/simple_animal/guardian/types/support.dm b/code/modules/mob/living/simple_animal/guardian/types/support.dm index 9313d1311a..469ba6ab97 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/support.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/support.dm @@ -17,7 +17,7 @@ /mob/living/simple_animal/hostile/guardian/healer/Initialize() ..() - var/datum/atom_hud/medsensor = huds[DATA_HUD_MEDICAL_ADVANCED] + var/datum/atom_hud/medsensor = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] medsensor.add_hud_to(src) /mob/living/simple_animal/hostile/guardian/healer/Stat() @@ -27,21 +27,20 @@ stat(null, "Beacon Cooldown Remaining: [max(round((beacon_cooldown - world.time)*0.1, 0.1), 0)] seconds") /mob/living/simple_animal/hostile/guardian/healer/AttackingTarget() - 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) - var/obj/effect/overlay/temp/heal/H = new /obj/effect/overlay/temp/heal(get_turf(C)) - if(namedatum) - H.color = namedatum.colour - if(C == summoner) - update_health_hud() - med_hud_set_health() - med_hud_set_status() + . = ..() + if(. && toggle && iscarbon(target)) + var/mob/living/carbon/C = target + C.adjustBruteLoss(-5) + C.adjustFireLoss(-5) + C.adjustOxyLoss(-5) + C.adjustToxLoss(-5) + var/obj/effect/overlay/temp/heal/H = new /obj/effect/overlay/temp/heal(get_turf(C)) + if(namedatum) + H.color = namedatum.colour + if(C == summoner) + update_health_hud() + med_hud_set_health() + med_hud_set_status() /mob/living/simple_animal/hostile/guardian/healer/ToggleMode() if(src.loc == summoner) diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index accf6eda2c..b2cb16efa2 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -30,12 +30,11 @@ status_flags = CANPUSH minbodytemp = 0 see_in_dark = 8 - see_invisible = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE unique_name = 1 gold_core_spawnable = 0 death_sound = 'sound/voice/hiss6.ogg' deathmessage = "lets out a waning guttural screech, green blood bubbling from its maw..." - devourable = 1 /mob/living/simple_animal/hostile/alien/drone name = "alien drone" @@ -170,7 +169,8 @@ if(istype(target, /obj/effect/decal/cleanable)) visible_message("[src] cleans up \the [target].") qdel(target) - return + return TRUE var/atom/movable/M = target M.clean_blood() visible_message("[src] polishes \the [target].") + return TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index 71f5583d26..462bad0df1 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -36,7 +36,6 @@ faction = list("russian") gold_core_spawnable = 1 - devourable = 1 //SPACE BEARS! SQUEEEEEEEE~ OW! FUCK! IT BIT MY HAND OFF!! /mob/living/simple_animal/hostile/bear/Hudson diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index fba21e3663..fbbd2c20c8 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -144,12 +144,12 @@ target = null wanted_objects -= typecacheof(/obj/structure/beebox) //so we don't attack beeboxes when not going home else - if(beegent && isliving(target)) + . = ..() + if(. && beegent && isliving(target)) var/mob/living/L = target if(L.reagents) beegent.reaction_mob(L, INJECT) L.reagents.add_reagent(beegent.id, rand(1,5)) - target.attack_animal(src) /mob/living/simple_animal/hostile/poison/bees/proc/assign_reagent(datum/reagent/R) @@ -212,7 +212,7 @@ /mob/living/simple_animal/hostile/poison/bees/toxin/Initialize() . = ..() var/datum/reagent/R = pick(typesof(/datum/reagent/toxin)) - assign_reagent(chemical_reagents_list[initial(R.id)]) + assign_reagent(GLOB.chemical_reagents_list[initial(R.id)]) /mob/living/simple_animal/hostile/poison/bees/queen name = "queen bee" @@ -228,11 +228,11 @@ //leave pollination for the peasent bees /mob/living/simple_animal/hostile/poison/bees/queen/AttackingTarget() - if(beegent && isliving(target)) + . = ..() + if(. && beegent && isliving(target)) var/mob/living/L = target beegent.reaction_mob(L, TOUCH) L.reagents.add_reagent(beegent.id, rand(1,5)) - target.attack_animal(src) //PEASENT BEES @@ -272,7 +272,7 @@ else to_chat(user, "You don't have enough royal bee jelly to split a bee in two!") else - var/datum/reagent/R = chemical_reagents_list[S.reagents.get_master_reagent_id()] + var/datum/reagent/R = GLOB.chemical_reagents_list[S.reagents.get_master_reagent_id()] if(R && S.reagents.has_reagent(R.id, 5)) S.reagents.remove_reagent(R.id,5) queen.assign_reagent(R) diff --git a/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm b/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm index 873476fd46..2829bf574e 100644 --- a/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm +++ b/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm @@ -41,7 +41,7 @@ /mob/living/simple_animal/hostile/stickman, /mob/living/simple_animal/hostile/stickman/ranged, /mob/living/simple_animal/hostile/stickman/dog) - var/list/directions = cardinal.Copy() + var/list/directions = GLOB.cardinal.Copy() for(var/i in 1 to 3) var/minions_chosen = pick_n_take(minions) new minions_chosen (get_step(boss,pick_n_take(directions)), 1) @@ -71,7 +71,7 @@ target = pick(threats) if(target) var/mob/living/simple_animal/hostile/boss/paper_wizard/wiz = boss - var/directions = cardinal.Copy() + var/directions = GLOB.cardinal.Copy() for(var/i in 1 to 3) var/mob/living/simple_animal/hostile/boss/paper_wizard/copy/C = new (get_step(target,pick_n_take(directions))) wiz.copies += C diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index c26b631632..45f46b3828 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -34,14 +34,13 @@ movement_type = FLYING pressure_resistance = 200 gold_core_spawnable = 1 - devourable = 1 /mob/living/simple_animal/hostile/carp/Process_Spacemove(movement_dir = 0) return 1 //No drifting in space for space carp! //original comments do not steal /mob/living/simple_animal/hostile/carp/AttackingTarget() - ..() - if(ishuman(target)) + . = ..() + if(. && ishuman(target)) var/mob/living/carbon/human/H = target H.adjustStaminaLoss(8) diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm index 8194ce2c95..b133cd6ff4 100644 --- a/code/modules/mob/living/simple_animal/hostile/faithless.dm +++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm @@ -36,10 +36,9 @@ return 1 /mob/living/simple_animal/hostile/faithless/AttackingTarget() - ..() - if(iscarbon(target)) + . = ..() + if(. && prob(12) && iscarbon(target)) var/mob/living/carbon/C = target - if(prob(12)) - C.Weaken(3) - C.visible_message("\The [src] knocks down \the [C]!", \ - "\The [src] knocks you down!") \ No newline at end of file + C.Weaken(3) + C.visible_message("\The [src] knocks down \the [C]!", \ + "\The [src] knocks you down!") \ No newline at end of file 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 dacae72632..f8718fafe7 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -1,4 +1,4 @@ - +#define SPIDER_IDLE 0 #define SPINNING_WEB 1 #define LAYING_EGGS 2 #define MOVING_TO_TARGET 3 @@ -9,8 +9,8 @@ var/poison_type = "toxin" /mob/living/simple_animal/hostile/poison/AttackingTarget() - ..() - if(isliving(target)) + . = ..() + if(. && isliving(target)) var/mob/living/L = target if(L.reagents) L.reagents.add_reagent(poison_type, poison_per_bite) @@ -39,7 +39,7 @@ melee_damage_lower = 15 melee_damage_upper = 20 faction = list("spiders") - var/busy = 0 + var/busy = SPIDER_IDLE pass_flags = PASSTABLE move_to_delay = 6 ventcrawler = VENTCRAWLER_ALWAYS @@ -47,10 +47,9 @@ attack_sound = 'sound/weapons/bite.ogg' unique_name = 1 gold_core_spawnable = 1 - see_invisible = SEE_INVISIBLE_MINIMUM see_in_dark = 4 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE var/playable_spider = FALSE - devourable = 1 /mob/living/simple_animal/hostile/poison/giant_spider/Topic(href, href_list) if(href_list["activate"]) @@ -89,6 +88,7 @@ poison_per_bite = 3 var/atom/movable/cocoon_target var/fed = 0 + var/static/list/consumed_mobs = list() //the tags of mobs that have been consumed by nurse spiders to lay eggs //hunters have the most poison and move the fastest, so they can find prey /mob/living/simple_animal/hostile/poison/giant_spider/hunter @@ -166,8 +166,8 @@ Wrap() else - busy = 0 - stop_automated_movement = 0 + busy = SPIDER_IDLE + stop_automated_movement = FALSE /mob/living/simple_animal/hostile/poison/giant_spider/verb/Web() set name = "Lay Web" @@ -185,8 +185,8 @@ if(do_after(src, 40, target = T)) if(busy == SPINNING_WEB && src.loc == T) new /obj/structure/spider/stickyweb(T) - busy = 0 - stop_automated_movement = 0 + busy = SPIDER_IDLE + stop_automated_movement = FALSE /mob/living/simple_animal/hostile/poison/giant_spider/nurse/verb/Wrap() @@ -199,7 +199,9 @@ if(!cocoon_target) var/list/choices = list() for(var/mob/living/L in view(1,src)) - if(L == src | L.anchored) + if(L == src || L.anchored) + continue + if(istype(L, /mob/living/simple_animal/hostile/poison/giant_spider)) continue if(Adjacent(L)) choices += L @@ -208,49 +210,36 @@ continue if(Adjacent(O)) choices += O - cocoon_target = input(src,"What do you wish to cocoon?") in null|choices + var/temp_input = input(src,"What do you wish to cocoon?") in null|choices + if(temp_input && !cocoon_target) + cocoon_target = temp_input - if(stat != DEAD && cocoon_target && busy != SPINNING_COCOON) - if(cocoon_target.anchored) - cocoon_target = null - return + if(stat != DEAD && cocoon_target && Adjacent(cocoon_target) && !cocoon_target.anchored) + if(busy == SPINNING_COCOON) + return //we're already doing this, don't cancel out or anything busy = SPINNING_COCOON - src.visible_message("\the [src] begins to secrete a sticky substance around \the [cocoon_target].") - stop_automated_movement = 1 + visible_message("\the [src] begins to secrete a sticky substance around \the [cocoon_target].") + stop_automated_movement = TRUE walk(src,0) - if(do_after(src, 50, target = src)) + if(do_after(src, 50, target = cocoon_target)) if(busy == SPINNING_COCOON) - if(cocoon_target && isturf(cocoon_target.loc) && get_dist(src,cocoon_target) <= 1) - var/obj/structure/spider/cocoon/C = new(cocoon_target.loc) - var/large_cocoon = 0 - C.pixel_x = cocoon_target.pixel_x - C.pixel_y = cocoon_target.pixel_y - for(var/obj/item/I in C.loc) - I.forceMove(C) - for(var/obj/structure/S in C.loc) - if(!S.anchored) - S.forceMove(C) - large_cocoon = 1 - for(var/obj/machinery/M in C.loc) - if(!M.anchored) - M.forceMove(C) - large_cocoon = 1 - for(var/mob/living/L in C.loc) - if(istype(L, /mob/living/simple_animal/hostile/poison/giant_spider)) - continue - large_cocoon = 1 - L.forceMove(C) - C.pixel_x = L.pixel_x - C.pixel_y = L.pixel_y + var/obj/structure/spider/cocoon/C = new(cocoon_target.loc) + if(isliving(cocoon_target)) + var/mob/living/L = cocoon_target + if(L.blood_volume && (L.stat != DEAD || !consumed_mobs[L.tag])) //if they're not dead, you can consume them anyway + consumed_mobs[L.tag] = TRUE fed++ visible_message("\the [src] sticks a proboscis into \the [L] and sucks a viscous substance out.") - break + L.death() //you just ate them, they're dead. + else + to_chat(src, "[L] cannot sate your hunger!") + cocoon_target.forceMove(C) - if(large_cocoon) - C.icon_state = pick("cocoon_large1","cocoon_large2","cocoon_large3") - cocoon_target = null - busy = 0 - stop_automated_movement = 0 + if(cocoon_target.density || ismob(cocoon_target)) + C.icon_state = pick("cocoon_large1","cocoon_large2","cocoon_large3") + cocoon_target = null + busy = SPIDER_IDLE + stop_automated_movement = FALSE /mob/living/simple_animal/hostile/poison/giant_spider/nurse/verb/LayEggs() set name = "Lay Eggs" @@ -279,8 +268,8 @@ C.poison_per_bite = poison_per_bite C.faction = faction.Copy() fed-- - busy = 0 - stop_automated_movement = 0 + busy = SPIDER_IDLE + stop_automated_movement = FALSE /mob/living/simple_animal/hostile/poison/giant_spider/handle_temperature_damage() if(bodytemperature < minbodytemp) @@ -288,6 +277,7 @@ else if(bodytemperature > maxbodytemp) adjustBruteLoss(20) +#undef SPIDER_IDLE #undef SPINNING_WEB #undef LAYING_EGGS #undef MOVING_TO_TARGET diff --git a/code/modules/mob/living/simple_animal/hostile/headcrab.dm b/code/modules/mob/living/simple_animal/hostile/headcrab.dm index 5d7df29197..07ff6592df 100644 --- a/code/modules/mob/living/simple_animal/hostile/headcrab.dm +++ b/code/modules/mob/living/simple_animal/hostile/headcrab.dm @@ -22,7 +22,7 @@ ventcrawler = VENTCRAWLER_ALWAYS var/datum/mind/origin var/egg_lain = 0 -// gold_core_spawnable = 1 //are you sure about this?? + gold_core_spawnable = 1 //are you sure about this?? /mob/living/simple_animal/hostile/headcrab/proc/Infect(mob/living/carbon/victim) var/obj/item/organ/body_egg/changeling_egg/egg = new(victim) @@ -38,10 +38,8 @@ egg_lain = 1 /mob/living/simple_animal/hostile/headcrab/AttackingTarget() - if(egg_lain) - target.attack_animal(src) - return - if(iscarbon(target) && !ismonkey(target)) + . = ..() + if(. && !egg_lain && iscarbon(target) && !ismonkey(target)) // Changeling egg can survive in aliens! var/mob/living/carbon/C = target if(C.stat == DEAD) @@ -50,13 +48,7 @@ return Infect(target) to_chat(src, "With our egg laid, our death approaches rapidly...") - spawn(100) - death() - return - target.attack_animal(src) - - - + addtimer(CALLBACK(src, .proc/death), 100) /obj/item/organ/body_egg/changeling_egg name = "changeling egg" diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 13fb015cda..9bf7a4fa51 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -280,7 +280,7 @@ /mob/living/simple_animal/hostile/proc/AttackingTarget() - target.attack_animal(src) + return target.attack_animal(src) /mob/living/simple_animal/hostile/proc/Aggro() vision_range = aggro_vision_range @@ -336,7 +336,7 @@ /mob/living/simple_animal/hostile/proc/Shoot(atom/targeted_atom) - if(targeted_atom == targets_from.loc || targeted_atom == targets_from) + if( QDELETED(targeted_atom) || targeted_atom == targets_from.loc || targeted_atom == targets_from ) return var/turf/startloc = get_turf(targets_from) if(casingtype) @@ -361,7 +361,7 @@ /mob/living/simple_animal/hostile/proc/DestroySurroundings() if(environment_smash) EscapeConfinement() - for(var/dir in cardinal) + for(var/dir in GLOB.cardinal) var/turf/T = get_step(targets_from, dir) if(iswallturf(T) || ismineralturf(T)) if(T.Adjacent(targets_from)) diff --git a/code/modules/mob/living/simple_animal/hostile/illusion.dm b/code/modules/mob/living/simple_animal/hostile/illusion.dm index eef563eda3..e09336059c 100644 --- a/code/modules/mob/living/simple_animal/hostile/illusion.dm +++ b/code/modules/mob/living/simple_animal/hostile/illusion.dm @@ -48,8 +48,8 @@ /mob/living/simple_animal/hostile/illusion/AttackingTarget() - ..() - if(isliving(target) && prob(multiply_chance)) + . = ..() + if(. && isliving(target) && prob(multiply_chance)) var/mob/living/L = target if(L.stat == DEAD) return @@ -71,4 +71,4 @@ /mob/living/simple_animal/hostile/illusion/escape/AttackingTarget() - return + return FALSE diff --git a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm b/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm index 5335cd7e35..f4195a93b3 100644 --- a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm +++ b/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm @@ -194,7 +194,7 @@ target = null return - target.attack_animal(src) + return target.attack_animal(src) /mob/living/simple_animal/hostile/syndicate/mecha_pilot/handle_automated_action() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm index 3516cb1492..24b8b9b1ee 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -63,9 +63,9 @@ Difficulty: Hard if(. > 0 && prob(25)) var/obj/effect/decal/cleanable/blood/gibs/bubblegum/B = new /obj/effect/decal/cleanable/blood/gibs/bubblegum(loc) if(prob(40)) - step(B, pick(cardinal)) + step(B, pick(GLOB.cardinal)) else - B.setDir(pick(cardinal)) + B.setDir(pick(GLOB.cardinal)) /obj/effect/decal/cleanable/blood/gibs/bubblegum name = "thick blood" @@ -105,10 +105,10 @@ Difficulty: Hard /mob/living/simple_animal/hostile/megafauna/bubblegum/Initialize() ..() - for(var/mob/living/simple_animal/hostile/megafauna/bubblegum/B in mob_list) + for(var/mob/living/simple_animal/hostile/megafauna/bubblegum/B in GLOB.mob_list) if(B != src) qdel(src) //There can be only one - break + return var/obj/effect/proc_holder/spell/bloodcrawl/bloodspell = new AddSpell(bloodspell) if(istype(loc, /obj/effect/dummy/slaughter)) @@ -126,7 +126,7 @@ Difficulty: Hard /mob/living/simple_animal/hostile/megafauna/bubblegum/AttackingTarget() if(!charging) - ..() + return ..() /mob/living/simple_animal/hostile/megafauna/bubblegum/Goto(target, delay, minimum_distance) if(!charging) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index 20aa46db2e..a0e7c3694f 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -64,7 +64,7 @@ Difficulty: Very Hard visible_message("\"You can't dodge.\"") ranged_cooldown = world.time + 30 telegraph() - dir_shots(alldirs) + dir_shots(GLOB.alldirs) move_to_delay = 3 return else @@ -127,13 +127,13 @@ Difficulty: Very Hard . = TRUE /mob/living/simple_animal/hostile/megafauna/colossus/proc/alternating_dir_shots() - dir_shots(diagonals) + dir_shots(GLOB.diagonals) sleep(10) - dir_shots(cardinal) + dir_shots(GLOB.cardinal) sleep(10) - dir_shots(diagonals) + dir_shots(GLOB.diagonals) sleep(10) - dir_shots(cardinal) + dir_shots(GLOB.cardinal) /mob/living/simple_animal/hostile/megafauna/colossus/proc/double_spiral() visible_message("\"Die.\"") @@ -224,7 +224,7 @@ Difficulty: Very Hard /mob/living/simple_animal/hostile/megafauna/colossus/proc/dir_shots(list/dirs) if(!islist(dirs)) - dirs = alldirs.Copy() + dirs = GLOB.alldirs.Copy() playsound(get_turf(src), 'sound/magic/clockwork/invoke_general.ogg', 200, 1, 2) for(var/d in dirs) var/turf/E = get_step(src, d) @@ -302,7 +302,7 @@ Difficulty: Very Hard /obj/machinery/smartfridge/black_box/process() ..() - if(!memory_saved && ticker.current_state == GAME_STATE_FINISHED) + if(!memory_saved && SSticker.current_state == GAME_STATE_FINISHED) WriteMemory() /obj/machinery/smartfridge/black_box/proc/WriteMemory() @@ -369,8 +369,6 @@ Difficulty: Very Hard resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF use_power = 0 density = 1 - languages_spoken = ALL - languages_understood = ALL flags = HEAR var/activation_method = "touch" var/activation_damage_type = null @@ -618,8 +616,6 @@ Difficulty: Very Hard damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) light_range = 4 faction = list("neutral") - languages_spoken = SLIME - languages_understood = ALL del_on_death = 1 unsuitable_atmos_damage = 0 movement_type = FLYING @@ -635,11 +631,11 @@ Difficulty: Very Hard ..() verbs -= /mob/living/verb/pulled verbs -= /mob/verb/me_verb - var/datum/atom_hud/medsensor = huds[DATA_HUD_MEDICAL_ADVANCED] + var/datum/atom_hud/medsensor = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] medsensor.add_hud_to(src) /mob/living/simple_animal/hostile/lightgeist/AttackingTarget() - ..() + . = ..() if(isliving(target) && target != src) var/mob/living/L = target if(L.stat < DEAD) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm index b3fb02394a..9bc32993fa 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm @@ -69,7 +69,7 @@ Difficulty: Medium /mob/living/simple_animal/hostile/megafauna/dragon/AttackingTarget() if(!swooping) - ..() + return ..() /mob/living/simple_animal/hostile/megafauna/dragon/DestroySurroundings() if(!swooping) @@ -162,7 +162,7 @@ Difficulty: Medium /mob/living/simple_animal/hostile/megafauna/dragon/proc/fire_walls() playsound(get_turf(src),'sound/magic/Fireball.ogg', 200, 1) - for(var/d in cardinal) + for(var/d in GLOB.cardinal) INVOKE_ASYNC(src, .proc/fire_wall, d) /mob/living/simple_animal/hostile/megafauna/dragon/proc/fire_wall(dir) @@ -231,7 +231,7 @@ Difficulty: Medium if(L && !QDELETED(L)) // Some mobs are deleted on death var/throw_dir = get_dir(src, L) if(L.loc == loc) - throw_dir = pick(alldirs) + throw_dir = pick(GLOB.alldirs) var/throwtarget = get_edge_target_turf(src, throw_dir) L.throw_at(throwtarget, 3) visible_message("[L] is thrown clear of [src]!") diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index 7131eb2dd4..d9f099e2f1 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -139,7 +139,7 @@ Difficulty: Hard if(!blinking) if(target && isliving(target)) INVOKE_ASYNC(src, .proc/melee_blast, get_turf(target)) //melee attacks on living mobs produce a 3x3 blast - ..() + return ..() /mob/living/simple_animal/hostile/megafauna/hierophant/DestroySurroundings() if(!blinking) @@ -243,7 +243,7 @@ Difficulty: Hard var/oldcolor = color animate(src, color = "#660099", time = 10) var/list/targets = ListTargets() - var/list/cardinal_copy = cardinal.Copy() + var/list/cardinal_copy = GLOB.cardinal.Copy() while(health && targets.len && cardinal_copy.len) var/mob/living/pickedtarget = pick(targets) if(targets.len > 4) @@ -285,7 +285,7 @@ Difficulty: Hard if((prob(anger_modifier) || target.Adjacent(src)) && target != src) var/obj/effect/overlay/temp/hierophant/chaser/OC = new /obj/effect/overlay/temp/hierophant/chaser(loc, src, target, max(1.5, 5 - anger_modifier * 0.07), FALSE) OC.moving = 4 - OC.moving_dir = pick(cardinal - C.moving_dir) + OC.moving_dir = pick(GLOB.cardinal - C.moving_dir) else //just release a burst of power INVOKE_ASYNC(src, .proc/burst, get_turf(src)) @@ -297,7 +297,7 @@ Difficulty: Hard playsound(T,'sound/effects/bin_close.ogg', 200, 1) sleep(2) new /obj/effect/overlay/temp/hierophant/blast(T, src, FALSE) - for(var/d in diagonals) + for(var/d in GLOB.diagonals) INVOKE_ASYNC(src, .proc/blast_wall, T, d) /mob/living/simple_animal/hostile/megafauna/hierophant/proc/cardinal_blasts(mob/victim) //fire cardinal cross blasts with a delay @@ -308,7 +308,7 @@ Difficulty: Hard playsound(T,'sound/effects/bin_close.ogg', 200, 1) sleep(2) new /obj/effect/overlay/temp/hierophant/blast(T, src, FALSE) - for(var/d in cardinal) + for(var/d in GLOB.cardinal) INVOKE_ASYNC(src, .proc/blast_wall, T, d) /mob/living/simple_animal/hostile/megafauna/hierophant/proc/alldir_blasts(mob/victim) //fire alldir cross blasts with a delay @@ -319,7 +319,7 @@ Difficulty: Hard playsound(T,'sound/effects/bin_close.ogg', 200, 1) sleep(2) new /obj/effect/overlay/temp/hierophant/blast(T, src, FALSE) - for(var/d in alldirs) + for(var/d in GLOB.alldirs) INVOKE_ASYNC(src, .proc/blast_wall, T, d) /mob/living/simple_animal/hostile/megafauna/hierophant/proc/blast_wall(turf/T, set_dir) //make a wall of blasts beam_range tiles long @@ -338,7 +338,7 @@ Difficulty: Hard if((istype(get_area(T), /area/ruin/unpowered/hierophant) || istype(get_area(src), /area/ruin/unpowered/hierophant)) && victim != src) return arena_cooldown = world.time + initial(arena_cooldown) - for(var/d in cardinal) + for(var/d in GLOB.cardinal) INVOKE_ASYNC(src, .proc/arena_squares, T, d) for(var/t in RANGE_TURFS(11, T)) if(t && get_dist(t, T) == 11) @@ -491,7 +491,7 @@ Difficulty: Hard /obj/effect/overlay/temp/hierophant/chaser/proc/get_target_dir() . = get_cardinal_dir(src, targetturf) if((. != previous_moving_dir && . == more_previouser_moving_dir) || . == 0) //we're alternating, recalculate - var/list/cardinal_copy = cardinal.Copy() + var/list/cardinal_copy = GLOB.cardinal.Copy() cardinal_copy -= more_previouser_moving_dir . = pick(cardinal_copy) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm index 061d11d2e5..bf834fce03 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm @@ -55,8 +55,8 @@ Difficulty: Medium internal = new/obj/item/device/gps/internal/legion(src) /mob/living/simple_animal/hostile/megafauna/legion/AttackingTarget() - ..() - if(ishuman(target)) + . = ..() + if(. && ishuman(target)) var/mob/living/L = target if(L.stat == UNCONSCIOUS) var/mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/A = new(loc) @@ -117,7 +117,7 @@ Difficulty: Medium visible_message("[src] splits in twain!") else var/last_legion = TRUE - for(var/mob/living/simple_animal/hostile/megafauna/legion/other in mob_list) + for(var/mob/living/simple_animal/hostile/megafauna/legion/other in GLOB.mob_list) if(other != src) last_legion = FALSE break diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm index a842e91fb8..dcb37610cf 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm @@ -45,7 +45,7 @@ mouse_opacity = 2 // Easier to click on in melee, they're giant targets anyway /mob/living/simple_animal/hostile/megafauna/Destroy() - qdel(internal) + QDEL_NULL(internal) . = ..() /mob/living/simple_animal/hostile/megafauna/death(gibbed) @@ -71,8 +71,8 @@ ..() /mob/living/simple_animal/hostile/megafauna/AttackingTarget() - ..() - if(isliving(target)) + . = ..() + if(. && isliving(target)) var/mob/living/L = target if(L.stat != DEAD) if(!client && ranged && ranged_cooldown <= world.time) @@ -86,10 +86,7 @@ if(!.) return var/turf/newloc = loc - message_admins("Megafauna [src] \ - (FLW) \ - moved via shuttle from ([oldloc.x],[oldloc.y],[oldloc.z]) to \ - ([newloc.x],[newloc.y],[newloc.z])") + message_admins("Megafauna [src] [ADMIN_FLW(src)] moved via shuttle from [ADMIN_COORDJMP(oldloc)] to [ADMIN_COORDJMP(newloc)]") /mob/living/simple_animal/hostile/megafauna/proc/devour(mob/living/L) if(!L) @@ -121,7 +118,7 @@ if(admin_spawned) return FALSE - if(global.medal_hub && global.medal_pass && global.medals_enabled) + if(GLOB.medal_hub && GLOB.medal_pass && GLOB.medals_enabled) for(var/mob/living/L in view(7,src)) if(L.stat) continue @@ -138,11 +135,11 @@ if(!player || !medal) return - if(global.medal_hub && global.medal_pass && global.medals_enabled) + if(GLOB.medal_hub && GLOB.medal_pass && GLOB.medals_enabled) spawn() - var/result = world.SetMedal(medal, player, global.medal_hub, global.medal_pass) + var/result = world.SetMedal(medal, player, GLOB.medal_hub, GLOB.medal_pass) if(isnull(result)) - global.medals_enabled = FALSE + GLOB.medals_enabled = FALSE log_game("MEDAL ERROR: Could not contact hub to award medal:[medal] player:[player.ckey]") message_admins("Error! Failed to contact hub to award [medal] medal to [player.ckey]!") else if (result) @@ -153,7 +150,7 @@ if(!score || !player) return - if(global.medal_hub && global.medal_pass && global.medals_enabled) + if(GLOB.medal_hub && GLOB.medal_pass && GLOB.medals_enabled) spawn() var/list/oldscore = GetScore(score,player,1) @@ -167,10 +164,10 @@ var/newscoreparam = list2params(oldscore) - var/result = world.SetScores(player.ckey, newscoreparam, global.medal_hub, global.medal_pass) + var/result = world.SetScores(player.ckey, newscoreparam, GLOB.medal_hub, GLOB.medal_pass) if(isnull(result)) - global.medals_enabled = FALSE + GLOB.medals_enabled = FALSE log_game("SCORE ERROR: Could not contact hub to set score. Score:[score] player:[player.ckey]") message_admins("Error! Failed to contact hub to set [score] score for [player.ckey]!") @@ -179,11 +176,11 @@ if(!score || !player) return - if(global.medal_hub && global.medal_pass && global.medals_enabled) + if(GLOB.medal_hub && GLOB.medal_pass && GLOB.medals_enabled) - var/scoreget = world.GetScores(player.ckey, score, global.medal_hub, global.medal_pass) + var/scoreget = world.GetScores(player.ckey, score, GLOB.medal_hub, GLOB.medal_pass) if(isnull(scoreget)) - global.medals_enabled = FALSE + GLOB.medals_enabled = FALSE log_game("SCORE ERROR: Could not contact hub to get score. Score:[score] player:[player.ckey]") message_admins("Error! Failed to contact hub to get score: [score] for [player.ckey]!") return @@ -200,12 +197,12 @@ if(!player || !medal) return - if(global.medal_hub && global.medal_pass && global.medals_enabled) + if(GLOB.medal_hub && GLOB.medal_pass && GLOB.medals_enabled) - var/result = world.GetMedal(medal, player, global.medal_hub, global.medal_pass) + var/result = world.GetMedal(medal, player, GLOB.medal_hub, GLOB.medal_pass) if(isnull(result)) - global.medals_enabled = FALSE + GLOB.medals_enabled = FALSE log_game("MEDAL ERROR: Could not contact hub to get medal:[medal] player:[player.ckey]") message_admins("Error! Failed to contact hub to get [medal] medal for [player.ckey]!") else if (result) @@ -215,12 +212,12 @@ if(!player || !medal) return - if(global.medal_hub && global.medal_pass && global.medals_enabled) + if(GLOB.medal_hub && GLOB.medal_pass && GLOB.medals_enabled) - var/result = world.ClearMedal(medal, player, global.medal_hub, global.medal_pass) + var/result = world.ClearMedal(medal, player, GLOB.medal_hub, GLOB.medal_pass) if(isnull(result)) - global.medals_enabled = FALSE + GLOB.medals_enabled = FALSE log_game("MEDAL ERROR: Could not contact hub to clear medal:[medal] player:[player.ckey]") message_admins("Error! Failed to contact hub to clear [medal] medal for [player.ckey]!") else if (result) @@ -230,6 +227,6 @@ /proc/ClearScore(client/player) - world.SetScores(player.ckey, "", global.medal_hub, global.medal_pass) + world.SetScores(player.ckey, "", GLOB.medal_hub, GLOB.medal_pass) #undef MEDAL_PREFIX diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm index 9ac4acd88c..8b6c9c5e1c 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm @@ -17,19 +17,19 @@ Difficulty: Special */ -var/global/list/mob/living/simple_animal/hostile/swarmer/ai/AISwarmers = list() -var/global/list/mob/living/simple_animal/hostile/swarmer/ai/AISwarmersByType = list()//AISwarmersByType[.../resource] = list(1st, 2nd, nth), AISwarmersByType[../ranged] = list(1st, 2nd, nth) etc. -var/global/list/AISwarmerCapsByType = list(/mob/living/simple_animal/hostile/swarmer/ai/resource = 30, /mob/living/simple_animal/hostile/swarmer/ai/ranged_combat = 20, /mob/living/simple_animal/hostile/swarmer/ai/melee_combat = 10) +GLOBAL_LIST_EMPTY(AISwarmers) +GLOBAL_LIST_EMPTY(AISwarmersByType)//AISwarmersByType[.../resource] = list(1st, 2nd, nth), AISwarmersByType[../ranged] = list(1st, 2nd, nth) etc. +GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swarmer/ai/resource = 30, /mob/living/simple_animal/hostile/swarmer/ai/ranged_combat = 20, /mob/living/simple_animal/hostile/swarmer/ai/melee_combat = 10)) //returns a type of AI swarmer that is NOT at max cap //type order is shuffled, to prevent bias /proc/GetUncappedAISwarmerType() var/static/list/swarmerTypes = subtypesof(/mob/living/simple_animal/hostile/swarmer/ai) - LAZYINITLIST(AISwarmersByType) + LAZYINITLIST(GLOB.AISwarmersByType) for(var/t in shuffle(swarmerTypes)) - var/list/amount = AISwarmersByType[t] - if(!amount || amount.len < AISwarmerCapsByType[t]) + var/list/amount = GLOB.AISwarmersByType[t] + if(!amount || amount.len < GLOB.AISwarmerCapsByType[t]) return t @@ -37,9 +37,9 @@ var/global/list/AISwarmerCapsByType = list(/mob/living/simple_animal/hostile/swa /proc/GetTotalAISwarmerCap() var/static/list/swarmerTypes = subtypesof(/mob/living/simple_animal/hostile/swarmer/ai) . = 0 - LAZYINITLIST(AISwarmersByType) + LAZYINITLIST(GLOB.AISwarmersByType) for(var/t in swarmerTypes) - . += AISwarmerCapsByType[t] + . += GLOB.AISwarmerCapsByType[t] /mob/living/simple_animal/hostile/megafauna/swarmer_swarm_beacon @@ -67,9 +67,9 @@ var/global/list/AISwarmerCapsByType = list(/mob/living/simple_animal/hostile/swa /mob/living/simple_animal/hostile/megafauna/swarmer_swarm_beacon/Initialize() ..() - swarmer_caps = AISwarmerCapsByType //for admin-edits + swarmer_caps = GLOB.AISwarmerCapsByType //for admin-edits internal = new/obj/item/device/gps/internal/swarmer_beacon(src) - for(var/ddir in cardinal) + for(var/ddir in GLOB.cardinal) new /obj/structure/swarmer/blockade (get_step(src, ddir)) var/mob/living/simple_animal/hostile/swarmer/ai/resource/R = new(loc) step(R, ddir) //Step the swarmers, instead of spawning them there, incase the turf is solid @@ -79,7 +79,7 @@ var/global/list/AISwarmerCapsByType = list(/mob/living/simple_animal/hostile/swa . = ..() if(.) var/createtype = GetUncappedAISwarmerType() - if(createtype && world.time > swarmer_spawn_cooldown && AISwarmers.len < (GetTotalAISwarmerCap()*0.5)) + if(createtype && world.time > swarmer_spawn_cooldown && GLOB.AISwarmers.len < (GetTotalAISwarmerCap()*0.5)) swarmer_spawn_cooldown = world.time + swarmer_spawn_cooldown_amt new createtype(loc) @@ -111,14 +111,14 @@ var/global/list/AISwarmerCapsByType = list(/mob/living/simple_animal/hostile/swa /mob/living/simple_animal/hostile/swarmer/ai/Initialize() ..() ToggleLight() //so you can see them eating you out of house and home/shooting you/stunlocking you for eternity - LAZYINITLIST(AISwarmersByType[type]) - AISwarmers += src - AISwarmersByType[type] += src + LAZYINITLIST(GLOB.AISwarmersByType[type]) + GLOB.AISwarmers += src + GLOB.AISwarmersByType[type] += src /mob/living/simple_animal/hostile/swarmer/ai/Destroy() - AISwarmers -= src - AISwarmersByType[type] -= src + GLOB.AISwarmers -= src + GLOB.AISwarmersByType[type] -= src return ..() @@ -214,15 +214,17 @@ var/global/list/AISwarmerCapsByType = list(/mob/living/simple_animal/hostile/swa /mob/living/simple_animal/hostile/swarmer/ai/resource/AttackingTarget() if(target.swarmer_act(src)) add_type_to_wanted(target.type) + return TRUE else add_type_to_ignore(target.type) + return FALSE /mob/living/simple_animal/hostile/swarmer/ai/resource/handle_automated_action() . = ..() if(.) if(!stop_automated_movement) - if(AISwarmers.len < GetTotalAISwarmerCap() && resources >= 50) + if(GLOB.AISwarmers.len < GetTotalAISwarmerCap() && resources >= 50) StartAction(100) //so they'll actually sit still and use the verbs CreateSwarmer() return @@ -308,8 +310,9 @@ var/global/list/AISwarmerCapsByType = list(/mob/living/simple_animal/hostile/swa var/mob/living/L = target L.attack_animal(src) L.electrocute_act(10, src, safety = TRUE) //safety = TRUE means we don't check gloves... Ok? + return TRUE else - ..() + return ..() diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index babdbf28ad..111ce9b9da 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -66,6 +66,11 @@ . = ..() if(.) icon_state = initial(icon_state) + if(prob(15) && iscarbon(target)) + var/mob/living/carbon/C = target + C.Weaken(2) + C.visible_message("\The [src] knocks down \the [C]!", \ + "\The [src] knocks you down!") /mob/living/simple_animal/hostile/mimic/crate/proc/trigger() if(!attempt_open) @@ -87,19 +92,7 @@ O.loc = C ..() -/mob/living/simple_animal/hostile/mimic/crate/AttackingTarget() - . =..() - var/mob/living/L = . - if(iscarbon(L)) - var/mob/living/carbon/C = L - if(prob(15)) - C.Weaken(2) - C.visible_message("\The [src] knocks down \the [C]!", \ - "\The [src] knocks you down!") - - - -var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/cable, /obj/structure/window) +GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/cable, /obj/structure/window)) /mob/living/simple_animal/hostile/mimic/copy health = 100 @@ -137,7 +130,7 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca faction |= "\ref[owner]" /mob/living/simple_animal/hostile/mimic/copy/proc/CheckObject(obj/O) - if((istype(O, /obj/item) || istype(O, /obj/structure)) && !is_type_in_list(O, protected_objects)) + if((istype(O, /obj/item) || istype(O, /obj/structure)) && !is_type_in_list(O, GLOB.protected_objects)) return 1 return 0 @@ -178,14 +171,12 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca ..() /mob/living/simple_animal/hostile/mimic/copy/AttackingTarget() - ..() - if(knockdown_people) - if(iscarbon(target)) - var/mob/living/carbon/C = target - if(prob(15)) - C.Weaken(2) - C.visible_message("\The [src] knocks down \the [C]!", \ - "\The [src] knocks you down!") + . = ..() + if(knockdown_people && . && prob(15) && iscarbon(target)) + var/mob/living/carbon/C = target + C.Weaken(2) + C.visible_message("\The [src] knocks down \the [C]!", \ + "\The [src] knocks you down!") /mob/living/simple_animal/hostile/mimic/copy/Aggro() ..() 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 3cf5529c25..0afd30e137 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -15,7 +15,7 @@ var/throw_message = "bounces off of" var/icon_aggro = null // for swapping to when we get aggressive see_in_dark = 8 - see_invisible = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE mob_size = MOB_SIZE_LARGE /mob/living/simple_animal/hostile/asteroid/Aggro() @@ -165,7 +165,7 @@ if(istype(target, /obj/item/weapon/ore)) EatOre(target) return - ..() + return ..() /mob/living/simple_animal/hostile/asteroid/goldgrub/proc/EatOre(atom/targeted_ore) for(var/obj/item/weapon/ore/O in targeted_ore.loc) @@ -233,6 +233,7 @@ /mob/living/simple_animal/hostile/asteroid/hivelord/AttackingTarget() OpenFire() + return TRUE /mob/living/simple_animal/hostile/asteroid/hivelord/death(gibbed) mouse_opacity = 1 @@ -360,8 +361,8 @@ ..() /mob/living/simple_animal/hostile/asteroid/hivelordbrood/blood/AttackingTarget() - ..() - if(iscarbon(target)) + . = ..() + if(. && iscarbon(target)) transfer_reagents(target, 1) @@ -501,7 +502,7 @@ for(var/obj/effect/goliath_tentacle/original/O in loc)//No more GG NO RE from 2+ goliaths simultaneously tentacling you if(O != src) qdel(src) - var/list/directions = cardinal.Copy() + var/list/directions = GLOB.cardinal.Copy() var/counter for(counter = 1, counter <= 3, counter++) var/spawndir = pick(directions) @@ -924,7 +925,7 @@ regenerate_icons() visible_message("[src] slurps up [target].") qdel(target) - ..() + return ..() /obj/item/udder/gutlunch @@ -1008,12 +1009,12 @@ #define MEDAL_PREFIX "Tendril" /mob/living/simple_animal/hostile/spawner/lavaland/death() var/last_tendril = TRUE - for(var/mob/living/simple_animal/hostile/spawner/lavaland/other in mob_list) + for(var/mob/living/simple_animal/hostile/spawner/lavaland/other in GLOB.mob_list) if(other != src) last_tendril = FALSE break if(last_tendril && !admin_spawned) - if(global.medal_hub && global.medal_pass && global.medals_enabled) + if(GLOB.medal_hub && GLOB.medal_pass && GLOB.medals_enabled) for(var/mob/living/L in view(7,src)) if(L.stat) continue diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm index 4df916ca9a..3149502c2c 100644 --- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm +++ b/code/modules/mob/living/simple_animal/hostile/mushroom.dm @@ -77,7 +77,7 @@ if(faint_ticker < 2) M.visible_message("[M] chews a bit on [src].") faint_ticker++ - return + return TRUE M.visible_message("[M] devours [src]!") var/level_gain = (powerlevel - M.powerlevel) if(level_gain >= -1 && !bruised && !M.ckey)//Player shrooms can't level up to become robust gods. @@ -86,7 +86,8 @@ M.LevelUp(level_gain) M.adjustBruteLoss(-M.maxHealth) qdel(src) - ..() + return TRUE + return ..() /mob/living/simple_animal/hostile/mushroom/revive(full_heal = 0, admin_revive = 0) if(..()) diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm index ab94f6a76a..7410957ef7 100644 --- a/code/modules/mob/living/simple_animal/hostile/pirate.dm +++ b/code/modules/mob/living/simple_animal/hostile/pirate.dm @@ -50,7 +50,6 @@ 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 speed = 1 - deathmessage = "'s suit can't take anymore damage and rips apart!" /mob/living/simple_animal/hostile/pirate/space/ranged name = "Space Pirate Gunner" diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm index 6e37d62f9e..3f54f3d20b 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm @@ -4,7 +4,7 @@ icon_state = "frog" icon_living = "frog" icon_dead = "frog_dead" - speak = list("ribbits","croaks") + speak = list("ribbit","croak") emote_see = list("hops in a circle.", "shakes.") speak_chance = 1 turns_per_move = 5 @@ -24,7 +24,6 @@ pass_flags = PASSTABLE | PASSGRILLE | PASSMOB mob_size = MOB_SIZE_TINY gold_core_spawnable = 1 - devourable = 1 /mob/living/simple_animal/hostile/retaliate/frog/Initialize() ..() @@ -40,4 +39,4 @@ if(!stat && isliving(AM)) var/mob/living/L = AM if(L.mob_size > MOB_SIZE_TINY) - playsound(src, 'sound/effects/Huuu.ogg', 50, 1) \ No newline at end of file + playsound(src, 'sound/effects/Huuu.ogg', 50, 1) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm index 0353b6b3a0..20bb9c497e 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm @@ -45,9 +45,9 @@ else switch(rand(0,1)) if(0) - name = "ghost of [pick(first_names_male)] [pick(last_names)]" + name = "ghost of [pick(GLOB.first_names_male)] [pick(GLOB.last_names)]" if(1) - name = "ghost of [pick(first_names_female)] [pick(last_names)]" + name = "ghost of [pick(GLOB.first_names_female)] [pick(GLOB.last_names)]" give_hair() diff --git a/code/modules/mob/living/simple_animal/hostile/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/skeleton.dm index 1df25557ce..a84f32b285 100644 --- a/code/modules/mob/living/simple_animal/hostile/skeleton.dm +++ b/code/modules/mob/living/simple_animal/hostile/skeleton.dm @@ -27,8 +27,8 @@ stat_attack = 1 gold_core_spawnable = 1 faction = list("skeleton") - see_invisible = SEE_INVISIBLE_MINIMUM see_in_dark = 8 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE deathmessage = "collapses into a pile of bones!" del_on_death = 1 loot = list(/obj/effect/decal/remains/human) diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index 3d9d959160..455f893a5c 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -35,6 +35,7 @@ hud_possible = list(ANTAG_HUD) see_in_dark = 13 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE vision_range = 12 aggro_vision_range = 12 idle_vision_range = 12 @@ -44,9 +45,11 @@ sight = SEE_SELF|SEE_MOBS|SEE_OBJS|SEE_TURFS anchored = 1 + gold_core_spawnable = 1 + var/cannot_be_seen = 1 var/mob/living/creator = null - gold_core_spawnable = 1 + // No movement while seen code. @@ -58,9 +61,6 @@ mob_spell_list += new /obj/effect/proc_holder/spell/aoe_turf/blindness(src) mob_spell_list += new /obj/effect/proc_holder/spell/targeted/night_vision(src) - // Give nightvision - see_invisible = SEE_INVISIBLE_NOLIGHTING - // Set creator if(creator) src.creator = creator @@ -93,9 +93,9 @@ if(can_be_seen(get_turf(loc))) if(client) to_chat(src, "You cannot attack, there are eyes on you!") - return + return FALSE else - ..() + return ..() /mob/living/simple_animal/hostile/statue/DestroySurroundings() if(!can_be_seen(get_turf(loc))) @@ -187,7 +187,7 @@ range = 10 /obj/effect/proc_holder/spell/aoe_turf/blindness/cast(list/targets,mob/user = usr) - for(var/mob/living/L in living_mob_list) + for(var/mob/living/L in GLOB.living_mob_list) var/turf/T = get_turf(L.loc) if(T && T in targets) L.blind_eyes(4) @@ -205,15 +205,22 @@ range = -1 include_user = 1 -/obj/effect/proc_holder/spell/targeted/night_vision/cast(list/targets,mob/user = usr) +/obj/effect/proc_holder/spell/targeted/night_vision/cast(list/targets, mob/user = usr) for(var/mob/living/target in targets) - if(!iscarbon(target)) //Carbons should be toggling their vision via organ, this spell is used as a power for simple mobs - if(target.see_invisible == SEE_INVISIBLE_LIVING) - target.see_invisible = SEE_INVISIBLE_NOLIGHTING - name = "Toggle Nightvision \[ON]" - else - target.see_invisible = SEE_INVISIBLE_LIVING + switch(target.lighting_alpha) + if (LIGHTING_PLANE_ALPHA_VISIBLE) + target.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE + name = "Toggle Nightvision \[More]" + if (LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE) + target.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + name = "Toggle Nightvision \[Full]" + if (LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE) + target.lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE name = "Toggle Nightvision \[OFF]" + else + target.lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE + name = "Toggle Nightvision \[ON]" + target.update_sight() /mob/living/simple_animal/hostile/statue/sentience_act() faction -= "neutral" diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm index fb9e9fc3c6..337dbfd17e 100644 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ b/code/modules/mob/living/simple_animal/hostile/tree.dm @@ -52,7 +52,7 @@ T.atmos_spawn_air("o2=[amt]") /mob/living/simple_animal/hostile/tree/AttackingTarget() - ..() + . = ..() if(iscarbon(target)) var/mob/living/carbon/C = target if(prob(15)) diff --git a/code/modules/mob/living/simple_animal/hostile/wizard.dm b/code/modules/mob/living/simple_animal/hostile/wizard.dm index efd5ee47c4..7c433eb4d9 100644 --- a/code/modules/mob/living/simple_animal/hostile/wizard.dm +++ b/code/modules/mob/living/simple_animal/hostile/wizard.dm @@ -36,7 +36,6 @@ var/next_cast = 0 - /mob/living/simple_animal/hostile/wizard/Initialize() ..() fireball = new /obj/effect/proc_holder/spell/aimed/fireball @@ -44,6 +43,7 @@ fireball.human_req = 0 fireball.player_lock = 0 AddSpell(fireball) + implants += new /obj/item/weapon/implant/exile(src) mm = new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile mm.clothes_req = 0 diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 2bca45ddf3..ac5709fd22 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -59,7 +59,6 @@ mob_size = MOB_SIZE_SMALL movement_type = FLYING gold_core_spawnable = 2 - devourable = 1 var/parrot_damage_upper = 10 var/parrot_state = PARROT_WANDER //Hunt for a perch when created @@ -145,7 +144,7 @@ stat("Held Item", held_item) stat("Mode",a_intent) -/mob/living/simple_animal/parrot/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans) +/mob/living/simple_animal/parrot/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans, message_mode) if(speaker != src && prob(50)) //Dont imitate ourselves if(!radio_freq || prob(10)) if(speech_buffer.len >= 500) @@ -155,7 +154,7 @@ return message ..() -/mob/living/simple_animal/parrot/radio(message, message_mode, list/spans) //literally copied from human/radio(), but there's no other way to do this. at least it's better than it used to be. +/mob/living/simple_animal/parrot/radio(message, message_mode, list/spans, language) //literally copied from human/radio(), but there's no other way to do this. at least it's better than it used to be. . = ..() if(. != 0) return . @@ -163,17 +162,17 @@ switch(message_mode) if(MODE_HEADSET) if (ears) - ears.talk_into(src, message, , spans) + ears.talk_into(src, message, , spans, language) return ITALICS | REDUCE_RANGE if(MODE_DEPARTMENT) if (ears) - ears.talk_into(src, message, message_mode, spans) + ears.talk_into(src, message, message_mode, spans, language) return ITALICS | REDUCE_RANGE - if(message_mode in radiochannels) + if(message_mode in GLOB.radiochannels) if(ears) - ears.talk_into(src, message, message_mode, spans) + ears.talk_into(src, message, message_mode, spans, language) return ITALICS | REDUCE_RANGE return 0 @@ -216,7 +215,7 @@ ears.loc = src.loc ears = null for(var/possible_phrase in speak) - if(copytext(possible_phrase,1,3) in department_radio_keys) + if(copytext(possible_phrase,1,3) in GLOB.department_radio_keys) possible_phrase = copytext(possible_phrase,3) else to_chat(usr, "There is nothing to remove from its [remove_from]!") @@ -308,7 +307,7 @@ //Simple animals /mob/living/simple_animal/parrot/attack_animal(mob/living/simple_animal/M) - ..() //goodbye immortal parrots + . = ..() //goodbye immortal parrots if(client) return @@ -425,7 +424,7 @@ if(prob(50)) useradio = 1 - if(copytext(possible_phrase,1,3) in department_radio_keys) + if(copytext(possible_phrase,1,3) in GLOB.department_radio_keys) possible_phrase = "[useradio?pick(available_channels):""][copytext(possible_phrase,3)]" //crop out the channel prefix else possible_phrase = "[useradio?pick(available_channels):""][possible_phrase]" @@ -434,7 +433,7 @@ else //If we have no headset or channels to use, dont try to use any! for(var/possible_phrase in speak) - if(copytext(possible_phrase,1,3) in department_radio_keys) + if(copytext(possible_phrase,1,3) in GLOB.department_radio_keys) possible_phrase = "[copytext(possible_phrase,3,length(possible_phrase)+1)]" //crop out the channel prefix newspeak.Add(possible_phrase) speak = newspeak @@ -456,7 +455,7 @@ //Wander around aimlessly. This will help keep the loops from searches down //and possibly move the mob into a new are in view of something they can use if(prob(90)) - step(src, pick(cardinal)) + step(src, pick(GLOB.cardinal)) return if(!held_item && !parrot_perch) //If we've got nothing to do.. look for something to do. @@ -895,10 +894,11 @@ desc += " Over [rounds_survived] shifts without a \"terrible\" \"accident\"!" else speak += pick("...alive?", "This isn't parrot heaven!", "I live, I die, I live again!", "The void fades!") + ..() /mob/living/simple_animal/parrot/Poly/Life() - if(!stat && ticker.current_state == GAME_STATE_FINISHED && !memory_saved) + if(!stat && SSticker.current_state == GAME_STATE_FINISHED && !memory_saved) rounds_survived = max(++rounds_survived,1) if(rounds_survived > longest_survival) longest_survival = rounds_survived diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm index f4b551828e..8c08263aa7 100644 --- a/code/modules/mob/living/simple_animal/shade.dm +++ b/code/modules/mob/living/simple_animal/shade.dm @@ -52,7 +52,7 @@ else to_chat(M, "You cannot heal [src], as [p_they()] [p_are()] unharmed!") else if(src != M) - ..() + return ..() /mob/living/simple_animal/shade/attackby(obj/item/O, mob/user, params) //Marker -Agouri if(istype(O, /obj/item/device/soulstone)) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index afaf7718e0..8f108e6680 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -95,6 +95,9 @@ if(!loc) stack_trace("Simple animal being instantiated in nullspace") + // goats bray, cows go moo, and the fox says Geckers + grant_language(/datum/language/common) + /mob/living/simple_animal/Login() if(src && src.client) src.client.screen = list() @@ -142,7 +145,7 @@ turns_since_move++ if(turns_since_move >= turns_per_move) if(!(stop_automated_movement_when_pulled && pulledby)) //Some animals don't move when pulled - var/anydir = pick(cardinal) + var/anydir = pick(GLOB.cardinal) if(Process_Spacemove(anydir)) Move(get_step(src, anydir), anydir) turns_since_move = 0 @@ -193,7 +196,7 @@ var/turf/open/ST = src.loc if(ST.air) var/ST_gases = ST.air.gases - ST.air.assert_gases(arglist(hardcoded_gases)) + ST.air.assert_gases(arglist(GLOB.hardcoded_gases)) var/tox = ST_gases["plasma"][MOLES] var/oxy = ST_gases["o2"][MOLES] @@ -344,7 +347,7 @@ . = 1 /mob/living/simple_animal/proc/make_babies() // <3 <3 <3 - if(gender != FEMALE || stat || next_scan_time > world.time || !childtype || !animal_species || ticker.current_state != GAME_STATE_PLAYING) + if(gender != FEMALE || stat || next_scan_time > world.time || !childtype || !animal_species || SSticker.current_state != GAME_STATE_PLAYING) return next_scan_time = world.time + 400 var/alone = 1 @@ -446,6 +449,7 @@ var/atom/A = client.eye if(A.update_remote_sight(src)) //returns 1 if we override all other sight updates. return + sync_lighting_plane_alpha() /mob/living/simple_animal/get_idcard() return access_card diff --git a/code/modules/mob/living/simple_animal/slime/death.dm b/code/modules/mob/living/simple_animal/slime/death.dm index 0e5e0750ca..aab8e907c0 100644 --- a/code/modules/mob/living/simple_animal/slime/death.dm +++ b/code/modules/mob/living/simple_animal/slime/death.dm @@ -26,8 +26,8 @@ update_canmove() - if(ticker && ticker.mode) - ticker.mode.check_win() + if(SSticker && SSticker.mode) + SSticker.mode.check_win() return ..(gibbed) @@ -37,7 +37,7 @@ /mob/living/simple_animal/slime/Destroy() - for(var/obj/machinery/computer/camera_advanced/xenobio/X in machines) + for(var/obj/machinery/computer/camera_advanced/xenobio/X in GLOB.machines) if(src in X.stored_slimes) X.stored_slimes -= src return ..() diff --git a/code/modules/mob/living/simple_animal/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm index 6910fe6df1..eaee4a6b62 100644 --- a/code/modules/mob/living/simple_animal/slime/life.dm +++ b/code/modules/mob/living/simple_animal/slime/life.dm @@ -383,7 +383,7 @@ if (holding_still) holding_still = max(holding_still - hungry, 0) else if(canmove && isturf(loc) && prob(50)) - step(src, pick(cardinal)) + step(src, pick(GLOB.cardinal)) else if(holding_still) @@ -391,7 +391,7 @@ else if (docile && pulledby) holding_still = 10 else if(canmove && isturf(loc) && prob(33)) - step(src, pick(cardinal)) + step(src, pick(GLOB.cardinal)) else if(!AIproc) INVOKE_ASYNC(src, .proc/AIprocess) diff --git a/code/modules/mob/living/simple_animal/slime/powers.dm b/code/modules/mob/living/simple_animal/slime/powers.dm index 3585d989dc..aec971fb37 100644 --- a/code/modules/mob/living/simple_animal/slime/powers.dm +++ b/code/modules/mob/living/simple_animal/slime/powers.dm @@ -170,8 +170,6 @@ var/mob/living/simple_animal/slime/new_slime = pick(babies) new_slime.a_intent = INTENT_HARM - new_slime.languages_spoken = languages_spoken - new_slime.languages_understood = languages_understood if(src.mind) src.mind.transfer_to(new_slime) else diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index e3857144da..1fc6ff2e78 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -1,9 +1,3 @@ -var/list/slime_colours = list("rainbow", "grey", "purple", "metal", "orange", - "blue", "dark blue", "dark purple", "yellow", "silver", "pink", "red", - "gold", "green", "adamantine", "oil", "light pink", "bluespace", - "cerulean", "sepia", "black", "pyrite") - - /mob/living/simple_animal/slime name = "grey baby slime (123)" icon = 'icons/mob/slimes.dmi' @@ -13,8 +7,6 @@ var/list/slime_colours = list("rainbow", "grey", "purple", "metal", "orange", gender = NEUTER var/is_adult = 0 var/docile = 0 - languages_spoken = SLIME | HUMAN - languages_understood = SLIME | HUMAN faction = list("slime","neutral") harm_intent_damage = 5 @@ -43,8 +35,6 @@ var/list/slime_colours = list("rainbow", "grey", "purple", "metal", "orange", verb_exclaim = "telepathically cries" verb_yell = "telephatically cries" - devourable = 1 - // canstun and canweaken don't affect slimes because they ignore stun and weakened variables // for the sake of cleanliness, though, here they are. status_flags = CANPARALYSE|CANPUSH @@ -80,6 +70,11 @@ var/list/slime_colours = list("rainbow", "grey", "purple", "metal", "orange", var/coretype = /obj/item/slime_extract/grey var/list/slime_mutation[4] + var/static/list/slime_colours = list("rainbow", "grey", "purple", "metal", "orange", + "blue", "dark blue", "dark purple", "yellow", "silver", "pink", "red", + "gold", "green", "adamantine", "oil", "light pink", "bluespace", + "cerulean", "sepia", "black", "pyrite") + /mob/living/simple_animal/slime/Initialize(mapload, new_colour="grey", new_is_adult=FALSE) var/datum/action/innate/slime/feed/F = new F.Grant(src) @@ -96,6 +91,7 @@ var/list/slime_colours = list("rainbow", "grey", "purple", "metal", "orange", E.Grant(src) create_reagents(100) set_colour(new_colour) + grant_language(/datum/language/slime) ..() /mob/living/simple_animal/slime/proc/set_colour(new_colour) @@ -250,7 +246,8 @@ var/list/slime_colours = list("rainbow", "grey", "purple", "metal", "orange", M.updatehealth() /mob/living/simple_animal/slime/attack_animal(mob/living/simple_animal/M) - if(..()) + . = ..() + if(.) attacked += 10 @@ -425,4 +422,4 @@ var/list/slime_colours = list("rainbow", "grey", "purple", "metal", "orange", return 3 /mob/living/simple_animal/slime/random/Initialize(mapload, new_colour, new_is_adult) - . = ..(mapload, pick(slime_colours), prob(50)) \ No newline at end of file + . = ..(mapload, pick(slime_colours), prob(50)) diff --git a/code/modules/mob/living/taste.dm b/code/modules/mob/living/taste.dm index 7d570e008f..45fdf55fb4 100644 --- a/code/modules/mob/living/taste.dm +++ b/code/modules/mob/living/taste.dm @@ -22,7 +22,7 @@ // We dont want to spam the same message over and over again at the // person. Give it a bit of a buffer. if(hallucination > 50 && prob(25)) - text_output = pick("spiders","[pick(wire_colors)]","dreams","nightmares","the future","the past","victory",\ + text_output = pick("spiders","dreams","nightmares","the future","the past","victory",\ "defeat","pain","bliss","revenge","poison","time","space","death","life","truth","lies","justice","memory",\ "regrets","your soul","suffering","music","noise","blood","hunger","the american way") if(text_output != last_taste_text || last_taste_time + 100 < world.time) diff --git a/code/modules/mob/living/ventcrawling.dm b/code/modules/mob/living/ventcrawling.dm index a157e06402..a1430f6cd4 100644 --- a/code/modules/mob/living/ventcrawling.dm +++ b/code/modules/mob/living/ventcrawling.dm @@ -1,5 +1,5 @@ -var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/components/unary/vent_pump, /obj/machinery/atmospherics/components/unary/vent_scrubber) +GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/components/unary/vent_pump, /obj/machinery/atmospherics/components/unary/vent_scrubber)) //VENTCRAWLING @@ -32,7 +32,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/components/unary if(!vent_found) for(var/obj/machinery/atmospherics/machine in range(1,src)) - if(is_type_in_list(machine, ventcrawl_machinery)) + if(is_type_in_list(machine, GLOB.ventcrawl_machinery)) vent_found = machine if(!vent_found.can_crawl_through()) diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index dd4f89b1c1..2b57b4e884 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -1,33 +1,8 @@ -//handles setting lastKnownIP and computer_id for use by the ban systems as well as checking for multikeying -/mob/proc/update_Login_details() - //Multikey checks and logging +/mob/Login() + GLOB.player_list |= src lastKnownIP = client.address computer_id = client.computer_id - log_access("Login: [key_name(src)] from [lastKnownIP ? lastKnownIP : "localhost"]-[computer_id] || BYOND v[client.byond_version]") - if(config.log_access) - for(var/mob/M in player_list) - if(M == src) - continue - if( M.key && (M.key != key) ) - var/matches - if( (M.lastKnownIP == client.address) ) - matches += "IP ([client.address])" - if( (M.computer_id == client.computer_id) ) - if(matches) - matches += " and " - matches += "ID ([client.computer_id])" - spawn() alert("You have logged in already with another key this round, please log out of this one NOW or risk being banned!") - if(matches) - if(M.client) - message_admins("Notice: [key_name_admin(src)] has the same [matches] as [key_name_admin(M)].") - log_access("Notice: [key_name(src)] has the same [matches] as [key_name(M)].") - else - message_admins("Notice: [key_name_admin(src)] has the same [matches] as [key_name_admin(M)] (no longer logged in). ") - log_access("Notice: [key_name(src)] has the same [matches] as [key_name(M)] (no longer logged in).") - -/mob/Login() - player_list |= src - update_Login_details() + log_access("Mob Login: [key_name(src)] was assigned to a [type]") world.update_status() client.screen = list() //remove hud items just in case client.images = list() @@ -53,7 +28,7 @@ reload_fullscreen() // Reload any fullscreen overlays this mob has. - if(ckey in deadmins) + if(ckey in GLOB.deadmins) verbs += /client/proc/readmin add_click_catcher() diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm index c6627a92e3..b3d708eee9 100644 --- a/code/modules/mob/logout.dm +++ b/code/modules/mob/logout.dm @@ -1,11 +1,10 @@ /mob/Logout() SStgui.on_logout(src) unset_machine() - player_list -= src - log_access("Logout: [key_name(src)]") - if(admin_datums[src.ckey]) - if (ticker && ticker.current_state == GAME_STATE_PLAYING) //Only report this stuff if we are currently playing. - var/admins_number = admins.len + GLOB.player_list -= src + if(GLOB.admin_datums[src.ckey]) + if (SSticker && SSticker.current_state == GAME_STATE_PLAYING) //Only report this stuff if we are currently playing. + var/admins_number = GLOB.admins.len if(admins_number == 0) //Apparently the admin logging out is no longer an admin at this point, so we have to check this towards 0 and not towards 1. Awell. var/cheesy_message = pick( list( \ "I have no admins online!",\ diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index a780d8d4dd..1a308f9c99 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1,8 +1,8 @@ /mob/Destroy()//This makes sure that mobs with clients/keys are not just deleted from the game. - mob_list -= src - dead_mob_list -= src - living_mob_list -= src - all_clockwork_mobs -= src + GLOB.mob_list -= src + GLOB.dead_mob_list -= src + GLOB.living_mob_list -= src + GLOB.all_clockwork_mobs -= src if(observers && observers.len) for(var/M in observers) var/mob/dead/observe = M @@ -19,17 +19,15 @@ ..() return QDEL_HINT_HARDDEL -var/next_mob_id = 0 /mob/Initialize() tag = "mob_[next_mob_id++]" - mob_list += src + GLOB.mob_list += src if(stat == DEAD) - dead_mob_list += src + GLOB.dead_mob_list += src else - living_mob_list += src + GLOB.living_mob_list += src prepare_huds() can_ride_typecache = typecacheof(can_ride_typecache) - hook_vr("mob_new",list(src)) ..() /atom/proc/prepare_huds() @@ -112,7 +110,7 @@ var/next_mob_id = 0 if(self_message) msg = self_message else - if(M.see_invisibleYou must be dead to use this!") return @@ -581,6 +579,7 @@ var/next_mob_id = 0 stat("Location:", "([x], [y], [z])") stat("CPU:", "[world.cpu]") stat("Instances:", "[world.contents.len]") + GLOB.stat_entry() config.stat_entry() stat(null) if(Master) @@ -595,7 +594,7 @@ var/next_mob_id = 0 stat(null) for(var/datum/controller/subsystem/SS in Master.subsystems) SS.stat_entry() - cameranet.stat_entry() + GLOB.cameranet.stat_entry() if(listed_turf && client) if(!TurfAdjacent(listed_turf)) @@ -873,7 +872,7 @@ var/next_mob_id = 0 return FALSE -//This will update a mob's name, real_name, mind.name, data_core records, pda, id and traitor text +//This will update a mob's name, real_name, mind.name, GLOB.data_core records, pda, id and traitor text //Calling this proc without an oldname will only update the mob and skip updating the pda, id and records ~Carn /mob/proc/fully_replace_character_name(oldname,newname) if(!newname) @@ -890,14 +889,14 @@ var/next_mob_id = 0 //update our pda and id if we have them on our person replace_identification_name(oldname,newname) - for(var/datum/mind/T in ticker.minds) + for(var/datum/mind/T in SSticker.minds) for(var/datum/objective/obj in T.objectives) // Only update if this player is a target if(obj.target && obj.target.current && obj.target.current.real_name == name) obj.update_explanation_text() return 1 -//Updates data_core records with new name , see mob/living/carbon/human +//Updates GLOB.data_core records with new name , see mob/living/carbon/human /mob/proc/replace_records_name(oldname,newname) return @@ -931,15 +930,24 @@ var/next_mob_id = 0 /mob/proc/update_health_hud() return +/mob/proc/update_sight() + sync_lighting_plane_alpha() + +/mob/proc/sync_lighting_plane_alpha() + if(hud_used) + var/obj/screen/plane_master/lighting/L = hud_used.plane_masters["[LIGHTING_PLANE]"] + if (L) + L.alpha = lighting_alpha + /mob/living/vv_edit_var(var_name, var_value) switch(var_name) if("stat") if((stat == DEAD) && (var_value < DEAD))//Bringing the dead back to life - dead_mob_list -= src - living_mob_list += src + GLOB.dead_mob_list -= src + GLOB.living_mob_list += src if((stat < DEAD) && (var_value == DEAD))//Kill he - living_mob_list -= src - dead_mob_list += src + GLOB.living_mob_list -= src + GLOB.dead_mob_list += src . = ..() switch(var_name) if("weakened") @@ -964,6 +972,8 @@ var/next_mob_id = 0 updatehealth() if("resize") update_transform() + if("lighting_alpha") + sync_lighting_plane_alpha() /mob/proc/is_literate() diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index d315cf84bc..998613bb37 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -5,9 +5,12 @@ flags = HEAR hud_possible = list(ANTAG_HUD) pressure_resistance = 8 + var/lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE var/datum/mind/mind var/list/datum/action/actions = list() + var/static/next_mob_id = 0 + var/stat = 0 //Whether a mob is alive or dead. TODO: Move this to living - Nodrak @@ -131,8 +134,6 @@ var/has_unlimited_silicon_privilege = 0 // Can they interact with station electronics - var/force_compose = 0 //If this is nonzero, the mob will always compose it's own hear message instead of using the one given in the arguments. - var/obj/control_object //Used by admins to possess objects. All mobs should have this var var/atom/movable/remote_control //Calls relaymove() to whatever it is diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 5cbecbaf94..2ec8c16df7 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -269,14 +269,13 @@ It's fairly easy to fix if dealing with single letters but not so much with comp /proc/findname(msg) if(!istext(msg)) msg = "[msg]" - for(var/mob/M in mob_list) + for(var/mob/M in GLOB.mob_list) if(M.real_name == msg) return M return 0 -var/static/regex/firstname = new("^\[^\\s-\]+") //First word before whitespace or "-" - /mob/proc/first_name() + var/static/regex/firstname = new("^\[^\\s-\]+") //First word before whitespace or "-" firstname.Find(real_name) return firstname.match @@ -327,7 +326,7 @@ var/static/regex/firstname = new("^\[^\\s-\]+") //First word before whitespace o return 0 /proc/is_special_character(mob/M) // returns 1 for special characters and 2 for heroes of gamemode //moved out of admins.dm because things other than admin procs were calling this. - if(!ticker || !ticker.mode) + if(!SSticker || !SSticker.mode) return 0 if(!istype(M)) return 0 @@ -347,30 +346,30 @@ var/static/regex/firstname = new("^\[^\\s-\]+") //First word before whitespace o return 1 return 0 if(M.mind && M.mind.special_role)//If they have a mind and special role, they are some type of traitor or antagonist. - switch(ticker.mode.config_tag) + switch(SSticker.mode.config_tag) if("revolution") - if((M.mind in ticker.mode.head_revolutionaries) || (M.mind in ticker.mode.revolutionaries)) + if((M.mind in SSticker.mode.head_revolutionaries) || (M.mind in SSticker.mode.revolutionaries)) return 2 if("cult") - if(M.mind in ticker.mode.cult) + if(M.mind in SSticker.mode.cult) return 2 if("nuclear") - if(M.mind in ticker.mode.syndicates) + if(M.mind in SSticker.mode.syndicates) return 2 if("changeling") - if(M.mind in ticker.mode.changelings) + if(M.mind in SSticker.mode.changelings) return 2 if("wizard") - if(M.mind in ticker.mode.wizards) + if(M.mind in SSticker.mode.wizards) return 2 if("apprentice") - if(M.mind in ticker.mode.apprentices) + if(M.mind in SSticker.mode.apprentices) return 2 if("monkey") if(M.viruses && (locate(/datum/disease/transformation/jungle_fever) in M.viruses)) return 2 if("abductor") - if(M.mind in ticker.mode.abductors) + if(M.mind in SSticker.mode.abductors) return 2 return 1 return 0 @@ -381,7 +380,7 @@ var/static/regex/firstname = new("^\[^\\s-\]+") //First word before whitespace o /proc/notify_ghosts(var/message, var/ghost_sound = null, var/enter_link = null, var/atom/source = null, var/image/alert_overlay = null, var/action = NOTIFY_JUMP, flashwindow = TRUE) //Easy notification of ghosts. if(SSatoms.initialized != INITIALIZATION_INNEW_REGULAR) //don't notify for objects created during a map load return - for(var/mob/dead/observer/O in player_list) + for(var/mob/dead/observer/O in GLOB.player_list) if(O.client) to_chat(O, "[message][(enter_link) ? " [enter_link]" : ""]") if(ghost_sound) @@ -464,17 +463,6 @@ var/static/regex/firstname = new("^\[^\\s-\]+") //First word before whitespace o message_admins("No ghosts were willing to take control of [key_name_admin(M)])") return FALSE -//toggles the talk wheel -/mob/verb/toggle_talk_wheel() - set name = "talk-wheel" - set hidden = 1 - - if(isliving(src)) - var/mob/living/L = src - if(L.hud_used) - for(var/obj/screen/wheel/talk/TW in L.hud_used.wheels) - TW.Click() - /mob/proc/is_flying(mob/M = src) if(M.movement_type & FLYING) return 1 @@ -499,4 +487,4 @@ var/static/regex/firstname = new("^\[^\\s-\]+") //First word before whitespace o var/list/timestamped_message = list("[LAZYLEN(logging[message_type]) + 1]\[[time_stamp()]\] [key_name(src)]" = message) - logging[message_type] += timestamped_message \ No newline at end of file + logging[message_type] += timestamped_message diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index a0325405f7..f9d1f59717 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -163,7 +163,7 @@ if(mob.confused) if(mob.confused > 40) - step(mob, pick(cardinal)) + step(mob, pick(GLOB.cardinal)) else if(prob(mob.confused * 1.5)) step(mob, angle2dir(dir2angle(direct) + pick(90, -90))) else if(prob(mob.confused * 3)) diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 0bcc142550..a396072b4f 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -2,35 +2,41 @@ /mob/verb/say_verb(message as text) set name = "Say" set category = "IC" - if(say_disabled) //This is here to try to identify lag problems + if(GLOB.say_disabled) //This is here to try to identify lag problems to_chat(usr, "Speech is currently admin-disabled.") return usr.say(message) -/mob/verb/whisper(message as text) + +/mob/verb/whisper_verb(message as text) set name = "Whisper" set category = "IC" - if(say_disabled) //This is here to try to identify lag problems + if(GLOB.say_disabled) //This is here to try to identify lag problems to_chat(usr, "Speech is currently admin-disabled.") return - say(message) //only carbons actually whisper, everything else just talks + whisper(message) + +/mob/proc/whisper(message, datum/language/language=null) + say(message, language) //only living mobs actually whisper, everything else just talks /mob/verb/me_verb(message as message) set name = "Me" set category = "IC" - if(say_disabled) //This is here to try to identify lag problems + if(GLOB.say_disabled) //This is here to try to identify lag problems to_chat(usr, "Speech is currently admin-disabled.") return + var/list/replace_chars = list("\n"=" ","\t"=" ") message = copytext(sanitize(message, replace_chars), 1, (MAX_MESSAGE_LEN*2)) + usr.emote("me",1,message) /mob/proc/say_dead(var/message) var/name = real_name var/alt_name = "" - if(say_disabled) //This is here to try to identify lag problems + if(GLOB.say_disabled) //This is here to try to identify lag problems to_chat(usr, "Speech is currently admin-disabled.") return diff --git a/code/modules/mob/say_readme.dm b/code/modules/mob/say_readme.dm index 23542d043b..87c198875a 100644 --- a/code/modules/mob/say_readme.dm +++ b/code/modules/mob/say_readme.dm @@ -70,11 +70,12 @@ global procs Message treatment or composition of output are not done by this proc, these are handled by the rest of say() and the hearer respectively. - lang_treat(message, atom/movable/speaker, message_langs, raw_message, spans) + lang_treat(message, atom/movable/speaker, message_langs, raw_message, spans, message_mode) Modifies the message by comparing the languages of the speaker with the languages of the hearer. Called on the hearer. + Passes message_mode to say_quote. - say_quote(input, spans) + say_quote(input, spans, message_mode) Adds a verb and quotes to a message. Also attaches span classes to a message. Verbs are determined by verb_say/verb_ask/verb_yell variables. Called on the speaker. get_spans(input, spans) @@ -85,7 +86,7 @@ global procs say_dead(message) Sends a message to all dead people. Does not use Hear(). - compose_message(message, atom/movable/speaker, message_langs, raw_message, radio_freq, spans) + compose_message(message, atom/movable/speaker, message_langs, raw_message, radio_freq, spans, message_mode) Composes the message mobs see on their screen when they hear something. compose_track_href(message, atom/movable/speaker, message_langs, raw_message, radio_freq) @@ -105,6 +106,10 @@ global procs The say() of mob_living is significantly more complex than that of objects. Most of the extra code has to do with radios and message treatment. + send_speech(message, range, source, bubble_type, spans, message_mode) + mob/living's send_speech allows mobs one tile outside of the defined range to still hear the message, + but starred with the stars() proc. + check_emote(message) Checks if the message begins with an * and is thus an emote. diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm index c0c5ff787b..cbc3072ea9 100644 --- a/code/modules/mob/say_vr.dm +++ b/code/modules/mob/say_vr.dm @@ -98,7 +98,7 @@ proc/get_top_level_mob(var/mob/S) user.log_message(message, INDIVIDUAL_EMOTE_LOG) message = "[user] " + message - for(var/mob/M in dead_mob_list) + for(var/mob/M in GLOB.dead_mob_list) if(!M.client || isnewplayer(M)) continue var/T = get_turf(src) @@ -118,7 +118,7 @@ proc/get_top_level_mob(var/mob/S) /mob/living/verb/subtle() set name = "Subtle" set category = "IC" - if(say_disabled) //This is here to try to identify lag problems + if(GLOB.say_disabled) //This is here to try to identify lag problems to_chat(usr, "Speech is currently admin-disabled.") return usr.emote("subtle") \ No newline at end of file diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index cc2eab5209..978fde9e59 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -57,7 +57,7 @@ if(tr_flags & TR_KEEPSE) O.dna.struc_enzymes = dna.struc_enzymes - var/datum/mutation/human/race/R = mutations_list[RACEMUT] + var/datum/mutation/human/race/R = GLOB.mutations_list[RACEMUT] O.dna.struc_enzymes = R.set_se(O.dna.struc_enzymes, on=1)//we don't want to keep the race block inactive if(suiciding) @@ -205,7 +205,7 @@ if(tr_flags & TR_KEEPSE) O.dna.struc_enzymes = dna.struc_enzymes - var/datum/mutation/human/race/R = mutations_list[RACEMUT] + var/datum/mutation/human/race/R = GLOB.mutations_list[RACEMUT] O.dna.struc_enzymes = R.set_se(O.dna.struc_enzymes, on=0)//we don't want to keep the race block active O.domutcheck() @@ -308,24 +308,24 @@ /mob/proc/AIize(transfer_after = TRUE) if(client) - stopLobbySound() + stop_sound_channel(CHANNEL_LOBBYMUSIC) var/turf/loc_landmark - for(var/obj/effect/landmark/start/sloc in landmarks_list) + for(var/obj/effect/landmark/start/sloc in GLOB.landmarks_list) if(sloc.name != "AI") continue if(locate(/mob/living/silicon/ai) in sloc.loc) continue loc_landmark = sloc.loc if(!loc_landmark) - for(var/obj/effect/landmark/tripai in landmarks_list) + for(var/obj/effect/landmark/tripai in GLOB.landmarks_list) if(tripai.name == "tripai") if(locate(/mob/living/silicon/ai) in tripai.loc) continue loc_landmark = tripai.loc if(!loc_landmark) to_chat(src, "Oh god sorry we can't find an unoccupied AI spawn location, so we're spawning you on top of someone.") - for(var/obj/effect/landmark/start/sloc in landmarks_list) + for(var/obj/effect/landmark/start/sloc in GLOB.landmarks_list) if (sloc.name == "AI") loc_landmark = sloc.loc @@ -385,7 +385,7 @@ R.loc = loc R.job = "Cyborg" - R.notify_ai(1) + R.notify_ai(NEW_BORG) . = R qdel(src) diff --git a/code/modules/modular_computers/NTNet/NTNRC/conversation.dm b/code/modules/modular_computers/NTNet/NTNRC/conversation.dm index 55998071e7..c4ef258ae3 100644 --- a/code/modules/modular_computers/NTNet/NTNRC/conversation.dm +++ b/code/modules/modular_computers/NTNet/NTNRC/conversation.dm @@ -1,5 +1,3 @@ -var/global/static/ntnrc_uid = 0 - /datum/ntnet_conversation var/id = null var/title = "Untitled Conversation" @@ -7,17 +5,17 @@ var/global/static/ntnrc_uid = 0 var/list/messages = list() var/list/clients = list() var/password + var/static/ntnrc_uid = 0 /datum/ntnet_conversation/New() - id = ntnrc_uid - ntnrc_uid++ - if(ntnet_global) - ntnet_global.chat_channels.Add(src) + id = ntnrc_uid++ + if(GLOB.ntnet_global) + GLOB.ntnet_global.chat_channels.Add(src) ..() /datum/ntnet_conversation/Destroy() - if(ntnet_global) - ntnet_global.chat_channels.Remove(src) + if(GLOB.ntnet_global) + GLOB.ntnet_global.chat_channels.Remove(src) return ..() /datum/ntnet_conversation/proc/add_message(message, username) diff --git a/code/modules/modular_computers/NTNet/NTNet.dm b/code/modules/modular_computers/NTNet/NTNet.dm index 6816a402c7..033b32d6af 100644 --- a/code/modules/modular_computers/NTNet/NTNet.dm +++ b/code/modules/modular_computers/NTNet/NTNet.dm @@ -1,4 +1,4 @@ -var/global/datum/ntnet/ntnet_global = new() +GLOBAL_DATUM_INIT(ntnet_global, /datum/ntnet, new) // This is the NTNet datum. There can be only one NTNet datum in game at once. Modular computers read data from this. @@ -26,9 +26,9 @@ var/global/datum/ntnet/ntnet_global = new() // If new NTNet datum is spawned, it replaces the old one. /datum/ntnet/New() - if(ntnet_global && (ntnet_global != src)) - ntnet_global = src // There can be only one. - for(var/obj/machinery/ntnet_relay/R in machines) + if(GLOB.ntnet_global && (GLOB.ntnet_global != src)) + GLOB.ntnet_global = src // There can be only one. + for(var/obj/machinery/ntnet_relay/R in GLOB.machines) relays.Add(R) R.NTNet = src build_software_lists() diff --git a/code/modules/modular_computers/NTNet/NTNet_relay.dm b/code/modules/modular_computers/NTNet/NTNet_relay.dm index 9269459308..9a864331ed 100644 --- a/code/modules/modular_computers/NTNet/NTNet_relay.dm +++ b/code/modules/modular_computers/NTNet/NTNet_relay.dm @@ -51,15 +51,15 @@ if((dos_overload > dos_capacity) && !dos_failure) dos_failure = 1 update_icon() - ntnet_global.add_log("Quantum relay switched from normal operation mode to overload recovery mode.") + GLOB.ntnet_global.add_log("Quantum relay switched from normal operation mode to overload recovery mode.") // If the DoS buffer reaches 0 again, restart. if((dos_overload == 0) && dos_failure) dos_failure = 0 update_icon() - ntnet_global.add_log("Quantum relay switched from overload recovery mode to normal operation mode.") + GLOB.ntnet_global.add_log("Quantum relay switched from overload recovery mode to normal operation mode.") ..() -/obj/machinery/ntnet_relay/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) +/obj/machinery/ntnet_relay/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) @@ -85,10 +85,10 @@ dos_overload = 0 dos_failure = 0 update_icon() - ntnet_global.add_log("Quantum relay manually restarted from overload recovery mode to normal operation mode.") + GLOB.ntnet_global.add_log("Quantum relay manually restarted from overload recovery mode to normal operation mode.") if("toggle") enabled = !enabled - ntnet_global.add_log("Quantum relay manually [enabled ? "enabled" : "disabled"].") + GLOB.ntnet_global.add_log("Quantum relay manually [enabled ? "enabled" : "disabled"].") update_icon() @@ -102,16 +102,16 @@ var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/ntnet_relay(null) B.apply_default_parts(src) - if(ntnet_global) - ntnet_global.relays.Add(src) - NTNet = ntnet_global - ntnet_global.add_log("New quantum relay activated. Current amount of linked relays: [NTNet.relays.len]") + if(GLOB.ntnet_global) + GLOB.ntnet_global.relays.Add(src) + NTNet = GLOB.ntnet_global + GLOB.ntnet_global.add_log("New quantum relay activated. Current amount of linked relays: [NTNet.relays.len]") ..() /obj/machinery/ntnet_relay/Destroy() - if(ntnet_global) - ntnet_global.relays.Remove(src) - ntnet_global.add_log("Quantum relay connection severed. Current amount of linked relays: [NTNet.relays.len]") + if(GLOB.ntnet_global) + GLOB.ntnet_global.relays.Remove(src) + GLOB.ntnet_global.add_log("Quantum relay connection severed. Current amount of linked relays: [NTNet.relays.len]") NTNet = null for(var/datum/computer_file/program/ntnet_dos/D in dos_sources) diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index de6c2b74ca..32513d0405 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -357,7 +357,7 @@ if(!get_ntnet_status()) return FALSE var/obj/item/weapon/computer_hardware/network_card/network_card = all_components[MC_NET] - return ntnet_global.add_log(text, network_card) + return GLOB.ntnet_global.add_log(text, network_card) /obj/item/device/modular_computer/proc/shutdown_computer(loud = 1) kill_program(forced = TRUE) diff --git a/code/modules/modular_computers/computers/item/computer_power.dm b/code/modules/modular_computers/computers/item/computer_power.dm index c5aab99ce5..c03570c335 100644 --- a/code/modules/modular_computers/computers/item/computer_power.dm +++ b/code/modules/modular_computers/computers/item/computer_power.dm @@ -13,10 +13,10 @@ if(battery_module && battery_module.battery && battery_module.battery.charge) var/obj/item/weapon/stock_parts/cell/cell = battery_module.battery - if(cell.use(amount * CELLRATE)) + if(cell.use(amount * GLOB.CELLRATE)) return TRUE else // Discharge the cell anyway. - cell.use(min(amount*CELLRATE, cell.charge)) + cell.use(min(amount*GLOB.CELLRATE, cell.charge)) return FALSE return FALSE diff --git a/code/modules/modular_computers/computers/item/computer_ui.dm b/code/modules/modular_computers/computers/item/computer_ui.dm index 304a9877c6..c574b759cb 100644 --- a/code/modules/modular_computers/computers/item/computer_ui.dm +++ b/code/modules/modular_computers/computers/item/computer_ui.dm @@ -1,5 +1,5 @@ // Operates TGUI -/obj/item/device/modular_computer/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) +/obj/item/device/modular_computer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) if(!enabled) if(ui) ui.close() diff --git a/code/modules/modular_computers/computers/machinery/modular_computer.dm b/code/modules/modular_computers/computers/machinery/modular_computer.dm index 2a9d58f485..b7b258d1ef 100644 --- a/code/modules/modular_computers/computers/machinery/modular_computer.dm +++ b/code/modules/modular_computers/computers/machinery/modular_computer.dm @@ -1,6 +1,3 @@ -// Global var to track modular computers -var/list/global_modular_computers = list() - // Modular Computer - device that runs various programs and operates with hardware // DO NOT SPAWN THIS TYPE. Use /laptop/ or /console/ instead. /obj/machinery/modular_computer @@ -34,7 +31,6 @@ var/list/global_modular_computers = list() ..() cpu = new(src) cpu.physical = src - global_modular_computers.Add(src) /obj/machinery/modular_computer/Destroy() if(cpu) diff --git a/code/modules/modular_computers/file_system/computer_file.dm b/code/modules/modular_computers/file_system/computer_file.dm index 15ae12a285..ce20cc450c 100644 --- a/code/modules/modular_computers/file_system/computer_file.dm +++ b/code/modules/modular_computers/file_system/computer_file.dm @@ -1,5 +1,3 @@ -var/global/file_uid = 0 - /datum/computer_file var/filename = "NewFile" // Placeholder. No spacebars var/filetype = "XXX" // File full names are [filename].[filetype] so like NewFile.XXX in this case @@ -8,11 +6,11 @@ var/global/file_uid = 0 var/unsendable = 0 // Whether the file may be sent to someone via NTNet transfer or other means. var/undeletable = 0 // Whether the file may be deleted. Setting to 1 prevents deletion/renaming/etc. var/uid // UID of this file + var/static/file_uid = 0 /datum/computer_file/New() ..() - uid = file_uid - file_uid++ + uid = file_uid++ /datum/computer_file/Destroy() if(!holder) @@ -23,7 +21,7 @@ var/global/file_uid = 0 if(holder.holder && holder.holder.active_program == src) holder.holder.kill_program(forced = TRUE) holder = null - ..() + return ..() // Returns independent copy of this file. /datum/computer_file/proc/clone(rename = 0) diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm index 51afc6371d..3935112e7b 100644 --- a/code/modules/modular_computers/file_system/program.dm +++ b/code/modules/modular_computers/file_system/program.dm @@ -144,7 +144,7 @@ // This is called every tick when the program is enabled. Ensure you do parent call if you override it. If parent returns 1 continue with UI initialisation. -/datum/computer_file/program/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/computer_file/program/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) if(program_state != PROGRAM_STATE_ACTIVE) // Our program was closed. Close the ui if it exists. return computer.ui_interact(user) return 1 diff --git a/code/modules/modular_computers/file_system/programs/airestorer.dm b/code/modules/modular_computers/file_system/programs/airestorer.dm index 5c9917b4f5..96a4b4ec2b 100644 --- a/code/modules/modular_computers/file_system/programs/airestorer.dm +++ b/code/modules/modular_computers/file_system/programs/airestorer.dm @@ -8,7 +8,7 @@ size = 12 requires_ntnet = 0 usage_flags = PROGRAM_CONSOLE - transfer_access = access_heads + transfer_access = GLOB.access_heads available_on_ntnet = 1 var/restoring = FALSE @@ -114,7 +114,7 @@ return data -/datum/computer_file/program/aidiag/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/computer_file/program/aidiag/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "ai_restorer", "Integrity Restorer", 600, 400, master_ui, state) diff --git a/code/modules/modular_computers/file_system/programs/alarm.dm b/code/modules/modular_computers/file_system/programs/alarm.dm index 0d15e23069..9bfb9a5e7b 100644 --- a/code/modules/modular_computers/file_system/programs/alarm.dm +++ b/code/modules/modular_computers/file_system/programs/alarm.dm @@ -31,7 +31,7 @@ /datum/computer_file/program/alarm_monitor/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/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "station_alert_prog", "Alarm Monitoring", 300, 500, master_ui, state) @@ -103,8 +103,8 @@ /datum/computer_file/program/alarm_monitor/run_program(mob/user) . = ..(user) - alarmdisplay += src + GLOB.alarmdisplay += src /datum/computer_file/program/alarm_monitor/kill_program(forced = FALSE) - alarmdisplay -= src + GLOB.alarmdisplay -= src ..() \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm b/code/modules/modular_computers/file_system/programs/antagonist/dos.dm index 3d54938ba1..ee1498fd79 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/dos.dm @@ -37,7 +37,7 @@ ..() -/datum/computer_file/program/ntnet_dos/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/computer_file/program/ntnet_dos/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) @@ -53,7 +53,7 @@ return 1 switch(action) if("PRG_target_relay") - for(var/obj/machinery/ntnet_relay/R in ntnet_global.relays) + for(var/obj/machinery/ntnet_relay/R in GLOB.ntnet_global.relays) if("[R.uid]" == params["targid"]) target = R return 1 @@ -68,14 +68,14 @@ if(target) executed = 1 target.dos_sources.Add(src) - if(ntnet_global.intrusion_detection_enabled) + if(GLOB.ntnet_global.intrusion_detection_enabled) var/obj/item/weapon/computer_hardware/network_card/network_card = computer.all_components[MC_NET] - ntnet_global.add_log("IDS WARNING - Excess traffic flood targeting relay [target.uid] detected from device: [network_card.get_network_tag()]") - ntnet_global.intrusion_detection_alarm = 1 + GLOB.ntnet_global.add_log("IDS WARNING - Excess traffic flood targeting relay [target.uid] detected from device: [network_card.get_network_tag()]") + GLOB.ntnet_global.intrusion_detection_alarm = 1 return 1 /datum/computer_file/program/ntnet_dos/ui_data(mob/user) - if(!ntnet_global) + if(!GLOB.ntnet_global) return var/list/data = list() @@ -100,7 +100,7 @@ data["dos_strings"] += list(list("nums" = string)) else data["relays"] = list() - for(var/obj/machinery/ntnet_relay/R in ntnet_global.relays) + for(var/obj/machinery/ntnet_relay/R in GLOB.ntnet_global.relays) data["relays"] += list(list("id" = R.uid)) data["focus"] = target ? target.uid : null diff --git a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm index 4278159d1a..ea6a36b549 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm @@ -58,7 +58,7 @@ temp.armed = armed return temp -/datum/computer_file/program/revelation/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/computer_file/program/revelation/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) diff --git a/code/modules/modular_computers/file_system/programs/card.dm b/code/modules/modular_computers/file_system/programs/card.dm index 792c79f463..b959ced6cf 100644 --- a/code/modules/modular_computers/file_system/programs/card.dm +++ b/code/modules/modular_computers/file_system/programs/card.dm @@ -3,7 +3,7 @@ filedesc = "ID card modification program" program_icon_state = "id" extended_desc = "Program for programming employee ID cards to access parts of the station." - transfer_access = access_change_ids + transfer_access = GLOB.access_change_ids requires_ntnet = 0 size = 8 var/mod_mode = 1 @@ -52,8 +52,8 @@ /datum/computer_file/program/card_mod/proc/can_open_job(datum/job/job) if(job) if(!job_blacklisted(job.title)) - if((job.total_positions <= player_list.len * (max_relative_positions / 100))) - var/delta = (world.time / 10) - time_last_changed_position + if((job.total_positions <= GLOB.player_list.len * (max_relative_positions / 100))) + var/delta = (world.time / 10) - GLOB.time_last_changed_position if((change_position_cooldown < delta) || (opened_positions[job.title] < 0)) return 1 return -2 @@ -65,7 +65,7 @@ if(job) if(!job_blacklisted(job.title)) if(job.total_positions > job.current_positions) - var/delta = (world.time / 10) - time_last_changed_position + var/delta = (world.time / 10) - GLOB.time_last_changed_position if((change_position_cooldown < delta) || (opened_positions[job.title] > 0)) return 1 return -2 @@ -73,7 +73,7 @@ return 0 -/datum/computer_file/program/card_mod/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/computer_file/program/card_mod/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) @@ -161,7 +161,7 @@ else var/contents = {"

    Crew Manifest


    - [data_core ? data_core.get_manifest(0) : ""] + [GLOB.data_core ? GLOB.data_core.get_manifest(0) : ""] "} if(!printer.print_text(contents,text("crew manifest ([])", worldtime2text()))) to_chat(usr, "Hardware error: Printer was unable to print the file. It may be out of paper.") @@ -174,7 +174,7 @@ switch(select) if("id") if(id_card) - data_core.manifest_modify(id_card.registered_name, id_card.assignment) + GLOB.data_core.manifest_modify(id_card.registered_name, id_card.assignment) card_slot.try_eject(1, user) else var/obj/item/I = usr.get_active_held_item() @@ -186,7 +186,7 @@ if("auth") if(auth_card) if(id_card) - data_core.manifest_modify(id_card.registered_name, id_card.assignment) + GLOB.data_core.manifest_modify(id_card.registered_name, id_card.assignment) head_subordinates = null region_access = null authenticated = 0 @@ -260,7 +260,7 @@ if(can_open_job(j) != 1) return 0 if(opened_positions[edit_job_target] >= 0) - time_last_changed_position = world.time / 10 + GLOB.time_last_changed_position = world.time / 10 j.total_positions++ opened_positions[edit_job_target]++ if("PRG_close_job") @@ -272,7 +272,7 @@ return 0 //Allow instant closing without cooldown if a position has been opened before if(opened_positions[edit_job_target] <= 0) - time_last_changed_position = world.time / 10 + GLOB.time_last_changed_position = world.time / 10 j.total_positions-- opened_positions[edit_job_target]-- if("PRG_regsel") @@ -344,7 +344,7 @@ if(!mod_mode) data["manifest"] = list() var/list/crew = list() - for(var/datum/data/record/t in sortRecord(data_core.general)) + for(var/datum/data/record/t in sortRecord(GLOB.data_core.general)) crew.Add(list(list( "name" = t.fields["name"], "rank" = t.fields["rank"]))) @@ -376,12 +376,12 @@ data["id_name"] = id_card ? strip_html_simple(id_card.name) : "-----" if(show_assignments) - data["engineering_jobs"] = format_jobs(engineering_positions) - data["medical_jobs"] = format_jobs(medical_positions) - data["science_jobs"] = format_jobs(science_positions) - data["security_jobs"] = format_jobs(security_positions) - data["cargo_jobs"] = format_jobs(supply_positions) - data["civilian_jobs"] = format_jobs(civilian_positions) + data["engineering_jobs"] = format_jobs(GLOB.engineering_positions) + data["medical_jobs"] = format_jobs(GLOB.medical_positions) + data["science_jobs"] = format_jobs(GLOB.science_positions) + data["security_jobs"] = format_jobs(GLOB.security_positions) + data["cargo_jobs"] = format_jobs(GLOB.supply_positions) + data["civilian_jobs"] = format_jobs(GLOB.civilian_positions) data["centcom_jobs"] = format_jobs(get_all_centcom_jobs()) @@ -435,7 +435,7 @@ out = "[open ? "Open Position" : "Close Position"]" enable = 1 else if(can_change == -2) - var/time_to_wait = round(change_position_cooldown - ((world.time / 10) - time_last_changed_position), 1) + var/time_to_wait = round(change_position_cooldown - ((world.time / 10) - GLOB.time_last_changed_position), 1) var/mins = round(time_to_wait / 60) var/seconds = time_to_wait - (60*mins) out = "Cooldown ongoing: [mins]:[(seconds < 10) ? "0[seconds]" : "[seconds]"]" @@ -457,20 +457,20 @@ authenticated = 1 return 1 else - if((access_hop in auth_card.access) && ((target_dept==1) || !target_dept)) + if((GLOB.access_hop in auth_card.access) && ((target_dept==1) || !target_dept)) region_access |= 1 region_access |= 6 get_subordinates("Head of Personnel") - if((access_hos in auth_card.access) && ((target_dept==2) || !target_dept)) + if((GLOB.access_hos in auth_card.access) && ((target_dept==2) || !target_dept)) region_access |= 2 get_subordinates("Head of Security") - if((access_cmo in auth_card.access) && ((target_dept==3) || !target_dept)) + if((GLOB.access_cmo in auth_card.access) && ((target_dept==3) || !target_dept)) region_access |= 3 get_subordinates("Chief Medical Officer") - if((access_rd in auth_card.access) && ((target_dept==4) || !target_dept)) + if((GLOB.access_rd in auth_card.access) && ((target_dept==4) || !target_dept)) region_access |= 4 get_subordinates("Research Director") - if((access_ce in auth_card.access) && ((target_dept==5) || !target_dept)) + if((GLOB.access_ce in auth_card.access) && ((target_dept==5) || !target_dept)) region_access |= 5 get_subordinates("Chief Engineer") if(region_access.len) diff --git a/code/modules/modular_computers/file_system/programs/configurator.dm b/code/modules/modular_computers/file_system/programs/configurator.dm index 57348d2744..dc8b5ac97d 100644 --- a/code/modules/modular_computers/file_system/programs/configurator.dm +++ b/code/modules/modular_computers/file_system/programs/configurator.dm @@ -15,7 +15,7 @@ var/obj/item/device/modular_computer/movable = null -/datum/computer_file/program/computerconfig/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/computer_file/program/computerconfig/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) diff --git a/code/modules/modular_computers/file_system/programs/file_browser.dm b/code/modules/modular_computers/file_system/programs/file_browser.dm index c2cbd4cf5e..0271b4ad8e 100644 --- a/code/modules/modular_computers/file_system/programs/file_browser.dm +++ b/code/modules/modular_computers/file_system/programs/file_browser.dm @@ -144,7 +144,7 @@ t = replacetext(t, "\[u\]", "") t = replacetext(t, "\[/u\]", "") t = replacetext(t, "\[time\]", "[worldtime2text()]") - t = replacetext(t, "\[date\]", "[time2text(world.realtime, "MMM DD")] [year_integer+540]") + t = replacetext(t, "\[date\]", "[time2text(world.realtime, "MMM DD")] [GLOB.year_integer+540]") t = replacetext(t, "\[large\]", "") t = replacetext(t, "\[/large\]", "") t = replacetext(t, "\[h1\]", "

    ") @@ -176,7 +176,7 @@ t = parse_tags(t) return t -/datum/computer_file/program/filemanager/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/computer_file/program/filemanager/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) diff --git a/code/modules/modular_computers/file_system/programs/ntdownloader.dm b/code/modules/modular_computers/file_system/programs/ntdownloader.dm index 01d5dd3d91..d9255b17ee 100644 --- a/code/modules/modular_computers/file_system/programs/ntdownloader.dm +++ b/code/modules/modular_computers/file_system/programs/ntdownloader.dm @@ -21,7 +21,7 @@ if(downloaded_file) return 0 - var/datum/computer_file/program/PRG = ntnet_global.find_ntnet_file_by_name(filename) + var/datum/computer_file/program/PRG = GLOB.ntnet_global.find_ntnet_file_by_name(filename) if(!PRG || !istype(PRG)) return 0 @@ -37,10 +37,10 @@ ui_header = "downloader_running.gif" - if(PRG in ntnet_global.available_station_software) + if(PRG in GLOB.ntnet_global.available_station_software) generate_network_log("Began downloading file [PRG.filename].[PRG.filetype] from NTNet Software Repository.") hacked_download = 0 - else if(PRG in ntnet_global.available_antag_software) + else if(PRG in GLOB.ntnet_global.available_antag_software) generate_network_log("Began downloading file **ENCRYPTED**.[PRG.filetype] from unspecified server.") hacked_download = 1 else @@ -103,7 +103,7 @@ return 1 return 0 -/datum/computer_file/program/ntnetdownload/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/computer_file/program/ntnetdownload/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) @@ -136,7 +136,7 @@ data["disk_size"] = hard_drive.max_capacity data["disk_used"] = hard_drive.used_capacity var/list/all_entries[0] - for(var/A in ntnet_global.available_station_software) + for(var/A in GLOB.ntnet_global.available_station_software) var/datum/computer_file/program/P = A // Only those programs our user can run will show in the list if(!P.can_run(user,transfer = 1)) @@ -151,7 +151,7 @@ data["hackedavailable"] = 0 if(computer.emagged) // If we are running on emagged computer we have access to some "bonus" software var/list/hacked_programs[0] - for(var/S in ntnet_global.available_antag_software) + for(var/S in GLOB.ntnet_global.available_antag_software) var/datum/computer_file/program/P = S data["hackedavailable"] = 1 hacked_programs.Add(list(list( diff --git a/code/modules/modular_computers/file_system/programs/ntmonitor.dm b/code/modules/modular_computers/file_system/programs/ntmonitor.dm index e12299b250..6661bceac4 100644 --- a/code/modules/modular_computers/file_system/programs/ntmonitor.dm +++ b/code/modules/modular_computers/file_system/programs/ntmonitor.dm @@ -5,10 +5,10 @@ extended_desc = "This program monitors stationwide NTNet network, provides access to logging systems, and allows for configuration changes" size = 12 requires_ntnet = 1 - required_access = access_network //Network control is a more secure program. + required_access = GLOB.access_network //Network control is a more secure program. available_on_ntnet = 1 -/datum/computer_file/program/ntnetmonitor/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/computer_file/program/ntnetmonitor/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) @@ -28,22 +28,22 @@ switch(action) if("resetIDS") . = 1 - if(ntnet_global) - ntnet_global.resetIDS() + if(GLOB.ntnet_global) + GLOB.ntnet_global.resetIDS() return 1 if("toggleIDS") . = 1 - if(ntnet_global) - ntnet_global.toggleIDS() + if(GLOB.ntnet_global) + GLOB.ntnet_global.toggleIDS() return 1 if("toggleWireless") . = 1 - if(!ntnet_global) + if(!GLOB.ntnet_global) return 1 // NTNet is disabled. Enabling can be done without user prompt - if(ntnet_global.setting_disabled) - ntnet_global.setting_disabled = 0 + if(GLOB.ntnet_global.setting_disabled) + GLOB.ntnet_global.setting_disabled = 0 return 1 // NTNet is enabled and user is about to shut it down. Let's ask them if they really want to do it, as wirelessly connected computers won't connect without NTNet being enabled (which may prevent people from turning it back on) @@ -52,43 +52,43 @@ return 1 var/response = alert(user, "Really disable NTNet wireless? If your computer is connected wirelessly you won't be able to turn it back on! This will affect all connected wireless devices.", "NTNet shutdown", "Yes", "No") if(response == "Yes") - ntnet_global.setting_disabled = 1 + GLOB.ntnet_global.setting_disabled = 1 return 1 if("purgelogs") . = 1 - if(ntnet_global) - ntnet_global.purge_logs() + if(GLOB.ntnet_global) + GLOB.ntnet_global.purge_logs() if("updatemaxlogs") . = 1 var/mob/user = usr var/logcount = text2num(input(user,"Enter amount of logs to keep in memory ([MIN_NTNET_LOGS]-[MAX_NTNET_LOGS]):")) - if(ntnet_global) - ntnet_global.update_max_log_count(logcount) + if(GLOB.ntnet_global) + GLOB.ntnet_global.update_max_log_count(logcount) if("toggle_function") . = 1 - if(!ntnet_global) + if(!GLOB.ntnet_global) return 1 - ntnet_global.toggle_function(text2num(params["id"])) + GLOB.ntnet_global.toggle_function(text2num(params["id"])) /datum/computer_file/program/ntnetmonitor/ui_data(mob/user) - if(!ntnet_global) + if(!GLOB.ntnet_global) return var/list/data = get_header_data() - data["ntnetstatus"] = ntnet_global.check_function() - data["ntnetrelays"] = ntnet_global.relays.len - data["idsstatus"] = ntnet_global.intrusion_detection_enabled - data["idsalarm"] = ntnet_global.intrusion_detection_alarm + data["ntnetstatus"] = GLOB.ntnet_global.check_function() + data["ntnetrelays"] = GLOB.ntnet_global.relays.len + data["idsstatus"] = GLOB.ntnet_global.intrusion_detection_enabled + data["idsalarm"] = GLOB.ntnet_global.intrusion_detection_alarm - data["config_softwaredownload"] = ntnet_global.setting_softwaredownload - data["config_peertopeer"] = ntnet_global.setting_peertopeer - data["config_communication"] = ntnet_global.setting_communication - data["config_systemcontrol"] = ntnet_global.setting_systemcontrol + data["config_softwaredownload"] = GLOB.ntnet_global.setting_softwaredownload + data["config_peertopeer"] = GLOB.ntnet_global.setting_peertopeer + data["config_communication"] = GLOB.ntnet_global.setting_communication + data["config_systemcontrol"] = GLOB.ntnet_global.setting_systemcontrol data["ntnetlogs"] = list() - for(var/i in ntnet_global.logs) + for(var/i in GLOB.ntnet_global.logs) data["ntnetlogs"] += list(list("entry" = i)) - data["ntnetmaxlogs"] = ntnet_global.setting_maxlogcount + data["ntnetmaxlogs"] = GLOB.ntnet_global.setting_maxlogcount return data \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/programs/ntnrc_client.dm b/code/modules/modular_computers/file_system/programs/ntnrc_client.dm index 1b8ff88767..b4c7884fe7 100644 --- a/code/modules/modular_computers/file_system/programs/ntnrc_client.dm +++ b/code/modules/modular_computers/file_system/programs/ntnrc_client.dm @@ -37,7 +37,7 @@ if("PRG_joinchannel") . = 1 var/datum/ntnet_conversation/C - for(var/datum/ntnet_conversation/chan in ntnet_global.chat_channels) + for(var/datum/ntnet_conversation/chan in GLOB.ntnet_global.chat_channels) if(chan.id == text2num(params["id"])) C = chan break @@ -83,7 +83,7 @@ channel = null return 1 var/mob/living/user = usr - if(can_run(usr, 1, access_network)) + if(can_run(usr, 1, GLOB.access_network)) if(channel) var/response = alert(user, "Really engage admin-mode? You will be disconnected from your current channel!", "NTNRC Admin mode", "Yes", "No") if(response == "Yes") @@ -180,7 +180,7 @@ channel = null ..() -/datum/computer_file/program/chatclient/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/computer_file/program/chatclient/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) @@ -196,7 +196,7 @@ /datum/computer_file/program/chatclient/ui_data(mob/user) - if(!ntnet_global || !ntnet_global.chat_channels) + if(!GLOB.ntnet_global || !GLOB.ntnet_global.chat_channels) return var/list/data = list() @@ -225,7 +225,7 @@ else // Channel selection screen var/list/all_channels[0] - for(var/C in ntnet_global.chat_channels) + for(var/C in GLOB.ntnet_global.chat_channels) var/datum/ntnet_conversation/conv = C if(conv && conv.title) all_channels.Add(list(list( diff --git a/code/modules/modular_computers/file_system/programs/nttransfer.dm b/code/modules/modular_computers/file_system/programs/nttransfer.dm index 7d42bb8212..0d46755f6b 100644 --- a/code/modules/modular_computers/file_system/programs/nttransfer.dm +++ b/code/modules/modular_computers/file_system/programs/nttransfer.dm @@ -1,5 +1,3 @@ -var/global/nttransfer_uid = 0 - /datum/computer_file/program/nttransfer filename = "nttransfer" filedesc = "NTNet P2P Transfer Client" @@ -22,10 +20,10 @@ var/global/nttransfer_uid = 0 var/actual_netspeed = 0 // Displayed in the UI, this is the actual transfer speed. var/unique_token // UID of this program var/upload_menu = 0 // Whether we show the program list and upload menu + var/static/nttransfer_uid = 0 /datum/computer_file/program/nttransfer/New() - unique_token = nttransfer_uid - nttransfer_uid++ + unique_token = nttransfer_uid++ ..() /datum/computer_file/program/nttransfer/process_tick() @@ -85,7 +83,7 @@ var/global/nttransfer_uid = 0 download_completion = 0 -/datum/computer_file/program/nttransfer/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/computer_file/program/nttransfer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) @@ -103,7 +101,7 @@ var/global/nttransfer_uid = 0 return 1 switch(action) if("PRG_downloadfile") - for(var/datum/computer_file/program/nttransfer/P in ntnet_global.fileservers) + for(var/datum/computer_file/program/nttransfer/P in GLOB.ntnet_global.fileservers) if("[P.unique_token]" == params["id"]) remote = P break @@ -121,8 +119,8 @@ var/global/nttransfer_uid = 0 error = "" upload_menu = 0 finalize_download() - if(src in ntnet_global.fileservers) - ntnet_global.fileservers.Remove(src) + if(src in GLOB.ntnet_global.fileservers) + GLOB.ntnet_global.fileservers.Remove(src) for(var/datum/computer_file/program/nttransfer/T in connected_clients) T.crash_download("Remote server has forcibly closed the connection") provided_file = null @@ -148,7 +146,7 @@ var/global/nttransfer_uid = 0 if(!P.can_run(usr,transfer = 1)) error = "Access Error: Insufficient rights to upload file." provided_file = F - ntnet_global.fileservers.Add(src) + GLOB.ntnet_global.fileservers.Add(src) return error = "I/O Error: Unable to locate file on hard drive." return 1 @@ -186,7 +184,7 @@ var/global/nttransfer_uid = 0 data["upload_filelist"] = all_files else var/list/all_servers[0] - for(var/datum/computer_file/program/nttransfer/P in ntnet_global.fileservers) + for(var/datum/computer_file/program/nttransfer/P in GLOB.ntnet_global.fileservers) all_servers.Add(list(list( "uid" = P.unique_token, "filename" = "[P.provided_file.filename].[P.provided_file.filetype]", diff --git a/code/modules/modular_computers/file_system/programs/powermonitor.dm b/code/modules/modular_computers/file_system/programs/powermonitor.dm index 316b90ec00..b910325642 100644 --- a/code/modules/modular_computers/file_system/programs/powermonitor.dm +++ b/code/modules/modular_computers/file_system/programs/powermonitor.dm @@ -6,7 +6,7 @@ program_icon_state = "power_monitor" extended_desc = "This program connects to sensors around the station to provide information about electrical systems" ui_header = "power_norm.gif" - transfer_access = access_engine + transfer_access = GLOB.access_engine usage_flags = PROGRAM_CONSOLE requires_ntnet = 0 network_destination = "power monitoring system" @@ -53,7 +53,7 @@ demand.Cut(1, 2) /datum/computer_file/program/power_monitor/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/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) @@ -81,7 +81,7 @@ if(istype(A)) data["areas"] += list(list( "name" = A.area.name, - "charge" = A.cell.percent(), + "charge" = A.cell ? A.cell.percent() : 0, "load" = A.lastused_total, "charging" = A.charging, "eqp" = A.equipment, diff --git a/code/modules/modular_computers/hardware/network_card.dm b/code/modules/modular_computers/hardware/network_card.dm index 554a5084a5..19e30cd42d 100644 --- a/code/modules/modular_computers/hardware/network_card.dm +++ b/code/modules/modular_computers/hardware/network_card.dm @@ -1,5 +1,3 @@ -var/global/ntnet_card_uid = 1 - /obj/item/weapon/computer_hardware/network_card name = "network card" desc = "A basic wireless network card for usage with standard NTNet frequencies." @@ -12,6 +10,7 @@ var/global/ntnet_card_uid = 1 var/ethernet = 0 // Hard-wired, therefore always on, ignores NTNet wireless checks. malfunction_probability = 1 device_type = MC_NET + var/global/ntnet_card_uid = 1 /obj/item/weapon/computer_hardware/network_card/diagnostics(var/mob/user) ..() @@ -25,9 +24,8 @@ var/global/ntnet_card_uid = 1 to_chat(user, "OpenEth (Physical Connection) - Physical network connection port") /obj/item/weapon/computer_hardware/network_card/New(var/l) - ..(l) - identification_id = ntnet_card_uid - ntnet_card_uid++ + ..() + identification_id = ntnet_card_uid++ // Returns a string identifier of this network card /obj/item/weapon/computer_hardware/network_card/proc/get_network_tag() @@ -44,7 +42,7 @@ var/global/ntnet_card_uid = 1 if(ethernet) // Computer is connected via wired connection. return 3 - if(!ntnet_global || !ntnet_global.check_function(specific_action)) // NTNet is down and we are not connected via wired connection. No signal. + if(!GLOB.ntnet_global || !GLOB.ntnet_global.check_function(specific_action)) // NTNet is down and we are not connected via wired connection. No signal. return 0 if(holder) diff --git a/code/modules/modular_computers/hardware/recharger.dm b/code/modules/modular_computers/hardware/recharger.dm index 85431aaabf..67582334ac 100644 --- a/code/modules/modular_computers/hardware/recharger.dm +++ b/code/modules/modular_computers/hardware/recharger.dm @@ -20,7 +20,7 @@ return if(use_power(charge_rate, charging=1)) - holder.give_power(charge_rate * CELLRATE) + holder.give_power(charge_rate * GLOB.CELLRATE) /obj/item/weapon/computer_hardware/recharger/APC diff --git a/code/modules/modular_computers/laptop_vendor.dm b/code/modules/modular_computers/laptop_vendor.dm index abbfc5aaba..cd8219e044 100644 --- a/code/modules/modular_computers/laptop_vendor.dm +++ b/code/modules/modular_computers/laptop_vendor.dm @@ -225,7 +225,7 @@ /obj/machinery/lapvend/attack_hand(mob/user) ui_interact(user) -/obj/machinery/lapvend/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) +/obj/machinery/lapvend/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) if(stat & (BROKEN | NOPOWER | MAINT)) if(ui) ui.close() diff --git a/code/modules/ninja/admin_ninja_verbs.dm b/code/modules/ninja/admin_ninja_verbs.dm index cd050f412b..7338d9bb0b 100644 --- a/code/modules/ninja/admin_ninja_verbs.dm +++ b/code/modules/ninja/admin_ninja_verbs.dm @@ -8,11 +8,11 @@ Contents: //ADMIN CREATE NINJA (From Player) -/client/proc/cmd_admin_ninjafy(mob/living/carbon/human/H in player_list) +/client/proc/cmd_admin_ninjafy(mob/living/carbon/human/H in GLOB.player_list) set category = null set name = "Make Space Ninja" - if (!ticker.mode) + if (!SSticker.mode) alert("Wait until the game starts") return @@ -30,7 +30,7 @@ Contents: H.wear_suit:randomize_param() spawn(0) H.wear_suit:ninitialize(10,H) - ticker.mode.update_ninja_icons_added(H) + SSticker.mode.update_ninja_icons_added(H) //ADMIN CREATE NINJA (From Ghost) @@ -43,13 +43,13 @@ Contents: if(!holder) to_chat(src, "Only administrators may use this command.") return - if(!ticker.mode) + if(!SSticker.mode) alert("The game hasn't started yet!") return if(alert("Are you sure you want to send in a space ninja?",,"Yes","No")=="No") return - var/client/C = input("Pick character to spawn as the Space Ninja", "Key", "") as null|anything in clients + var/client/C = input("Pick character to spawn as the Space Ninja", "Key", "") as null|anything in GLOB.clients if(!C) return diff --git a/code/modules/ninja/ninja_event.dm b/code/modules/ninja/ninja_event.dm index b8ff3e8206..e83f3a17e2 100644 --- a/code/modules/ninja/ninja_event.dm +++ b/code/modules/ninja/ninja_event.dm @@ -39,7 +39,7 @@ Contents: //selecting a spawn_loc if(!spawn_loc) var/list/spawn_locs = list() - for(var/obj/effect/landmark/L in landmarks_list) + for(var/obj/effect/landmark/L in GLOB.landmarks_list) if(isturf(L.loc)) switch(L.name) if("ninjaspawn","carpspawn") @@ -64,12 +64,12 @@ Contents: //generate objectives - You'll generally get 6 objectives (Ninja is meant to be hardmode!) var/list/possible_targets = list() - for(var/datum/mind/M in ticker.minds) + for(var/datum/mind/M in SSticker.minds) if(M.current && M.current.stat != DEAD) if(ishuman(M.current)) if(M.special_role) possible_targets[M] = 0 //bad-guy - else if(M.assigned_role in command_positions) + else if(M.assigned_role in GLOB.command_positions) possible_targets[M] = 1 //good-guy var/list/objectives = list(1,2,3,4) @@ -155,7 +155,7 @@ Contents: return Ninja << sound('sound/effects/ninja_greeting.ogg') //so ninja you probably wouldn't even know if you were made one - ticker.mode.update_ninja_icons_added(Ninja) + SSticker.mode.update_ninja_icons_added(Ninja) spawned_mobs += Ninja message_admins("[key_name_admin(Ninja)] has been made into a ninja by an event.") log_game("[key_name(Ninja)] was spawned as a ninja by an event.") @@ -168,7 +168,7 @@ Contents: /proc/create_space_ninja(spawn_loc) var/mob/living/carbon/human/new_ninja = new(spawn_loc) var/datum/preferences/A = new()//Randomize appearance for the ninja. - A.real_name = "[pick(ninja_titles)] [pick(ninja_names)]" + A.real_name = "[pick(GLOB.ninja_titles)] [pick(GLOB.ninja_names)]" A.copy_to(new_ninja) new_ninja.dna.update_dna_identity() new_ninja.equip_space_ninja() @@ -179,7 +179,7 @@ Contents: var/datum/mind/Mind = new /datum/mind(key) Mind.assigned_role = "Space Ninja" Mind.special_role = "Space Ninja" - ticker.mode.traitors |= Mind //Adds them to current traitor list. Which is really the extra antagonist list. + SSticker.mode.traitors |= Mind //Adds them to current traitor list. Which is really the extra antagonist list. return Mind @@ -216,11 +216,11 @@ Contents: return 1 /datum/game_mode/proc/update_ninja_icons_added(var/mob/living/carbon/human/ninja) - var/datum/atom_hud/antag/ninjahud = huds[ANTAG_HUD_NINJA] + var/datum/atom_hud/antag/ninjahud = GLOB.huds[ANTAG_HUD_NINJA] ninjahud.join_hud(ninja) set_antag_hud(ninja, "ninja") /datum/game_mode/proc/update_ninja_icons_removed(datum/mind/ninja_mind) - var/datum/atom_hud/antag/ninjahud = huds[ANTAG_HUD_NINJA] + var/datum/atom_hud/antag/ninjahud = GLOB.huds[ANTAG_HUD_NINJA] ninjahud.leave_hud(ninja_mind.current) set_antag_hud(ninja_mind.current, null) diff --git a/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm b/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm index 6580260cdb..1f5fdc6ea0 100644 --- a/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm +++ b/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm @@ -75,7 +75,7 @@ It is possible to destroy the net by the occupant or someone else. new /obj/effect/overlay/temp/dir_setting/ninja/phase/out(get_turf(M), M.dir) visible_message("[M] suddenly vanishes!") - M.forceMove(pick(holdingfacility)) //Throw mob in to the holding facility. + M.forceMove(pick(GLOB.holdingfacility)) //Throw mob in to the holding facility. to_chat(M, "You appear in a strange place!") if(!isnull(master))//As long as they still exist. diff --git a/code/modules/ninja/suit/ninjaDrainAct.dm b/code/modules/ninja/suit/ninjaDrainAct.dm index 0879e73008..7a3e119a56 100644 --- a/code/modules/ninja/suit/ninjaDrainAct.dm +++ b/code/modules/ninja/suit/ninjaDrainAct.dm @@ -124,7 +124,7 @@ They *could* go in their appropriate files, but this is supposed to be modular to_chat(H, "Hacking \the [src]...") spawn(0) var/turf/location = get_turf(H) - for(var/mob/living/silicon/ai/AI in player_list) + for(var/mob/living/silicon/ai/AI in GLOB.player_list) to_chat(AI, "Network Alert: Hacking attempt detected[location?" in [location]":". Unable to pinpoint location"].") if(files && files.known_tech.len) @@ -156,7 +156,7 @@ They *could* go in their appropriate files, but this is supposed to be modular to_chat(H, "Hacking \the [src]...") spawn(0) var/turf/location = get_turf(H) - for(var/mob/living/silicon/ai/AI in player_list) + for(var/mob/living/silicon/ai/AI in GLOB.player_list) to_chat(AI, "Network Alert: Hacking attempt detected[location?" in [location]":". Unable to pinpoint location"].") if(files && files.known_tech.len) diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index ad68a963d5..ea16bd74ab 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -120,8 +120,8 @@ /obj/structure/filingcabinet/security/proc/populate() if(virgin) - for(var/datum/data/record/G in data_core.general) - var/datum/data/record/S = find_record("name", G.fields["name"], data_core.security) + for(var/datum/data/record/G in GLOB.data_core.general) + var/datum/data/record/S = find_record("name", G.fields["name"], GLOB.data_core.security) if(!S) continue var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src) @@ -152,8 +152,8 @@ /obj/structure/filingcabinet/medical/proc/populate() if(virgin) - for(var/datum/data/record/G in data_core.general) - var/datum/data/record/M = find_record("name", G.fields["name"], data_core.medical) + for(var/datum/data/record/G in GLOB.data_core.general) + var/datum/data/record/M = find_record("name", G.fields["name"], GLOB.data_core.medical) if(!M) continue var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src) @@ -179,7 +179,7 @@ * Employment contract Cabinets */ -var/list/employmentCabinets = list() +GLOBAL_LIST_EMPTY(employmentCabinets) /obj/structure/filingcabinet/employment var/cooldown = 0 @@ -187,16 +187,16 @@ var/list/employmentCabinets = list() var/virgin = 1 /obj/structure/filingcabinet/employment/New() - employmentCabinets += src + GLOB.employmentCabinets += src return ..() /obj/structure/filingcabinet/employment/Destroy() - employmentCabinets -= src + GLOB.employmentCabinets -= src return ..() /obj/structure/filingcabinet/employment/proc/fillCurrent() //This proc fills the cabinet with the current crew. - for(var/record in data_core.locked) + for(var/record in GLOB.data_core.locked) var/datum/data/record/G = record if(!G) continue diff --git a/code/modules/paperwork/handlabeler.dm b/code/modules/paperwork/handlabeler.dm index 1fc7e916dd..9e4b12aace 100644 --- a/code/modules/paperwork/handlabeler.dm +++ b/code/modules/paperwork/handlabeler.dm @@ -49,11 +49,8 @@ if(length(A.name) + length(label) > 64) to_chat(user, "Label too big!") return - if(ishuman(A)) - to_chat(user, "You can't label humans!") - return - if(issilicon(A)) - to_chat(user, "You can't label cyborgs!") + if(ismob(A)) + to_chat(user, "You can't label creatures!") // use a collar return user.visible_message("[user] labels [A] as [label].", \ diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 1e1b911f17..6a11e28e80 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -10,6 +10,7 @@ gender = NEUTER icon = 'icons/obj/bureaucracy.dmi' icon_state = "paper" + item_state = "paper" throwforce = 0 w_class = WEIGHT_CLASS_TINY throw_range = 1 @@ -107,7 +108,7 @@ /obj/item/weapon/paper/attack_self(mob/user) user.examinate(src) - if(rigged && (SSevent.holidays && SSevent.holidays[APRIL_FOOLS])) + if(rigged && (SSevents.holidays && SSevents.holidays[APRIL_FOOLS])) if(spam_flag == 0) spam_flag = 1 playsound(loc, 'sound/items/bikehorn.ogg', 50, 1) diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index c576de7a98..b86d33decc 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -24,7 +24,7 @@ bin_pen = P update_icon() var/static/warned = FALSE - if(!warned) + if(P.type == /obj/item/weapon/pen && !warned) warning("one or more paperbins ate a pen duing initialize()") warned = TRUE @@ -86,7 +86,7 @@ papers.Remove(P) else P = new papertype(src) - if(SSevent.holidays && SSevent.holidays[APRIL_FOOLS]) + if(SSevents.holidays && SSevents.holidays[APRIL_FOOLS]) if(prob(30)) P.info = "HONK HONK HONK HONK HONK HONK HONK
    HOOOOOOOOOOOOOOOOOOOOOONK
    APRIL FOOLS
    " P.rigged = 1 diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 24ad49235c..2e92a318c7 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -284,7 +284,7 @@ var/list/turfs = list() for(var/turf/T in range(1, target)) if(T in seen) - if(isAi && !cameranet.checkTurfVis(T)) + if(isAi && !GLOB.cameranet.checkTurfVis(T)) continue else turfs += T diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm index 21d3cd8a40..a2c943e5fe 100644 --- a/code/modules/paperwork/stamps.dm +++ b/code/modules/paperwork/stamps.dm @@ -78,8 +78,9 @@ var/list/stamp_types var/list/stamp_names -/obj/item/weapon/stamp/chameleon/New() - stamp_types = typesof(/obj/item/weapon/stamp) - src.type // Get all stamp types except our own +/obj/item/weapon/stamp/chameleon/Initialize() + . = ..() + stamp_types = typesof(/obj/item/weapon/stamp) - type // Get all stamp types except our own stamp_names = list() // Generate them into a list diff --git a/code/modules/power/antimatter/shielding.dm b/code/modules/power/antimatter/shielding.dm index 0fd628d4b7..e2ebe14cfc 100644 --- a/code/modules/power/antimatter/shielding.dm +++ b/code/modules/power/antimatter/shielding.dm @@ -1,7 +1,7 @@ //like orange but only checks north/south/east/west for one step /proc/cardinalrange(var/center) var/list/things = list() - for(var/direction in cardinal) + for(var/direction in GLOB.cardinal) var/turf/T = get_step(center, direction) if(!T) continue things += T.contents @@ -52,7 +52,7 @@ break if(!control_unit)//No other guys nearby look for a control unit - for(var/direction in cardinal) + for(var/direction in GLOB.cardinal) for(var/obj/machinery/power/am_control_unit/AMC in cardinalrange(src)) if(AMC.add_shielding(src)) break @@ -110,7 +110,7 @@ dirs = 0 coredirs = 0 cut_overlays() - for(var/direction in alldirs) + for(var/direction in GLOB.alldirs) var/turf/T = get_step(loc, direction) for(var/obj/machinery/machine in T) if(istype(machine, /obj/machinery/am_shielding)) @@ -118,11 +118,11 @@ if(shield.control_unit == control_unit) if(shield.processing) coredirs |= direction - if(direction in cardinal) + if(direction in GLOB.cardinal) dirs |= direction else - if(istype(machine, /obj/machinery/power/am_control_unit) && (direction in cardinal)) + if(istype(machine, /obj/machinery/power/am_control_unit) && (direction in GLOB.cardinal)) var/obj/machinery/power/am_control_unit/control = machine if(control == control_unit) dirs |= direction @@ -175,7 +175,7 @@ //Scans cards for shields or the control unit and if all there it /obj/machinery/am_shielding/proc/core_check() - for(var/direction in alldirs) + for(var/direction in GLOB.alldirs) var/found_am_device=0 for(var/obj/machinery/machine in get_step(loc, direction)) //var/machine = locate(/obj/machinery, get_step(loc, direction)) @@ -191,8 +191,8 @@ /obj/machinery/am_shielding/proc/setup_core() processing = 1 - machines |= src - START_PROCESSING(SSmachine, src) + GLOB.machines |= src + START_PROCESSING(SSmachines, src) if(!control_unit) return control_unit.linked_cores.Add(src) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 5b3a0daf3c..db8ab18bdf 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -52,6 +52,8 @@ max_integrity = 200 integrity_failure = 50 resistance_flags = FIRE_PROOF + + var/lon_range = 1.5 var/area/area var/areastring = null var/obj/item/weapon/stock_parts/cell/cell @@ -109,11 +111,11 @@ /obj/machinery/power/apc/New(turf/loc, var/ndir, var/building=0) if (!req_access) - req_access = list(access_engine_equip) + req_access = list(GLOB.access_engine_equip) if (!armor) armor = list(melee = 20, bullet = 20, laser = 10, energy = 100, bomb = 30, bio = 100, rad = 100, fire = 90, acid = 50) ..() - apcs_list += src + GLOB.apcs_list += src wires = new /datum/wires/apc(src) // offset 24 pixels in direction of dir @@ -138,7 +140,7 @@ addtimer(CALLBACK(src, .proc/update), 5) /obj/machinery/power/apc/Destroy() - apcs_list -= src + GLOB.apcs_list -= src if(malfai && operating) malfai.malf_picker.processing_time = Clamp(malfai.malf_picker.processing_time - 10,0,1000) @@ -160,7 +162,6 @@ if(A == cell) cell = null update_icon() - update_icon() updateUsrDialog() /obj/machinery/power/apc/proc/make_terminal() @@ -290,6 +291,21 @@ O += status_overlays_environ[environ+1] add_overlay(O) + // And now, seperately for cleanness, the lighting changing + if(update_state & UPSTATE_ALLGOOD) + switch(charging) + if(0) + light_color = LIGHT_COLOR_RED + if(1) + light_color = LIGHT_COLOR_BLUE + if(2) + light_color = LIGHT_COLOR_GREEN + set_light(lon_range) + else if(update_state & UPSTATE_BLUESCREEN) + light_color = LIGHT_COLOR_BLUE + set_light(lon_range) + else + set_light(0) /obj/machinery/power/apc/proc/check_updates() @@ -388,7 +404,7 @@ "You break the charred power control board and remove the remains.", "You hear a crack.") return - //ticker.mode:apcs-- //XSI said no and I agreed. -rastaf0 + //SSticker.mode:apcs-- //XSI said no and I agreed. -rastaf0 else if (emagged) // We emag board, not APC's frame emagged = 0 user.visible_message(\ @@ -661,7 +677,7 @@ ..() /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) + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) @@ -742,15 +758,10 @@ area.power_light = (lighting > 1) area.power_equip = (equipment > 1) area.power_environ = (environ > 1) -// if (area.name == "AI Chamber") -// spawn(10) -// to_chat(world, " [area.name] [area.power_equip]") else area.power_light = 0 area.power_equip = 0 area.power_environ = 0 -// if (area.name == "AI Chamber") -// to_chat(world, "[area.power_equip]") area.power_change() /obj/machinery/power/apc/proc/can_use(mob/user, loud = 0) //used by attack_hand() and Topic() @@ -893,7 +904,7 @@ occupier.loc = src.loc occupier.death() occupier.gib() - for(var/obj/item/weapon/pinpointer/P in pinpointer_list) + for(var/obj/item/weapon/pinpointer/P in GLOB.pinpointer_list) P.switch_mode_to(TRACK_NUKE_DISK) //Pinpointers go back to tracking the nuke disk P.nuke_warning = FALSE @@ -1019,18 +1030,18 @@ if(cell && !shorted) // draw power from cell as before to power the area - var/cellused = min(cell.charge, CELLRATE * lastused_total) // clamp deduction to a max, amount left in cell + var/cellused = min(cell.charge, GLOB.CELLRATE * lastused_total) // clamp deduction to a max, amount left in cell cell.use(cellused) if(excess > lastused_total) // if power excess recharge the cell // by the same amount just used cell.give(cellused) - add_load(cellused/CELLRATE) // add the load used to recharge the cell + add_load(cellused/GLOB.CELLRATE) // add the load used to recharge the cell else // no excess, and not enough per-apc - if((cell.charge/CELLRATE + excess) >= lastused_total) // can we draw enough from cell+grid to cover last usage? - cell.charge = min(cell.maxcharge, cell.charge + CELLRATE * excess) //recharge with what we can + if((cell.charge/GLOB.CELLRATE + excess) >= lastused_total) // can we draw enough from cell+grid to cover last usage? + cell.charge = min(cell.maxcharge, cell.charge + GLOB.CELLRATE * excess) //recharge with what we can add_load(excess) // so draw what we can from the grid charging = 0 @@ -1078,8 +1089,8 @@ if(chargemode && charging == 1 && operating) if(excess > 0) // check to make sure we have enough to charge // Max charge is capped to % per second constant - var/ch = min(excess*CELLRATE, cell.maxcharge*CHARGELEVEL) - add_load(ch/CELLRATE) // Removes the power we're taking from the grid + var/ch = min(excess*GLOB.CELLRATE, cell.maxcharge*GLOB.CHARGELEVEL) + add_load(ch/GLOB.CELLRATE) // Removes the power we're taking from the grid cell.give(ch) // actually recharge the cell else @@ -1093,7 +1104,7 @@ if(chargemode) if(!charging) - if(excess > cell.maxcharge*CHARGELEVEL) + if(excess > cell.maxcharge*GLOB.CHARGELEVEL) chargecount++ else chargecount = 0 @@ -1196,14 +1207,16 @@ if(/* !get_connection() || */ !operating || shorted) return if( cell && cell.charge>=20) - cell.use(20); - spawn(0) - for(var/area/A in area.related) - for(var/obj/machinery/light/L in A) - L.on = TRUE - L.break_light_tube() - L.on = FALSE - stoplag() + cell.use(20) + INVOKE_ASYNC(src, .proc/break_lights) + +/obj/machinery/power/apc/proc/break_lights() + for(var/area/A in area.related) + for(var/obj/machinery/light/L in A) + L.on = TRUE + L.break_light_tube() + L.on = FALSE + stoplag() /obj/machinery/power/apc/proc/shock(mob/user, prb) if(!prob(prb)) @@ -1231,7 +1244,7 @@ for(var/obj/machinery/M in area.contents) if(M.critical_machine) return - for(var/A in ai_list) + for(var/A in GLOB.ai_list) var/mob/living/silicon/ai/I = A if(get_area(I) == area) return diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index c6b1296eed..6ac6ff8e2f 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -80,7 +80,7 @@ By design, d1 is the smallest direction and d2 is the highest var/turf/T = src.loc // hide if turf is not intact if(level==1) hide(T.intact) - cable_list += src //add it to the global cable list + GLOB.cable_list += src //add it to the global cable list if(d1) stored = new/obj/item/stack/cable_coil(null,2,cable_color) @@ -90,7 +90,7 @@ By design, d1 is the smallest direction and d2 is the highest /obj/structure/cable/Destroy() // called when a cable is deleted if(powernet) cut_cable_from_powernet() // update the powernets - cable_list -= src //remove it from global cable list + GLOB.cable_list -= src //remove it from global cable list return ..() // then go ahead and delete the cable /obj/structure/cable/deconstruct(disassembled = TRUE) @@ -437,9 +437,7 @@ By design, d1 is the smallest direction and d2 is the highest // Definitions //////////////////////////////// -var/global/list/datum/stack_recipe/cable_coil_recipes = list ( \ - new/datum/stack_recipe("cable restraints", /obj/item/weapon/restraints/handcuffs/cable, 15), \ - ) +GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restraints", /obj/item/weapon/restraints/handcuffs/cable, 15))) /obj/item/stack/cable_coil name = "cable coil" @@ -479,15 +477,16 @@ var/global/list/datum/stack_recipe/cable_coil_recipes = list ( \ user.visible_message("[user] is strangling [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!") return(OXYLOSS) -/obj/item/stack/cable_coil/New(loc, amount = MAXCOIL, var/param_color = null) +/obj/item/stack/cable_coil/New(loc, new_amount = null, var/param_color = null) ..() - src.amount = amount + if(new_amount) // MAXCOIL by default + amount = new_amount if(param_color) item_color = param_color pixel_x = rand(-2,2) pixel_y = rand(-2,2) update_icon() - recipes = cable_coil_recipes + recipes = GLOB.cable_coil_recipes /////////////////////////////////// // General procedures diff --git a/code/modules/power/floodlight.dm b/code/modules/power/floodlight.dm new file mode 100644 index 0000000000..6efd56860e --- /dev/null +++ b/code/modules/power/floodlight.dm @@ -0,0 +1,107 @@ + +/obj/structure/floodlight_frame + name = "floodlight frame" + desc = "A bare metal frame looking vaguely like a floodlight. Requires wrenching down." + max_integrity = 100 + obj_integrity = 100 + icon = 'icons/obj/lighting.dmi' + icon_state = "floodlight_c1" + density = TRUE + var/state = FLOODLIGHT_NEEDS_WRENCHING + +/obj/structure/floodlight_frame/attackby(obj/item/O, mob/user, params) + if(istype(O, /obj/item/weapon/wrench) && (state == FLOODLIGHT_NEEDS_WRENCHING)) + to_chat(user, "You secure the [src].") + anchored = TRUE + state = FLOODLIGHT_NEEDS_WIRES + desc = "A bare metal frame looking vaguely like a floodlight. Requires wiring." + else if(istype(O, /obj/item/stack/cable_coil) && (state == FLOODLIGHT_NEEDS_WIRES)) + var/obj/item/stack/S = O + if(S.use(5)) + to_chat(user, "You wire the [src].") + name = "wired [name]" + desc = "A bare metal frame looking vaguely like a floodlight. Requires securing with a screwdriver." + icon_state = "floodlight_c2" + state = FLOODLIGHT_NEEDS_SECURING + else if(istype(O, /obj/item/weapon/light/tube) && (state == FLOODLIGHT_NEEDS_LIGHTS)) + if(user.transferItemToLoc(O)) + to_chat(user, "You put lights in the [src].") + new /obj/machinery/power/floodlight(src.loc) + qdel(src) + else if(istype(O, /obj/item/weapon/screwdriver) && (state == FLOODLIGHT_NEEDS_SECURING)) + to_chat(user, "You fasten the wiring and electronics in [src].") + name = "secured [name]" + desc = "A bare metal frame that looks like a floodlight. Requires light tubes." + icon_state = "floodlight_c3" + state = FLOODLIGHT_NEEDS_LIGHTS + else + ..() + +/obj/machinery/power/floodlight + name = "floodlight" + desc = "A pole with powerful mounted lights on it. Due to its high power draw, it must be powered by a direct connection to a wire node." + icon = 'icons/obj/lighting.dmi' + icon_state = "floodlight" + anchored = TRUE + density = TRUE + idle_power_usage = 100 + active_power_usage = 1000 + var/list/light_setting_list = list(0, 5, 10, 15) + var/light_power_coefficient = 300 + var/setting = 1 + light_power = 1.75 + +/obj/machinery/power/floodlight/process() + if(avail(active_power_usage)) + add_load(active_power_usage) + else + change_setting(1) + +/obj/machinery/power/floodlight/proc/change_setting(val, mob/user) + if((val < 1) || (val > light_setting_list.len)) + return + active_power_usage = light_setting_list[val] + if(!avail(active_power_usage)) + return change_setting(val - 1) + setting = val + set_light(light_setting_list[val]) + var/setting_text = "" + if(val > 1) + icon_state = "[initial(icon_state)]_on" + else + icon_state = initial(icon_state) + switch(val) + if(1) + setting_text = "OFF" + if(2) + setting_text = "low power" + if(3) + setting_text = "standard lighting" + if(4) + setting_text = "high power" + if(user) + to_chat(user, "You set the [src] to [setting_text].") + +/obj/machinery/power/floodlight/attackby(obj/item/O, mob/user, params) + if(istype(O, /obj/item/weapon/wrench)) + default_unfasten_wrench(user, O, time = 20) + change_setting(1) + if(anchored) + connect_to_network() + else + disconnect_from_network() + else + . = ..() + +/obj/machinery/power/floodlight/attack_hand(mob/user) + var/current = setting + if(current == 1) + current = light_setting_list.len + else + current-- + change_setting(current, user) + ..() + +/obj/machinery/power/floodlight/attack_ai(mob/user) + attack_hand(user) + ..() diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index 59a685b887..069dbc8448 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -3,16 +3,16 @@ // Gravity Generator // -var/list/gravity_generators = list() // We will keep track of this by adding new gravity generators to the list, and keying it with the z level. +GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding new gravity generators to the list, and keying it with the z level. -var/const/POWER_IDLE = 0 -var/const/POWER_UP = 1 -var/const/POWER_DOWN = 2 +#define POWER_IDLE 0 +#define POWER_UP 1 +#define POWER_DOWN 2 -var/const/GRAV_NEEDS_SCREWDRIVER = 0 -var/const/GRAV_NEEDS_WELDING = 1 -var/const/GRAV_NEEDS_PLASTEEL = 2 -var/const/GRAV_NEEDS_WRENCH = 3 +#define GRAV_NEEDS_SCREWDRIVER 0 +#define GRAV_NEEDS_WELDING 1 +#define GRAV_NEEDS_PLASTEEL 2 +#define GRAV_NEEDS_WRENCH 3 // // Abstract Generator @@ -304,7 +304,7 @@ var/const/GRAV_NEEDS_WRENCH = 3 // Sound the alert if gravity was just enabled or disabled. var/alert = 0 var/area/area = get_area(src) - if(on && ticker && ticker.current_state == GAME_STATE_PLAYING) // If we turned on and the game is live. + if(on && SSticker && SSticker.current_state == GAME_STATE_PLAYING) // If we turned on and the game is live. if(gravity_in_level() == 0) alert = 1 investigate_log("was brought online and is now producing gravity for this level.", "gravity") @@ -371,7 +371,7 @@ var/const/GRAV_NEEDS_WRENCH = 3 // Shake everyone on the z level to let them know that gravity was enagaged/disenagaged. /obj/machinery/gravity_generator/main/proc/shake_everyone() var/turf/T = get_turf(src) - for(var/mob/M in mob_list) + for(var/mob/M in GLOB.mob_list) if(M.z != z) continue M.update_gravity(M.mob_has_gravity()) @@ -383,19 +383,19 @@ var/const/GRAV_NEEDS_WRENCH = 3 var/turf/T = get_turf(src) if(!T) return 0 - if(gravity_generators["[T.z]"]) - return length(gravity_generators["[T.z]"]) + if(GLOB.gravity_generators["[T.z]"]) + return length(GLOB.gravity_generators["[T.z]"]) return 0 /obj/machinery/gravity_generator/main/proc/update_list() var/turf/T = get_turf(src.loc) if(T) - if(!gravity_generators["[T.z]"]) - gravity_generators["[T.z]"] = list() + if(!GLOB.gravity_generators["[T.z]"]) + GLOB.gravity_generators["[T.z]"] = list() if(on) - gravity_generators["[T.z]"] |= src + GLOB.gravity_generators["[T.z]"] |= src else - gravity_generators["[T.z]"] -= src + GLOB.gravity_generators["[T.z]"] -= src // Misc diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 0adf109d1f..5ea803ed74 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -500,6 +500,7 @@ status = LIGHT_EMPTY update() + return L /obj/machinery/light/attack_tk(mob/user) if(status == LIGHT_EMPTY) @@ -508,7 +509,8 @@ to_chat(user, "You telekinetically remove the light [fitting].") // create a light tube/bulb item and put it in the user's hand - drop_light_tube() + var/obj/item/weapon/light/L = drop_light_tube() + L.attack_tk(user) // break the light and make sparks if was on diff --git a/code/modules/power/monitor.dm b/code/modules/power/monitor.dm index 5474665889..88db15cf31 100644 --- a/code/modules/power/monitor.dm +++ b/code/modules/power/monitor.dm @@ -51,7 +51,7 @@ demand.Cut(1, 2) /obj/machinery/computer/monitor/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/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "power_monitor", name, 1200, 1000, master_ui, state) diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index 6767788c03..c27566e5bc 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -139,7 +139,7 @@ var/cdir var/turf/T - for(var/card in cardinal) + for(var/card in GLOB.cardinal) T = get_step(loc,card) cdir = get_dir(T,loc) @@ -159,7 +159,7 @@ var/cdir var/turf/T - for(var/card in cardinal) + for(var/card in GLOB.cardinal) T = get_step(loc,card) cdir = get_dir(T,loc) @@ -337,9 +337,9 @@ var/drained_energy = drained_hp*20 if (source_area) - source_area.use_power(drained_energy/CELLRATE) + source_area.use_power(drained_energy/GLOB.CELLRATE) else if (istype(power_source,/datum/powernet)) - var/drained_power = drained_energy/CELLRATE //convert from "joules" to "watts" + var/drained_power = drained_energy/GLOB.CELLRATE //convert from "joules" to "watts" PN.load+=drained_power else if (istype(power_source, /obj/item/weapon/stock_parts/cell)) cell.use(drained_energy) @@ -361,6 +361,6 @@ return null /area/proc/get_apc() - for(var/obj/machinery/power/apc/APC in apcs_list) + for(var/obj/machinery/power/apc/APC in GLOB.apcs_list) if(APC.area == src) return APC diff --git a/code/modules/power/powernet.dm b/code/modules/power/powernet.dm index 28ef1488d0..b6f61103ca 100644 --- a/code/modules/power/powernet.dm +++ b/code/modules/power/powernet.dm @@ -15,7 +15,7 @@ var/netexcess = 0 // excess power on the powernet (typically avail-load)/////// /datum/powernet/New() - SSmachine.powernets += src + SSmachines.powernets += src /datum/powernet/Destroy() //Go away references, you suck! @@ -26,7 +26,7 @@ nodes -= M M.powernet = null - SSmachine.powernets -= src + SSmachines.powernets -= src return ..() /datum/powernet/proc/is_empty() diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index 15a582a387..eb78c885aa 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -1,5 +1,5 @@ -var/global/list/rad_collectors = list() +GLOBAL_LIST_EMPTY(rad_collectors) /obj/machinery/power/rad_collector name = "Radiation Collector Array" @@ -8,7 +8,7 @@ var/global/list/rad_collectors = list() icon_state = "ca" anchored = 0 density = 1 - req_access = list(access_engine_equip) + req_access = list(GLOB.access_engine_equip) // use_power = 0 obj_integrity = 350 max_integrity = 350 @@ -21,10 +21,10 @@ var/global/list/rad_collectors = list() /obj/machinery/power/rad_collector/New() ..() - rad_collectors += src + GLOB.rad_collectors += src /obj/machinery/power/rad_collector/Destroy() - rad_collectors -= src + GLOB.rad_collectors -= src return ..() /obj/machinery/power/rad_collector/process() @@ -46,7 +46,9 @@ 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]. [loaded_tank?"Fuel: [round(loaded_tank.air_contents.gases["plasma"][MOLES]/0.29)]%":"It is empty"].","singulo") + var/fuel = loaded_tank.air_contents.gases["plasma"] + fuel = fuel ? fuel[MOLES] : 0 + investigate_log("turned [active?"on":"off"] by [user.key]. [loaded_tank?"Fuel: [round(fuel/0.29)]%":"It is empty"].","singulo") return else to_chat(user, "The controls are locked!") diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 30a449a83b..1fa2bf2376 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -8,7 +8,7 @@ var/icon_state_on = "emitter_+a" anchored = 0 density = 1 - req_access = list(access_engine_equip) + req_access = list(GLOB.access_engine_equip) use_power = 0 idle_power_usage = 10 @@ -88,7 +88,7 @@ connect_to_network() /obj/machinery/power/emitter/Destroy() - if(ticker && ticker.current_state == GAME_STATE_PLAYING) + if(SSticker && SSticker.current_state == GAME_STATE_PLAYING) message_admins("Emitter deleted at ([x],[y],[z] - JMP)",0,1) log_game("Emitter deleted at ([x],[y],[z])") investigate_log("deleted at ([x],[y],[z]) at [get_area(src)]","singulo") diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index d45c1fcf87..838cc19df5 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -319,7 +319,7 @@ field_generator power level display //I want to avoid using global variables. spawn(1) var/temp = 1 //stops spam - for(var/obj/singularity/O in singularities) + for(var/obj/singularity/O in GLOB.singularities) if(O.last_warning && temp) if((world.time - O.last_warning) > 50) //to stop message-spam temp = 0 diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm index a9f7400289..dc54a3db4e 100644 --- a/code/modules/power/singularity/narsie.dm +++ b/code/modules/power/singularity/narsie.dm @@ -91,13 +91,13 @@ /obj/singularity/narsie/proc/pickcultist() //Narsie rewards her cultists with being devoured first, then picks a ghost to follow. var/list/cultists = list() var/list/noncultists = list() - for(var/obj/structure/destructible/clockwork/massive/ratvar/enemy in poi_list) //Prioritize killing Ratvar + for(var/obj/structure/destructible/clockwork/massive/ratvar/enemy in GLOB.poi_list) //Prioritize killing Ratvar if(enemy.z != z) continue acquire(enemy) return - for(var/mob/living/carbon/food in living_mob_list) //we don't care about constructs or cult-Ians or whatever. cult-monkeys are fair game i guess + for(var/mob/living/carbon/food in GLOB.living_mob_list) //we don't care about constructs or cult-Ians or whatever. cult-monkeys are fair game i guess var/turf/pos = get_turf(food) if(pos.z != src.z) continue @@ -116,7 +116,7 @@ return //no living humans, follow a ghost instead. - for(var/mob/dead/observer/ghost in player_list) + for(var/mob/dead/observer/ghost in GLOB.player_list) if(!ghost.client) continue var/turf/pos = get_turf(ghost) diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 3cc48bb11a..3b0bc3087b 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -27,6 +27,7 @@ var/last_warning var/consumedSupermatter = 0 //If the singularity has eaten a supermatter shard and can go to stage six resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + dangerous_possession = TRUE /obj/singularity/New(loc, var/starting_energy = 50, var/temp = 0) //CARN: admin-alert for chuckle-fuckery. @@ -35,9 +36,9 @@ src.energy = starting_energy ..() START_PROCESSING(SSobj, src) - poi_list |= src - singularities |= src - for(var/obj/machinery/power/singularity_beacon/singubeacon in machines) + GLOB.poi_list |= src + GLOB.singularities |= src + for(var/obj/machinery/power/singularity_beacon/singubeacon in GLOB.machines) if(singubeacon.active) target = singubeacon break @@ -45,8 +46,8 @@ /obj/singularity/Destroy() STOP_PROCESSING(SSobj, src) - poi_list.Remove(src) - singularities.Remove(src) + GLOB.poi_list.Remove(src) + GLOB.singularities.Remove(src) return ..() /obj/singularity/Move(atom/newloc, direct) @@ -286,7 +287,7 @@ if(!move_self) return 0 - var/movement_dir = pick(alldirs - last_failed_movement) + var/movement_dir = pick(GLOB.alldirs - last_failed_movement) if(force_move) movement_dir = force_move @@ -430,7 +431,7 @@ /obj/singularity/proc/pulse() - for(var/obj/machinery/power/rad_collector/R in rad_collectors) + for(var/obj/machinery/power/rad_collector/R in GLOB.rad_collectors) if(R.z == z && get_dist(R, src) <= 15) // Better than using orange() every process R.receive_pulse(energy) diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 34e7b5ea2d..de0d230a39 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -53,7 +53,7 @@ spawn(5) dir_loop: - for(var/d in cardinal) + for(var/d in GLOB.cardinal) var/turf/T = get_step(src, d) for(var/obj/machinery/power/terminal/term in T) if(term && term.dir == turn(d, 180)) @@ -196,7 +196,7 @@ cell.charge = (charge / capacity) * cell.maxcharge /obj/machinery/power/smes/Destroy() - if(ticker && ticker.current_state == GAME_STATE_PLAYING) + if(SSticker && SSticker.current_state == GAME_STATE_PLAYING) var/area/area = get_area(src) message_admins("SMES deleted at ([area.name])") log_game("SMES deleted at ([area.name])") @@ -261,7 +261,7 @@ /obj/machinery/power/smes/proc/chargedisplay() - return round(5.5*charge/capacity) + return Clamp(round(5.5*charge/capacity),0,5) /obj/machinery/power/smes/process() if(stat & BROKEN) @@ -354,7 +354,7 @@ terminal.powernet.load += amount /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) + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.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, master_ui, state) diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 3a27f546d3..e5097d422a 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -348,7 +348,7 @@ add_overlay(image('icons/obj/computer.dmi', "solcon-o", FLY_LAYER, angle2dir(currentdir))) /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) + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.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, 500, 400, master_ui, state) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index edb17a17bc..5149a2d75e 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -14,7 +14,7 @@ #define N2O_HEAT_RESISTANCE 6 //Higher == Gas makes the crystal more resistant against heat damage. #define POWERLOSS_INHIBITION_GAS_THRESHOLD 0.20 //Higher == Higher percentage of inhibitor gas needed before the charge inertia chain reaction effect starts. -#define POWERLOSS_INHIBITION_MOLE_THRESHOLD 100 //Higher == More moles of the gas are needed before the charge inertia chain reaction effect starts. //Scales powerloss inhibition down until this amount of moles is reached +#define POWERLOSS_INHIBITION_MOLE_THRESHOLD 20 //Higher == More moles of the gas are needed before the charge inertia chain reaction effect starts. //Scales powerloss inhibition down until this amount of moles is reached #define POWERLOSS_INHIBITION_MOLE_BOOST_THRESHOLD 500 //bonus powerloss inhibition boost if this amount of moles is reached #define MOLE_PENALTY_THRESHOLD 1800 //Higher == Shard can absorb more moles before triggering the high mole penalties. @@ -39,10 +39,18 @@ #define DETONATION_HALLUCINATION 600 -#define WARNING_DELAY 30 +#define WARNING_DELAY 60 #define HALLUCINATION_RANGE(P) (min(7, round(P ** 0.25))) + +#define GRAVITATIONAL_ANOMALY "gravitational_anomaly" +#define FLUX_ANOMALY "flux_anomaly" +#define PYRO_ANOMALY "pyro_anomaly" + +#define SPEAK(message) radio.talk_into(src, message, null, get_spans(), get_default_language()) + + /obj/machinery/power/supermatter_shard name = "supermatter shard" desc = "A strangely translucent and iridescent crystal that looks like it used to be part of a larger structure." @@ -64,7 +72,8 @@ var/safe_alert = "Crystalline hyperstructure returning to safe operating levels." var/warning_point = 50 var/warning_alert = "Danger! Crystal hyperstructure instability!" - var/emergency_point = 500 + var/damage_penalty_point = 550 + var/emergency_point = 700 var/emergency_alert = "CRYSTAL DELAMINATION IMMINENT." var/explosion_point = 900 @@ -122,7 +131,7 @@ . = ..() countdown = new(src) countdown.start() - poi_list |= src + GLOB.poi_list |= src radio = new(src) radio.listening = 0 investigate_log("has been created.", "supermatter") @@ -130,13 +139,9 @@ /obj/machinery/power/supermatter_shard/Destroy() investigate_log("has been destroyed.", "supermatter") - if(radio) - qdel(radio) - radio = null - poi_list -= src - if(countdown) - qdel(countdown) - countdown = null + QDEL_NULL(radio) + GLOB.poi_list -= src + QDEL_NULL(countdown) . = ..() /obj/machinery/power/supermatter_shard/examine(mob/user) @@ -157,7 +162,7 @@ /obj/machinery/power/supermatter_shard/proc/explode() var/turf/T = get_turf(src) - for(var/mob/M in mob_list) + for(var/mob/M in GLOB.mob_list) if(M.z == z) M << 'sound/magic/Charge.ogg' to_chat(M, "You feel reality distort for a moment...") @@ -230,7 +235,7 @@ n2comp = max(removed.gases["n2"][MOLES]/combined_gas, 0) freoncomp = max(removed.gases["freon"][MOLES]/combined_gas, 0) - gasmix_power_ratio = min(max(plasmacomp + o2comp + co2comp - n2ocomp - n2comp - freoncomp, 0), 1) + gasmix_power_ratio = min(max(plasmacomp + o2comp + co2comp - n2comp - freoncomp, 0), 1) dynamic_heat_modifier = max((plasmacomp * PLASMA_HEAT_PENALTY)+(o2comp * OXYGEN_HEAT_PENALTY)+(co2comp * CO2_HEAT_PENALTY)+(n2comp * NITROGEN_HEAT_MODIFIER), 0.5) dynamic_heat_resistance = max(n2ocomp * N2O_HEAT_RESISTANCE, 1) @@ -245,7 +250,7 @@ if (combined_gas > POWERLOSS_INHIBITION_MOLE_THRESHOLD && co2comp > POWERLOSS_INHIBITION_GAS_THRESHOLD) powerloss_dynamic_scaling = Clamp(powerloss_dynamic_scaling + Clamp(co2comp - powerloss_dynamic_scaling, -0.02, 0.02), 0, 1) else - powerloss_dynamic_scaling = Clamp(powerloss_dynamic_scaling - 0.10,0, 1) + powerloss_dynamic_scaling = Clamp(powerloss_dynamic_scaling - 0.05,0, 1) powerloss_inhibitor = Clamp(1-(powerloss_dynamic_scaling * Clamp(combined_gas/POWERLOSS_INHIBITION_MOLE_BOOST_THRESHOLD,1 ,1.5)),0 ,1) if(matter_power) @@ -302,23 +307,28 @@ var/rads = (power / 10) * sqrt( 1 / max(get_dist(l, src),1) ) l.rad_act(rads) - if(power > POWER_PENALTY_THRESHOLD) - playsound(src.loc, 'sound/weapons/emitter2.ogg', 100, 1, extrarange = 10) - supermatter_zap(src, 5, min(power*2, 20000)) - supermatter_zap(src, 5, min(power*2, 20000)) - if(power > SEVERE_POWER_PENALTY_THRESHOLD) - supermatter_zap(src, 5, min(power*2, 20000)) - if(power > CRITICAL_POWER_PENALTY_THRESHOLD) - supermatter_zap(src, 5, min(power*2, 20000)) + if(power > POWER_PENALTY_THRESHOLD || damage > damage_penalty_point) - if(prob(15)) + if(power > POWER_PENALTY_THRESHOLD) + playsound(src.loc, 'sound/weapons/emitter2.ogg', 100, 1, extrarange = 10) + supermatter_zap(src, 5, min(power*2, 20000)) + supermatter_zap(src, 5, min(power*2, 20000)) + if(power > SEVERE_POWER_PENALTY_THRESHOLD) + supermatter_zap(src, 5, min(power*2, 20000)) + if(power > CRITICAL_POWER_PENALTY_THRESHOLD) + supermatter_zap(src, 5, min(power*2, 20000)) + else if (damage > damage_penalty_point && prob(20)) + playsound(src.loc, 'sound/weapons/emitter2.ogg', 100, 1, extrarange = 10) + supermatter_zap(src, 5, Clamp(power*2, 4000, 20000)) + + if(prob(15) && power > POWER_PENALTY_THRESHOLD) supermatter_pull(src, power/750) if(prob(5)) - supermatter_anomaly_gen(src, 1, rand(5, 10)) - if(power > SEVERE_POWER_PENALTY_THRESHOLD && prob(5) || prob(2)) - supermatter_anomaly_gen(src, 2, rand(5, 10)) - if(power > SEVERE_POWER_PENALTY_THRESHOLD && prob(2) || prob(0.3)) - supermatter_anomaly_gen(src, 3, rand(5, 10)) + supermatter_anomaly_gen(src, FLUX_ANOMALY, rand(5, 10)) + if(power > SEVERE_POWER_PENALTY_THRESHOLD && prob(5) || prob(1)) + supermatter_anomaly_gen(src, GRAVITATIONAL_ANOMALY, rand(5, 10)) + if(power > SEVERE_POWER_PENALTY_THRESHOLD && prob(2) || prob(0.3) && power > POWER_PENALTY_THRESHOLD) + supermatter_anomaly_gen(src, PYRO_ANOMALY, rand(5, 10)) @@ -327,31 +337,30 @@ var/stability = num2text(round((damage / explosion_point) * 100)) if(damage > emergency_point) - - radio.talk_into(src, "[emergency_alert] Instability: [stability]%") + SPEAK("[emergency_alert] Instability: [stability]%") lastwarning = REALTIMEOFDAY if(!has_reached_emergency) investigate_log("has reached the emergency point for the first time.", "supermatter") message_admins("[src] has reached the emergency point (JMP).") has_reached_emergency = 1 else if(damage >= damage_archived) // The damage is still going up - radio.talk_into(src, "[warning_alert] Instability: [stability]%") + SPEAK("[warning_alert] Instability: [stability]%") lastwarning = REALTIMEOFDAY - (WARNING_DELAY * 5) else // Phew, we're safe - radio.talk_into(src, "[safe_alert] Instability: [stability]%") + SPEAK("[safe_alert] Instability: [stability]%") lastwarning = REALTIMEOFDAY if(power > POWER_PENALTY_THRESHOLD) - radio.talk_into(src, "Warning: Hyperstructure has reached dangerous power level.") + SPEAK("Warning: Hyperstructure has reached dangerous power level.") if(powerloss_inhibitor < 0.5) - radio.talk_into(src, "DANGER: CHARGE INERTIA CHAIN REACTION IN PROGRESS.") + SPEAK("DANGER: CHARGE INERTIA CHAIN REACTION IN PROGRESS.") if(combined_gas > MOLE_PENALTY_THRESHOLD) - radio.talk_into(src, "Warning: Critical coolant mass reached.") + SPEAK("Warning: Critical coolant mass reached.") if(damage > explosion_point) - for(var/mob in living_mob_list) + for(var/mob in GLOB.living_mob_list) var/mob/living/L = mob if(istype(L) && L.z == z) if(ishuman(mob)) @@ -390,7 +399,7 @@ investigate_log("Supermatter shard consumed by singularity.","singulo") message_admins("Singularity has consumed a supermatter shard and can now become stage six.") visible_message("[src] is consumed by the singularity!") - for(var/mob/M in mob_list) + for(var/mob/M in GLOB.mob_list) if(M.z == z) M << 'sound/effects/supermatter.ogg' //everyone goan know bout this to_chat(M, "A horrible screeching fills your ears, and a wave of dread washes over you...") @@ -410,6 +419,13 @@ "You hear a loud crack as you are washed with a wave of heat.") Consume(B) +/obj/machinery/power/supermatter_shard/attack_tk(mob/user) + if(iscarbon(user)) + var/mob/living/carbon/C = user + to_chat(C, "That was a really dumb idea.") + var/obj/item/bodypart/head/rip_u = C.get_bodypart("head") + rip_u.dismember(BURN) //nice try jedi + /obj/machinery/power/supermatter_shard/attack_paw(mob/user) return attack_hand(user) @@ -435,7 +451,7 @@ Consume(user) /obj/machinery/power/supermatter_shard/proc/transfer_energy() - for(var/obj/machinery/power/rad_collector/R in rad_collectors) + for(var/obj/machinery/power/rad_collector/R in GLOB.rad_collectors) if(R.z == z && get_dist(R, src) <= 15) //Better than using orange() every process R.receive_pulse(power * (1 + power_transmission_bonus)/10 * freon_transmit_modifier) @@ -475,6 +491,8 @@ investigate_log("has consumed [key_name(user)].", "supermatter") user.dust() matter_power += 200 + else if(istype(AM, /obj/singularity)) + return else if(isobj(AM) && !istype(AM, /obj/effect)) investigate_log("has consumed [AM].", "supermatter") qdel(AM) @@ -520,23 +538,17 @@ step_towards(pulled_object,center) step_towards(pulled_object,center) - return - -/obj/machinery/power/supermatter_shard/proc/supermatter_anomaly_gen(turf/anomalycenter, type = 1, anomalyrange = 5) +/obj/machinery/power/supermatter_shard/proc/supermatter_anomaly_gen(turf/anomalycenter, type = FLUX_ANOMALY, anomalyrange = 5) var/turf/L = pick(orange(anomalyrange, anomalycenter)) if(L) - if(type == 1) - var/obj/effect/anomaly/flux/A = new(L) - A.explosive = 0 - A.lifespan = 300 - else if(type == 2) - var/obj/effect/anomaly/grav/A = new(L) - A.lifespan = 250 - else if(type == 3) - var/obj/effect/anomaly/pyro/A = new(L) - A.lifespan = 200 - - return + switch(type) + if(FLUX_ANOMALY) + var/obj/effect/anomaly/flux/A = new(L, 300) + A.explosive = FALSE + if(GRAVITATIONAL_ANOMALY) + new /obj/effect/anomaly/grav(L, 250) + if(PYRO_ANOMALY) + new /obj/effect/anomaly/pyro(L, 200) /obj/machinery/power/supermatter_shard/proc/supermatter_zap(atom/zapstart, range = 3, power) . = zapstart.dir @@ -607,3 +619,6 @@ supermatter_zap(target_structure, 5, power / 1.5) #undef HALLUCINATION_RANGE +#undef GRAVITATIONAL_ANOMALY +#undef FLUX_ANOMALY +#undef PYRO_ANOMALY diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index 7910ebae53..478ae43d90 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -1,7 +1,7 @@ #define TESLA_DEFAULT_POWER 1738260 #define TESLA_MINI_POWER 869130 -var/list/blacklisted_tesla_types = typecacheof(list(/obj/machinery/atmospherics, +GLOBAL_LIST_INIT(blacklisted_tesla_types, typecacheof(list(/obj/machinery/atmospherics, /obj/machinery/power/emitter, /obj/machinery/field/generator, /mob/living/simple_animal, @@ -18,7 +18,7 @@ var/list/blacklisted_tesla_types = typecacheof(list(/obj/machinery/atmospherics, /obj/machinery/gateway, /obj/structure/lattice, /obj/structure/grille, - /obj/machinery/the_singularitygen/tesla)) + /obj/machinery/the_singularitygen/tesla))) /obj/singularity/energy_ball name = "energy ball" desc = "An energy ball." @@ -85,7 +85,7 @@ var/list/blacklisted_tesla_types = typecacheof(list(/obj/machinery/atmospherics, //we face the last thing we zapped, so this lets us favor that direction a bit var/first_move = dir for(var/i in 0 to move_amount) - var/move_dir = pick(alldirs + first_move) //give the first move direction a bit of favoring. + var/move_dir = pick(GLOB.alldirs + first_move) //give the first move direction a bit of favoring. if(target && prob(60)) move_dir = get_dir(src,target) var/turf/T = get_step(src, move_dir) @@ -137,7 +137,7 @@ var/list/blacklisted_tesla_types = typecacheof(list(/obj/machinery/atmospherics, /obj/singularity/energy_ball/orbit(obj/singularity/energy_ball/target) if (istype(target)) target.orbiting_balls += src - poi_list -= src + GLOB.poi_list -= src target.dissipate_strength = target.orbiting_balls.len . = ..() @@ -197,7 +197,7 @@ var/list/blacklisted_tesla_types = typecacheof(list(/obj/machinery/atmospherics, closest_atom = A closest_dist = dist - else if(closest_grounding_rod || is_type_in_typecache(A, blacklisted_tesla_types)) + else if(closest_grounding_rod || is_type_in_typecache(A, GLOB.blacklisted_tesla_types)) continue else if(isliving(A)) @@ -244,7 +244,7 @@ var/list/blacklisted_tesla_types = typecacheof(list(/obj/machinery/atmospherics, //Alright, we've done our loop, now lets see if was anything interesting in range if(closest_atom) //common stuff - source.Beam(closest_atom, icon_state="lightning[rand(1,12)]", time=5) + source.Beam(closest_atom, icon_state="lightning[rand(1,12)]", time=5, maxdistance = INFINITY) var/zapdir = get_dir(source, closest_atom) if(zapdir) . = zapdir diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index af9858aede..f873ef6083 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -25,7 +25,7 @@ BB = new projectile_type(src) pixel_x = rand(-10, 10) pixel_y = rand(-10, 10) - setDir(pick(alldirs)) + setDir(pick(GLOB.alldirs)) update_icon() /obj/item/ammo_casing/update_icon() diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index 7a03591629..c9553aaac8 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -127,7 +127,7 @@ icon_state = "wt550[magazine ? "-[Ceiling(get_ammo(0)/4)*4]" : ""]" /obj/item/weapon/gun/ballistic/automatic/mini_uzi - name = "\improper 'Type U3' Uzi" + name = "\improper Type U3 Uzi" desc = "A lightweight, burst-fire submachine gun, for when you really want someone dead. Uses 9mm rounds." icon_state = "mini-uzi" origin_tech = "combat=4;materials=2;syndicate=4" @@ -240,7 +240,7 @@ // Bulldog shotgun // /obj/item/weapon/gun/ballistic/automatic/shotgun/bulldog - name = "\improper 'Bulldog' Shotgun" + name = "\improper Bulldog Shotgun" desc = "A semi-auto, mag-fed shotgun for combat in narrow corridors, nicknamed 'Bulldog' by boarding parties. Compatible only with specialized 8-round drum magazines." icon_state = "bulldog" item_state = "bulldog" diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index 3163632a05..69a9ca2a8a 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -18,7 +18,7 @@ /obj/item/weapon/gun/energy/pulse/prize/New() . = ..() - poi_list |= src + GLOB.poi_list |= src var/msg = "A pulse rifle prize has been created at ([x],[y],[z] - (\ \ JMP)" @@ -30,7 +30,7 @@ action = NOTIFY_ORBIT) /obj/item/weapon/gun/energy/pulse/prize/Destroy() - poi_list -= src + GLOB.poi_list -= src . = ..() /obj/item/weapon/gun/energy/pulse/loyalpin diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 127b05e87d..dceed5b438 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -199,8 +199,8 @@ M.Turn(Angle) transform = M - var/Pixel_x=round(sin(Angle)+16*sin(Angle)*2) - var/Pixel_y=round(cos(Angle)+16*cos(Angle)*2) + var/Pixel_x=round((sin(Angle)+16*sin(Angle)*2), 1) //round() is a floor operation when only one argument is supplied, we don't want that here + var/Pixel_y=round((cos(Angle)+16*cos(Angle)*2), 1) var/pixel_x_offset = pixel_x + Pixel_x var/pixel_y_offset = pixel_y + Pixel_y var/new_x = x diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm index 196432c5e6..980ff11211 100644 --- a/code/modules/projectiles/projectile/energy.dm +++ b/code/modules/projectiles/projectile/energy.dm @@ -73,7 +73,7 @@ ..() set_light(3) var/obj/item/device/radio/beacon/teletarget = null - for(var/obj/machinery/computer/teleporter/com in machines) + for(var/obj/machinery/computer/teleporter/com in GLOB.machines) if(com.target) if(com.power_station && com.power_station.teleporter_hub && com.power_station.engaged) teletarget = com.target diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index 944d471500..5cd94748e4 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -122,7 +122,7 @@ var/mob/living/silicon/robot/Robot = M if(Robot.mmi) qdel(Robot.mmi) - Robot.notify_ai(1) + Robot.notify_ai(NEW_BORG) else for(var/obj/item/W in contents) if(!M.dropItemToGround(W)) @@ -261,9 +261,8 @@ if(!new_mob) return - - new_mob.languages_spoken |= HUMAN - new_mob.languages_understood |= HUMAN + new_mob.grant_language(/datum/language/common) + SET_SECONDARY_FLAG(new_mob, OMNITONGUE) new_mob.logging = M.logging // Some forms can still wear some items @@ -293,7 +292,7 @@ ..() /atom/proc/animate_atom_living(var/mob/living/owner = null) - if((istype(src, /obj/item) || istype(src, /obj/structure)) && !is_type_in_list(src, protected_objects)) + if((istype(src, /obj/item) || istype(src, /obj/structure)) && !is_type_in_list(src, GLOB.protected_objects)) if(istype(src, /obj/structure/statue/petrified)) var/obj/structure/statue/petrified/P = src if(P.petrified_mob) diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index e3cdb3566f..b5c2a93996 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -324,7 +324,7 @@ for(var/atom/movable/A in range(T, power)) if(A == src|| (firer && A == src.firer) || A.anchored || thrown_items[A]) continue - A.throw_at(get_edge_target_turf(A, pick(cardinal)), power+1, 1) + A.throw_at(get_edge_target_turf(A, pick(GLOB.cardinal)), power+1, 1) thrown_items[A] = A for(var/turf/Z in range(T,power)) new /obj/effect/overlay/temp/gravpush(Z) diff --git a/code/modules/reagents/chem_splash.dm b/code/modules/reagents/chem_splash.dm index e586e6f806..6839dbd07d 100644 --- a/code/modules/reagents/chem_splash.dm +++ b/code/modules/reagents/chem_splash.dm @@ -42,7 +42,7 @@ for(var/turf/T in (orange(i, epicenter) - orange(i-1, epicenter))) turflist |= T for(var/turf/T in turflist) - if( !(get_dir(T,epicenter) in cardinal) && (abs(T.x - epicenter.x) == abs(T.y - epicenter.y) )) + if( !(get_dir(T,epicenter) in GLOB.cardinal) && (abs(T.x - epicenter.x) == abs(T.y - epicenter.y) )) turflist.Remove(T) turflist.Add(T) // we move the purely diagonal turfs to the end of the list. for(var/turf/T in turflist) @@ -52,7 +52,7 @@ var/turf/NT = thing if(!(NT in accessible)) continue - if(!(get_dir(T,NT) in cardinal)) + if(!(get_dir(T,NT) in GLOB.cardinal)) continue accessible[T] = 1 break diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index bb6f9f7b90..dbbb0b80b9 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -1,11 +1,5 @@ -var/const/TOUCH = 1 //splashing -var/const/INGEST = 2 //ingestion -var/const/VAPOR = 3 //foam, spray, blob attack -var/const/PATCH = 4 //patches -var/const/INJECT = 5 //injection - /////////////////////////////////////////////////////////////////////////////////// /datum/reagents @@ -26,21 +20,21 @@ var/const/INJECT = 5 //injection START_PROCESSING(SSobj, src) //I dislike having these here but map-objects are initialised before world/New() is called. >_> - if(!chemical_reagents_list) + if(!GLOB.chemical_reagents_list) //Chemical Reagents - Initialises all /datum/reagent into a list indexed by reagent id var/paths = subtypesof(/datum/reagent) - chemical_reagents_list = list() + GLOB.chemical_reagents_list = list() for(var/path in paths) var/datum/reagent/D = new path() - chemical_reagents_list[D.id] = D - if(!chemical_reactions_list) + GLOB.chemical_reagents_list[D.id] = D + if(!GLOB.chemical_reactions_list) //Chemical Reactions - Initialises all /datum/chemical_reaction into a list // It is filtered into multiple lists within a list. // For example: // chemical_reaction_list["plasma"] is a list of all reactions relating to plasma var/paths = subtypesof(/datum/chemical_reaction) - chemical_reactions_list = list() + GLOB.chemical_reactions_list = list() for(var/path in paths) @@ -53,9 +47,9 @@ var/const/INJECT = 5 //injection // Create filters based on each reagent id in the required reagents list for(var/id in reaction_ids) - if(!chemical_reactions_list[id]) - chemical_reactions_list[id] = list() - chemical_reactions_list[id] += D + if(!GLOB.chemical_reactions_list[id]) + GLOB.chemical_reactions_list[id] = list() + GLOB.chemical_reactions_list[id] += D break // Don't bother adding ourselves to other reagent ids, it is redundant. /datum/reagents/Destroy() @@ -132,6 +126,18 @@ var/const/INJECT = 5 //injection return id +/datum/reagents/proc/get_master_reagent() + var/list/cached_reagents = reagent_list + var/datum/reagent/master + var/max_volume = 0 + for(var/reagent in cached_reagents) + var/datum/reagent/R = reagent + if(R.volume > max_volume) + max_volume = R.volume + master = R + + return master + /datum/reagents/proc/trans_to(obj/target, amount=1, multiplier=1, preserve_data=1, no_react = 0)//if preserve_data=0, the reagents data will be lost. Usefull if you use data for some strange stuff and don't want it to be transferred. var/list/cached_reagents = reagent_list if(!target || !total_volume) @@ -232,7 +238,7 @@ var/const/INJECT = 5 //injection var/need_mob_update = 0 for(var/reagent in cached_reagents) var/datum/reagent/R = reagent - if(!R.holder) + if(QDELETED(R.holder)) continue if(!C) C = R.holder.my_atom @@ -318,7 +324,7 @@ var/const/INJECT = 5 //injection /datum/reagents/proc/handle_reactions() var/list/cached_reagents = reagent_list - var/list/cached_reactions = chemical_reactions_list + var/list/cached_reactions = GLOB.chemical_reactions_list var/datum/cached_my_atom = my_atom if(flags & REAGENT_NOREACT) return //Yup, no reactions here. No siree. @@ -543,7 +549,7 @@ var/const/INJECT = 5 //injection handle_reactions() return TRUE - var/datum/reagent/D = chemical_reagents_list[reagent] + var/datum/reagent/D = GLOB.chemical_reagents_list[reagent] if(D) var/datum/reagent/R = new D.type(data) diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 4f5894d884..b4166d8070 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -97,7 +97,7 @@ cut_overlays() /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) + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.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, 550, 550, master_ui, state) @@ -129,7 +129,7 @@ var chemicals[0] for(var/re in dispensable_reagents) - var/datum/reagent/temp = chemical_reagents_list[re] + var/datum/reagent/temp = GLOB.chemical_reagents_list[re] if(temp) chemicals.Add(list(list("title" = temp.name, "id" = temp.id))) data["chemicals"] = chemicals diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index 2d0d4f98fa..2c6f7712e4 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -73,7 +73,7 @@ eject_beaker() /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) + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.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, master_ui, state) diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 1b067c3f9c..a94a1c01ff 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -137,7 +137,7 @@ /obj/machinery/chem_master/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/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "chem_master", name, 500, 550, master_ui, state) @@ -321,7 +321,7 @@ . = TRUE if("analyze") - var/datum/reagent/R = chemical_reagents_list[params["id"]] + var/datum/reagent/R = GLOB.chemical_reagents_list[params["id"]] if(R) var/state = "Unknown" if(initial(R.reagent_state) == 1) diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index a369ca1960..cfc8198b38 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -81,8 +81,8 @@ var/vaccine_name = "Unknown" if(!ispath(vaccine_type)) - if(archive_diseases[path]) - var/datum/disease/D = archive_diseases[path] + if(SSdisease.archive_diseases[path]) + var/datum/disease/D = SSdisease.archive_diseases[path] if(D) vaccine_name = D.name vaccine_type = path @@ -106,11 +106,11 @@ var/datum/disease/D = null if(!ispath(type)) D = GetVirusByIndex(text2num(href_list["create_virus_culture"])) - var/datum/disease/advance/A = archive_diseases[D.GetDiseaseID()] + var/datum/disease/advance/A = SSdisease.archive_diseases[D.GetDiseaseID()] if(A) D = new A.type(0, A) else if(type) - if(type in diseases) // Make sure this is a disease + if(type in SSdisease.diseases) // Make sure this is a disease D = new type(0, null) if(!D) return @@ -159,8 +159,8 @@ if(..()) return var/id = GetVirusTypeByIndex(text2num(href_list["name_disease"])) - if(archive_diseases[id]) - var/datum/disease/advance/A = archive_diseases[id] + if(SSdisease.archive_diseases[id]) + var/datum/disease/advance/A = SSdisease.archive_diseases[id] A.AssignName(new_name) for(var/datum/disease/advance/AD in SSdisease.processing) AD.Refresh() @@ -215,7 +215,7 @@ if(istype(D, /datum/disease/advance)) var/datum/disease/advance/A = D - D = archive_diseases[A.GetDiseaseID()] + D = SSdisease.archive_diseases[A.GetDiseaseID()] if(D && D.name == "Unknown") dat += "Name Disease
    " @@ -255,7 +255,7 @@ var/disease_name = "Unknown" if(!ispath(type)) - var/datum/disease/advance/A = archive_diseases[type] + var/datum/disease/advance/A = SSdisease.archive_diseases[type] if(A) disease_name = A.name else diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index 6e748bbc6c..5c8d695007 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -37,6 +37,8 @@ /obj/item/weapon/reagent_containers/food/snacks/grown/tomato = list("ketchup" = 0), /obj/item/weapon/reagent_containers/food/snacks/grown/wheat = list("flour" = -5), /obj/item/weapon/reagent_containers/food/snacks/grown/oat = list("flour" = -5), + /obj/item/weapon/reagent_containers/food/snacks/grown/rice = list("rice" = -5), + /obj/item/weapon/reagent_containers/food/snacks/donut/New = list("sprinkles" = -2, "sugar" = 1), /obj/item/weapon/reagent_containers/food/snacks/grown/cherries = list("cherryjelly" = 0), /obj/item/weapon/reagent_containers/food/snacks/grown/bluecherries = list("bluecherryjelly" = 0), /obj/item/weapon/reagent_containers/food/snacks/egg = list("eggyolk" = -5), diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index be24b7b35c..bc98badc51 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -14,6 +14,10 @@ var/description = "" var/taste_description = "metaphorical salt" var/taste_mult = 1 //how this taste compares to others. Higher values means it is more noticable + var/glass_name = "glass of ...what?" // use for specialty drinks. + var/glass_desc = "You can't really tell what this is." + var/glass_icon_state = null // Otherwise just sets the icon to a normal glass with the mixture of the reagents in the glass. + var/shot_glass_icon_state = null var/datum/reagents/holder = null var/reagent_state = LIQUID var/list/data diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 4ed43cb053..23836e866d 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -79,6 +79,8 @@ All effects don't start immediately, but rather get worse over time; the rate is nutriment_factor = 1 * REAGENTS_METABOLISM boozepwr = 25 taste_description = "piss water" + glass_name = "glass of beer" + glass_desc = "A freezing pint of beer." /datum/reagent/consumable/ethanol/beer/green name = "Green Beer" @@ -86,6 +88,9 @@ All effects don't start immediately, but rather get worse over time; the rate is description = "An alcoholic beverage brewed since ancient times on Old Earth. This variety is dyed a festive green." color = "#A8E61D" taste_description = "green piss water" + glass_icon_state = "greenbeerglass" + glass_name = "glass of green beer" + glass_desc = "A freezing pint of green beer. Festive." /datum/reagent/consumable/ethanol/beer/green/on_mob_life(mob/living/M) if(M.color != color) @@ -101,6 +106,10 @@ All effects don't start immediately, but rather get worse over time; the rate is description = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936!" color = "#664300" // rgb: 102, 67, 0 boozepwr = 45 + glass_icon_state = "kahluaglass" + glass_name = "glass of RR Coffee Liquor" + glass_desc = "DAMN, THIS THING LOOKS ROBUST!" + shot_glass_icon_state = "shotglasscream" /datum/reagent/consumable/ethanol/kahlua/on_mob_life(mob/living/M) M.dizziness = max(0,M.dizziness-5) @@ -116,6 +125,10 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 75 taste_description = "molasses" + glass_icon_state = "whiskeyglass" + glass_name = "glass of whiskey" + glass_desc = "The silky, smokey whiskey goodness inside the glass makes the drink look very classy." + shot_glass_icon_state = "shotglassbrown" /datum/reagent/consumable/ethanol/thirteenloko name = "Thirteen Loko" @@ -125,6 +138,10 @@ All effects don't start immediately, but rather get worse over time; the rate is nutriment_factor = 1 * REAGENTS_METABOLISM boozepwr = 80 taste_description = "jitters and death" + glass_icon_state = "thirteen_loko_glass" + glass_name = "glass of Thirteen Loko" + glass_desc = "This is a glass of Thirteen Loko, it appears to be of the highest quality. The drink, not the glass." + /datum/reagent/consumable/ethanol/thirteenloko/on_mob_life(mob/living/M) M.drowsyness = max(0,M.drowsyness-7) @@ -141,6 +158,10 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#0064C8" // rgb: 0, 100, 200 boozepwr = 65 taste_description = "grain alcohol" + glass_icon_state = "ginvodkaglass" + glass_name = "glass of vodka" + glass_desc = "The glass contain wodka. Xynta." + shot_glass_icon_state = "shotglassclear" /datum/reagent/consumable/ethanol/vodka/on_mob_life(mob/living/M) M.radiation = max(M.radiation-2,0) @@ -154,6 +175,9 @@ All effects don't start immediately, but rather get worse over time; the rate is nutriment_factor = 2 * REAGENTS_METABOLISM boozepwr = 15 taste_description = "desperation and lactate" + glass_icon_state = "glass_brown" + glass_name = "glass of bilk" + glass_desc = "A brew of milk and beer. For those alcoholics who fear osteoporosis." /datum/reagent/consumable/ethanol/bilk/on_mob_life(mob/living/M) if(M.getBruteLoss() && prob(10)) @@ -168,6 +192,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#666340" // rgb: 102, 99, 64 boozepwr = 10 taste_description = "dryness" + glass_icon_state = "threemileislandglass" + glass_name = "Three Mile Island Ice Tea" + glass_desc = "A glass of this is sure to prevent a meltdown." /datum/reagent/consumable/ethanol/threemileisland/on_mob_life(mob/living/M) M.set_drugginess(50) @@ -180,6 +207,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 45 taste_description = "an alcoholic christmas tree" + glass_icon_state = "ginvodkaglass" + glass_name = "glass of gin" + glass_desc = "A crystal clear glass of Griffeater gin." /datum/reagent/consumable/ethanol/rum name = "Rum" @@ -188,6 +218,10 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 60 taste_description = "spiked butterscotch" + glass_icon_state = "rumglass" + glass_name = "glass of rum" + glass_desc = "Now you want to Pray for a pirate suit, don't you?" + shot_glass_icon_state = "shotglassbrown" /datum/reagent/consumable/ethanol/tequila name = "Tequila" @@ -196,6 +230,10 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#FFFF91" // rgb: 255, 255, 145 boozepwr = 70 taste_description = "paint stripper" + glass_icon_state = "tequilaglass" + glass_name = "glass of tequila" + glass_desc = "Now all that's missing is the weird colored shades!" + shot_glass_icon_state = "shotglassgold" /datum/reagent/consumable/ethanol/vermouth name = "Vermouth" @@ -204,6 +242,10 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#91FF91" // rgb: 145, 255, 145 boozepwr = 45 taste_description = "dry alcohol" + glass_icon_state = "vermouthglass" + glass_name = "glass of vermouth" + glass_desc = "You wonder why you're even drinking this straight." + shot_glass_icon_state = "shotglassclear" /datum/reagent/consumable/ethanol/wine name = "Wine" @@ -212,6 +254,10 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#7E4043" // rgb: 126, 64, 67 boozepwr = 35 taste_description = "bitter sweetness" + glass_icon_state = "wineglass" + glass_name = "glass of wine" + glass_desc = "A very classy looking drink." + shot_glass_icon_state = "shotglassred" /datum/reagent/consumable/ethanol/lizardwine name = "Lizard wine" @@ -228,6 +274,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#F8EBF1" boozepwr = 45 taste_description = "classy bitter sweetness" + glass_icon_state = "grappa" + glass_name = "glass of grappa" + glass_desc = "A fine drink originally made to prevent waste by using the leftovers from winemaking." /datum/reagent/consumable/ethanol/cognac name = "Cognac" @@ -236,6 +285,10 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#AB3C05" // rgb: 171, 60, 5 boozepwr = 75 taste_description = "angry and irish" + glass_icon_state = "cognacglass" + glass_name = "glass of cognac" + glass_desc = "Damn, you feel like some kind of French aristocrat just by holding this." + shot_glass_icon_state = "shotglassbrown" /datum/reagent/consumable/ethanol/absinthe name = "Absinthe" @@ -244,6 +297,10 @@ All effects don't start immediately, but rather get worse over time; the rate is color = rgb(10, 206, 0) boozepwr = 80 //Very strong even by default taste_description = "death and licorice" + glass_icon_state = "absinthe" + glass_name = "glass of absinthe" + glass_desc = "It's as strong as it smells." + shot_glass_icon_state = "shotglassgreen" /datum/reagent/consumable/ethanol/absinthe/on_mob_life(mob/living/M) if(prob(10)) @@ -257,6 +314,10 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 100 taste_description = "pure resignation" + glass_icon_state = "glass_brown2" + glass_name = "Hooch" + glass_desc = "You've really hit rock bottom now... your liver packed its bags and left last night." + /datum/reagent/consumable/ethanol/ale name = "Ale" @@ -265,6 +326,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 65 taste_description = "hearty barley ale" + glass_icon_state = "aleglass" + glass_name = "glass of ale" + glass_desc = "A freezing pint of delicious Ale." /datum/reagent/consumable/ethanol/goldschlager name = "Goldschlager" @@ -273,6 +337,10 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#FFFF91" // rgb: 255, 255, 145 boozepwr = 25 taste_description = "burning cinnamon" + glass_icon_state = "goldschlagerglass" + glass_name = "glass of Goldschlager" + glass_desc = "100% proof that teen girls will drink anything with gold in it." + shot_glass_icon_state = "shotglassgold" /datum/reagent/consumable/ethanol/patron name = "Patron" @@ -281,6 +349,10 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#585840" // rgb: 88, 88, 64 boozepwr = 60 taste_description = "metallic and expensive" + glass_icon_state = "patronglass" + glass_name = "glass of patron" + glass_desc = "Drinking patron in the bar, with all the subpar ladies." + shot_glass_icon_state = "shotglassclear" /datum/reagent/consumable/ethanol/gintonic name = "Gin and Tonic" @@ -289,6 +361,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 25 taste_description = "mild and tart" + glass_icon_state = "gintonicglass" + glass_name = "Gin and Tonic" + glass_desc = "A mild but still great cocktail. Drink up, like a true Englishman." /datum/reagent/consumable/ethanol/cuba_libre name = "Cuba Libre" @@ -297,6 +372,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#3E1B00" // rgb: 62, 27, 0 boozepwr = 50 taste_description = "cola" + glass_icon_state = "cubalibreglass" + glass_name = "Cuba Libre" + glass_desc = "A classic mix of rum and cola." /datum/reagent/consumable/ethanol/cuba_libre/on_mob_life(mob/living/M) if(M.mind && M.mind.special_role in list("Revolutionary", "Head Revolutionary")) //Cuba Libre, the traditional drink of revolutions! Heals revolutionaries. @@ -314,6 +392,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#3E1B00" // rgb: 62, 27, 0 boozepwr = 70 taste_description = "cola" + glass_icon_state = "whiskeycolaglass" + glass_name = "Whiskey Cola" + glass_desc = "An innocent-looking mixture of cola and Whiskey. Delicious." /datum/reagent/consumable/ethanol/martini name = "Classic Martini" @@ -322,6 +403,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 60 taste_description = "dry class" + glass_icon_state = "martiniglass" + glass_name = "Classic Martini" + glass_desc = "Damn, the bartender even stirred it, not shook it." /datum/reagent/consumable/ethanol/vodkamartini name = "Vodka Martini" @@ -330,6 +414,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 65 taste_description = "shaken, not stirred" + glass_icon_state = "martiniglass" + glass_name = "Vodka martini" + glass_desc ="A bastardisation of the classic martini. Still great." /datum/reagent/consumable/ethanol/white_russian name = "White Russian" @@ -338,6 +425,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#A68340" // rgb: 166, 131, 64 boozepwr = 50 taste_description = "bitter cream" + glass_icon_state = "whiterussianglass" + glass_name = "White Russian" + glass_desc = "A very nice looking drink. But that's just, like, your opinion, man." /datum/reagent/consumable/ethanol/screwdrivercocktail name = "Screwdriver" @@ -346,6 +436,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#A68310" // rgb: 166, 131, 16 boozepwr = 55 taste_description = "oranges" + glass_icon_state = "screwdriverglass" + glass_name = "Screwdriver" + glass_desc = "A simple, yet superb mixture of Vodka and orange juice. Just the thing for the tired engineer." /datum/reagent/consumable/ethanol/screwdrivercocktail/on_mob_life(mob/living/M) if(M.mind && M.mind.assigned_role in list("Station Engineer", "Atmospheric Technician", "Chief Engineer")) //Engineers lose radiation poisoning at a massive rate. @@ -359,6 +452,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#8CFF8C" // rgb: 140, 255, 140 boozepwr = 45 taste_description = "sweet 'n creamy" + glass_icon_state = "booger" + glass_name = "Booger" + glass_desc = "Ewww..." /datum/reagent/consumable/ethanol/bloody_mary name = "Bloody Mary" @@ -367,6 +463,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 55 taste_description = "tomatoes with a hint of lime" + glass_icon_state = "bloodymaryglass" + glass_name = "Bloody Mary" + glass_desc = "Tomato juice, mixed with Vodka and a lil' bit of lime. Tastes like liquid murder." /datum/reagent/consumable/ethanol/brave_bull name = "Brave Bull" @@ -375,6 +474,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 80 taste_description = "alcoholic bravery" + glass_icon_state = "bravebullglass" + glass_name = "Brave Bull" + glass_desc = "Tequila and Coffee liqueur, brought together in a mouthwatering mixture. Drink up." /datum/reagent/consumable/ethanol/brave_bull/on_mob_life(mob/living/M) if(M.maxHealth == initial(M.maxHealth)) //Brave Bull makes you sturdier, and thus capable of withstanding a tiny bit more punishment. @@ -393,6 +495,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#FFE48C" // rgb: 255, 228, 140 boozepwr = 45 taste_description = "oranges" + glass_icon_state = "tequilasunriseglass" + glass_name = "tequila Sunrise" + glass_desc = "Oh great, now you feel nostalgic about sunrises back on Terra..." /datum/reagent/consumable/ethanol/toxins_special name = "Toxins Special" @@ -401,6 +506,10 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 25 taste_description = "spicy toxins" + glass_icon_state = "toxinsspecialglass" + glass_name = "Toxins Special" + glass_desc = "Whoah, this thing is on FIRE!" + shot_glass_icon_state = "toxinsspecialglass" /datum/reagent/consumable/ethanol/toxins_special/on_mob_life(var/mob/living/M as mob) if (M.bodytemperature < 330) @@ -415,6 +524,9 @@ All effects don't start immediately, but rather get worse over time; the rate is boozepwr = 90 //THE FIST OF THE LAW IS STRONG AND HARD metabolization_rate = 0.8 taste_description = "JUSTICE" + glass_icon_state = "beepskysmashglass" + glass_name = "Beepsky Smash" + glass_desc = "Heavy, hot and strong. Just like the Iron fist of the LAW." /datum/reagent/consumable/ethanol/beepsky_smash/on_mob_life(mob/living/M) M.Stun(2, 0) @@ -427,6 +539,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 70 taste_description = "creamy alcohol" + glass_icon_state = "irishcreamglass" + glass_name = "Irish Cream" + glass_desc = "It's cream, mixed with whiskey. What else would you expect from the Irish?" /datum/reagent/consumable/ethanol/manly_dorf name = "The Manly Dorf" @@ -435,6 +550,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 100 //For the manly only taste_description = "hair on your chest and your chin" + glass_icon_state = "manlydorfglass" + glass_name = "The Manly Dorf" + glass_desc = "A manly concoction made from Ale and Beer. Intended for true men only." /datum/reagent/consumable/ethanol/longislandicedtea name = "Long Island Iced Tea" @@ -443,6 +561,10 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 35 taste_description = "a mixture of cola and alcohol" + glass_icon_state = "longislandicedteaglass" + glass_name = "Long Island Iced Tea" + glass_desc = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only." + /datum/reagent/consumable/ethanol/moonshine name = "Moonshine" @@ -451,6 +573,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 95 taste_description = "bitterness" + glass_icon_state = "glass_clear" + glass_name = "Moonshine" + glass_desc = "You've really hit rock bottom now... your liver packed its bags and left last night." /datum/reagent/consumable/ethanol/b52 name = "B-52" @@ -459,6 +584,10 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 85 taste_description = "angry and irish" + glass_icon_state = "b52glass" + glass_name = "B-52" + glass_desc = "Kahlua, Irish Cream, and cognac. You will get bombed." + shot_glass_icon_state = "b52glass" /datum/reagent/consumable/ethanol/irishcoffee name = "Irish Coffee" @@ -467,6 +596,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 35 taste_description = "giving up on the day" + glass_icon_state = "irishcoffeeglass" + glass_name = "Irish Coffee" + glass_desc = "Coffee and alcohol. More fun than a Mimosa to drink in the morning." /datum/reagent/consumable/ethanol/margarita name = "Margarita" @@ -475,6 +607,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#8CFF8C" // rgb: 140, 255, 140 boozepwr = 35 taste_description = "dry and salty" + glass_icon_state = "margaritaglass" + glass_name = "Margarita" + glass_desc = "On the rocks with salt on the rim. Arriba~!" /datum/reagent/consumable/ethanol/black_russian name = "Black Russian" @@ -483,6 +618,10 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#360000" // rgb: 54, 0, 0 boozepwr = 70 taste_description = "bitterness" + glass_icon_state = "blackrussianglass" + glass_name = "Black Russian" + glass_desc = "For the lactose-intolerant. Still as classy as a White Russian." + /datum/reagent/consumable/ethanol/manhattan name = "Manhattan" @@ -491,6 +630,10 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 30 taste_description = "mild dryness" + glass_icon_state = "manhattanglass" + glass_name = "Manhattan" + glass_desc = "The Detective's undercover drink of choice. He never could stomach gin..." + /datum/reagent/consumable/ethanol/manhattan_proj name = "Manhattan Project" @@ -499,6 +642,10 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 45 taste_description = "death, the destroyer of worlds" + glass_icon_state = "proj_manhattanglass" + glass_name = "Manhattan Project" + glass_desc = "A scientist's drink of choice, for thinking how to blow up the station." + /datum/reagent/consumable/ethanol/manhattan_proj/on_mob_life(mob/living/M) M.set_drugginess(30) @@ -511,6 +658,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 70 taste_description = "soda" + glass_icon_state = "whiskeysodaglass2" + glass_name = "Whiskey Soda" + glass_desc = "Ultimate refreshment." /datum/reagent/consumable/ethanol/antifreeze name = "Anti-freeze" @@ -519,6 +669,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 35 taste_description = "Jack Frost's piss" + glass_icon_state = "antifreeze" + glass_name = "Anti-freeze" + glass_desc = "The ultimate refreshment." /datum/reagent/consumable/ethanol/antifreeze/on_mob_life(mob/living/M) if (M.bodytemperature < 330) @@ -532,6 +685,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 45 taste_description = "creamy berries" + glass_icon_state = "b&p" + glass_name = "Barefoot" + glass_desc = "Barefoot and pregnant." /datum/reagent/consumable/ethanol/barefoot/on_mob_life(mob/living/M) if(ishuman(M)) //Barefoot causes the imbiber to quickly regenerate brute trauma if they're not wearing shoes. @@ -548,6 +704,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#FFFFFF" // rgb: 255, 255, 255 boozepwr = 35 taste_description = "refreshing cold" + glass_icon_state = "snowwhite" + glass_name = "Snow White" + glass_desc = "A cold refreshment." /datum/reagent/consumable/ethanol/demonsblood //Prevents the imbiber from being dragged into a pool of blood by a slaughter demon. name = "Demon's Blood" @@ -556,6 +715,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#820000" // rgb: 130, 0, 0 boozepwr = 75 taste_description = "sweet tasting iron" + glass_icon_state = "demonsblood" + glass_name = "Demons Blood" + glass_desc = "Just looking at this thing makes the hair at the back of your neck stand up." /datum/reagent/consumable/ethanol/devilskiss //If eaten by a slaughter demon, the demon will regret it. name = "Devil's Kiss" @@ -564,6 +726,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#A68310" // rgb: 166, 131, 16 boozepwr = 70 taste_description = "bitter iron" + glass_icon_state = "devilskiss" + glass_name = "Devils Kiss" + glass_desc = "Creepy time!" /datum/reagent/consumable/ethanol/vodkatonic name = "Vodka and Tonic" @@ -572,6 +737,10 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#0064C8" // rgb: 0, 100, 200 boozepwr = 70 taste_description = "tart bitterness" + glass_icon_state = "vodkatonicglass" + glass_name = "Vodka and Tonic" + glass_desc = "For when a gin and tonic isn't Russian enough." + /datum/reagent/consumable/ethanol/ginfizz name = "Gin Fizz" @@ -580,6 +749,10 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 45 taste_description = "dry, tart lemons" + glass_icon_state = "ginfizzglass" + glass_name = "Gin Fizz" + glass_desc = "Refreshingly lemony, deliciously dry." + /datum/reagent/consumable/ethanol/bahama_mama name = "Bahama Mama" @@ -588,6 +761,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#FF7F3B" // rgb: 255, 127, 59 boozepwr = 35 taste_description = "lime and orange" + glass_icon_state = "bahama_mama" + glass_name = "Bahama Mama" + glass_desc = "Tropical cocktail." /datum/reagent/consumable/ethanol/singulo name = "Singulo" @@ -596,6 +772,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#2E6671" // rgb: 46, 102, 113 boozepwr = 35 taste_description = "concentrated matter" + glass_icon_state = "singulo" + glass_name = "Singulo" + glass_desc = "A blue-space beverage." /datum/reagent/consumable/ethanol/sbiten name = "Sbiten" @@ -604,6 +783,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 70 taste_description = "hot and spice" + glass_icon_state = "sbitenglass" + glass_name = "Sbiten" + glass_desc = "A spicy mix of Vodka and Spice. Very hot." /datum/reagent/consumable/ethanol/sbiten/on_mob_life(mob/living/M) if (M.bodytemperature < 360) @@ -617,6 +799,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#C73C00" // rgb: 199, 60, 0 boozepwr = 51 //Red drinks are stronger taste_description = "sweet and salty alcohol" + glass_icon_state = "red_meadglass" + glass_name = "Red Mead" + glass_desc = "A True Viking's Beverage, though its color is strange." /datum/reagent/consumable/ethanol/mead name = "Mead" @@ -626,6 +811,9 @@ All effects don't start immediately, but rather get worse over time; the rate is nutriment_factor = 1 * REAGENTS_METABOLISM boozepwr = 50 taste_description = "sweet, sweet alcohol" + glass_icon_state = "meadglass" + glass_name = "Mead" + glass_desc = "A Viking's Beverage, though a cheap one." /datum/reagent/consumable/ethanol/iced_beer name = "Iced Beer" @@ -634,6 +822,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 15 taste_description = "refreshingly cold" + glass_icon_state = "iced_beerglass" + glass_name = "Iced Beer" + glass_desc = "A beer so frosty, the air around it freezes." /datum/reagent/consumable/ethanol/iced_beer/on_mob_life(mob/living/M) if(M.bodytemperature > 270) @@ -647,6 +838,10 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 1 //Basically nothing taste_description = "a poor excuse for alcohol" + glass_icon_state = "grogglass" + glass_name = "Grog" + glass_desc = "A fine and cepa drink for Space." + /datum/reagent/consumable/ethanol/aloe name = "Aloe" @@ -655,6 +850,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 35 taste_description = "sweet 'n creamy" + glass_icon_state = "aloe" + glass_name = "Aloe" + glass_desc = "Very, very, very good." /datum/reagent/consumable/ethanol/andalusia name = "Andalusia" @@ -663,6 +861,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 40 taste_description = "lemons" + glass_icon_state = "andalusia" + glass_name = "Andalusia" + glass_desc = "A nice, strangely named drink." /datum/reagent/consumable/ethanol/alliescocktail name = "Allies Cocktail" @@ -671,6 +872,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 45 taste_description = "bitter yet free" + glass_icon_state = "alliescocktail" + glass_name = "Allies cocktail" + glass_desc = "A drink made from your allies." /datum/reagent/consumable/ethanol/acid_spit name = "Acid Spit" @@ -679,6 +883,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#365000" // rgb: 54, 80, 0 boozepwr = 80 taste_description = "stomach acid" + glass_icon_state = "acidspitglass" + glass_name = "Acid Spit" + glass_desc = "A drink from Nanotrasen. Made from live aliens." /datum/reagent/consumable/ethanol/amasec name = "Amasec" @@ -687,6 +894,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 35 taste_description = "dark and metallic" + glass_icon_state = "amasecglass" + glass_name = "Amasec" + glass_desc = "Always handy before COMBAT!!!" /datum/reagent/consumable/ethanol/changelingsting name = "Changeling Sting" @@ -695,6 +905,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#2E6671" // rgb: 46, 102, 113 boozepwr = 95 taste_description = "your brain coming out your nose" + glass_icon_state = "changelingsting" + glass_name = "Changeling Sting" + glass_desc = "A stingy drink." /datum/reagent/consumable/ethanol/changelingsting/on_mob_life(mob/living/M) if(M.mind && M.mind.changeling) //Changeling Sting assists in the recharging of changeling chemicals. @@ -709,6 +922,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#2E6671" // rgb: 46, 102, 113 boozepwr = 25 taste_description = "delicious anger" + glass_icon_state = "irishcarbomb" + glass_name = "Irish Car Bomb" + glass_desc = "An Irish car bomb." /datum/reagent/consumable/ethanol/syndicatebomb name = "Syndicate Bomb" @@ -717,6 +933,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#2E6671" // rgb: 46, 102, 113 boozepwr = 90 taste_description = "purified antagonism" + glass_icon_state = "syndicatebomb" + glass_name = "Syndicate Bomb" + glass_desc = "A syndicate bomb." /datum/reagent/consumable/ethanol/syndicatebomb/on_mob_life(mob/living/M) if(prob(5)) @@ -730,6 +949,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#2E6671" // rgb: 46, 102, 113 boozepwr = 35 taste_description = "tartness and bananas" + glass_icon_state = "erikasurprise" + glass_name = "Erika Surprise" + glass_desc = "The surprise is, it's green!" /datum/reagent/consumable/ethanol/driestmartini name = "Driest Martini" @@ -739,6 +961,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#2E6671" // rgb: 46, 102, 113 boozepwr = 65 taste_description = "a beach" + glass_icon_state = "driestmartiniglass" + glass_name = "Driest Martini" + glass_desc = "Only for the experienced. You think you see sand floating in the glass." /datum/reagent/consumable/ethanol/bananahonk name = "Banana Mama" @@ -748,6 +973,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#FFFF91" // rgb: 255, 255, 140 boozepwr = 60 taste_description = "a bad joke" + glass_icon_state = "bananahonkglass" + glass_name = "Banana Honk" + glass_desc = "A drink from Clown Heaven." /datum/reagent/consumable/ethanol/bananahonk/on_mob_life(mob/living/M) if((ishuman(M) && M.job in list("Clown") ) || ismonkey(M)) @@ -763,6 +991,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 59 //Proof that clowns are better than mimes right here taste_description = "a pencil eraser" + glass_icon_state = "silencerglass" + glass_name = "Silencer" + glass_desc = "A drink from Mime Heaven." /datum/reagent/consumable/ethanol/silencer/on_mob_life(mob/living/M) if(ishuman(M) && M.job in list("Mime")) @@ -777,6 +1008,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#1EA0FF" // rgb: 102, 67, 0 boozepwr = 50 taste_description = "molasses and a mouthful of pool water" + glass_icon_state = "drunkenblumpkin" + glass_name = "Drunken Blumpkin" + glass_desc = "A drink for the drunks." /datum/reagent/consumable/ethanol/whiskey_sour //Requested since we had whiskey cola and soda but not sour. name = "Whiskey Sour" @@ -785,6 +1019,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = rgb(255, 201, 49) boozepwr = 35 taste_description = "sour lemons" + glass_icon_state = "whiskey_sour" + glass_name = "Whiskey Sour" + glass_desc = "Lemon juice mixed with whiskey and a dash of sugar. Surprisingly satisfying." /datum/reagent/consumable/ethanol/hcider name = "Hard Cider" @@ -794,6 +1031,10 @@ All effects don't start immediately, but rather get worse over time; the rate is nutriment_factor = 1 * REAGENTS_METABOLISM boozepwr = 25 taste_description = "apples" + glass_icon_state = "whiskeyglass" + glass_name = "Hard Cider" + glass_desc = "Tastes like autumn." + shot_glass_icon_state = "shotglassbrown" /datum/reagent/consumable/ethanol/fetching_fizz //A reference to one of my favorite games of all time. Pulls nearby ores to the imbiber! @@ -804,6 +1045,10 @@ All effects don't start immediately, but rather get worse over time; the rate is boozepwr = 10 metabolization_rate = 0.1 * REAGENTS_METABOLISM taste_description = "charged metal" // the same as teslium, honk honk. + glass_icon_state = "fetching_fizz" + glass_name = "Fetching Fizz" + glass_desc = "Induces magnetism in the imbiber. Started as a barroom prank but evolved to become popular with miners and scrappers. Metallic aftertaste." + /datum/reagent/consumable/ethanol/fetching_fizz/on_mob_life(mob/living/M) for(var/obj/item/weapon/ore/O in orange(3, M)) @@ -819,6 +1064,9 @@ All effects don't start immediately, but rather get worse over time; the rate is boozepwr = 10 metabolization_rate = 0.1 * REAGENTS_METABOLISM taste_description = "bravado in the face of disaster" + glass_icon_state = "hearty_punch" + glass_name = "Hearty Punch" + glass_desc = "Aromatic beverage served piping hot. According to folk tales it can almost wake the dead." /datum/reagent/consumable/ethanol/hearty_punch/on_mob_life(mob/living/M) if(M.stat == UNCONSCIOUS && M.health <= 0) @@ -837,6 +1085,10 @@ All effects don't start immediately, but rather get worse over time; the rate is color = rgb(51, 19, 3) //Sickly brown boozepwr = 300 //I warned you taste_description = "a wall of bricks" + glass_icon_state = "glass_brown2" + glass_name = "Bacchus' Blessing" + glass_desc = "You didn't think it was possible for a liquid to be so utterly revolting. Are you sure about this...?" + /datum/reagent/consumable/ethanol/atomicbomb @@ -846,6 +1098,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#666300" // rgb: 102, 99, 0 boozepwr = 0 //custom drunk effect taste_description = "da bomb" + glass_icon_state = "atomicbombglass" + glass_name = "Atomic Bomb" + glass_desc = "Nanotrasen cannot take legal responsibility for your actions after imbibing." /datum/reagent/consumable/ethanol/atomicbomb/on_mob_life(mob/living/M) M.set_drugginess(50) @@ -871,6 +1126,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#664300" // rgb: 102, 67, 0 boozepwr = 0 //custom drunk effect taste_description = "your brains smashed out by a lemon wrapped around a gold brick" + glass_icon_state = "gargleblasterglass" + glass_name = "Pan-Galactic Gargle Blaster" + glass_desc = "Like having your brain smashed out by a slice of lemon wrapped around a large gold brick." /datum/reagent/consumable/ethanol/gargle_blaster/on_mob_life(mob/living/M) M.dizziness +=6 @@ -896,6 +1154,9 @@ All effects don't start immediately, but rather get worse over time; the rate is color = "#2E2E61" // rgb: 46, 46, 97 boozepwr = 0 //custom drunk effect taste_description = "a numbing sensation" + glass_icon_state = "neurotoxinglass" + glass_name = "Neurotoxin" + glass_desc = "A drink that is guaranteed to knock you silly." /datum/reagent/consumable/ethanol/neurotoxin/on_mob_life(mob/living/carbon/M) M.Weaken(3, 1, 0) @@ -924,6 +1185,9 @@ All effects don't start immediately, but rather get worse over time; the rate is boozepwr = 0 //custom drunk effect metabolization_rate = 0.2 * REAGENTS_METABOLISM taste_description = "giving peace a chance" + glass_icon_state = "hippiesdelightglass" + glass_name = "Hippie's Delight" + glass_desc = "A drink enjoyed by people during the 1960's." /datum/reagent/consumable/ethanol/hippies_delight/on_mob_life(mob/living/M) if (!M.slurring) @@ -965,3 +1229,6 @@ All effects don't start immediately, but rather get worse over time; the rate is nutriment_factor = 2 * REAGENTS_METABOLISM boozepwr = 1 taste_description = "custard and alcohol" + glass_icon_state = "glass_yellow" + glass_name = "Eggnog" + glass_desc = "For enjoying the most wonderful time of the year." diff --git a/code/modules/reagents/chemistry/reagents/blob_reagents.dm b/code/modules/reagents/chemistry/reagents/blob_reagents.dm index dfc44b4eb4..e940081db3 100644 --- a/code/modules/reagents/chemistry/reagents/blob_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/blob_reagents.dm @@ -164,7 +164,7 @@ M.emote("scream") /datum/reagent/blob/blazing_oil/extinguish_reaction(obj/structure/blob/B) - B.take_damage(rand(1, 3), BURN, "energy") + B.take_damage(1.5, BURN, "energy") /datum/reagent/blob/blazing_oil/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) if(damage_type == BURN && damage_flag != "energy") diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm index 2b706f189b..85f11b8b57 100644 --- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm @@ -10,6 +10,9 @@ description = "Both delicious AND rich in Vitamin C, what more do you need?" color = "#E78108" // rgb: 231, 129, 8 taste_description = "oranges" + glass_icon_state = "glass_orange" + glass_name = "glass of orange juice" + glass_desc = "Vitamins! Yay!" /datum/reagent/consumable/orangejuice/on_mob_life(mob/living/M) if(M.getOxyLoss() && prob(30)) @@ -23,6 +26,9 @@ description = "Tomatoes made into juice. What a waste of big, juicy tomatoes, huh?" color = "#731008" // rgb: 115, 16, 8 taste_description = "tomatoes" + glass_icon_state = "glass_red" + glass_name = "glass of tomato juice" + glass_desc = "Are you sure this is tomato juice?" /datum/reagent/consumable/tomatojuice/on_mob_life(mob/living/M) if(M.getFireLoss() && prob(20)) @@ -36,6 +42,9 @@ description = "The sweet-sour juice of limes." color = "#365E30" // rgb: 54, 94, 48 taste_description = "unbearable sourness" + glass_icon_state = "glass_green" + glass_name = "glass of lime juice" + glass_desc = "A glass of sweet-sour lime juice." /datum/reagent/consumable/limejuice/on_mob_life(mob/living/M) if(M.getToxLoss() && prob(20)) @@ -49,6 +58,9 @@ description = "It is just like a carrot but without crunching." color = "#973800" // rgb: 151, 56, 0 taste_description = "carrots" + glass_icon_state = "carrotjuice" + glass_name = "glass of carrot juice" + glass_desc = "It's just like a carrot but without crunching." /datum/reagent/consumable/carrotjuice/on_mob_life(mob/living/M) M.adjust_blurriness(-1) @@ -68,6 +80,9 @@ description = "A delicious blend of several different kinds of berries." color = "#863333" // rgb: 134, 51, 51 taste_description = "berries" + glass_icon_state = "berryjuice" + glass_name = "glass of berry juice" + glass_desc = "Berry juice. Or maybe it's jam. Who cares?" /datum/reagent/consumable/applejuice name = "Apple Juice" @@ -82,6 +97,9 @@ description = "A tasty juice blended from various kinds of very deadly and toxic berries." color = "#863353" // rgb: 134, 51, 83 taste_description = "berries" + glass_icon_state = "poisonberryjuice" + glass_name = "glass of berry juice" + glass_desc = "Berry juice. Or maybe it's poison. Who cares?" /datum/reagent/consumable/poisonberryjuice/on_mob_life(mob/living/M) M.adjustToxLoss(1, 0) @@ -94,6 +112,9 @@ description = "Delicious juice made from watermelon." color = "#863333" // rgb: 134, 51, 51 taste_description = "juicy watermelon" + glass_icon_state = "glass_red" + glass_name = "glass of watermelon juice" + glass_desc = "A glass of watermelon juice." /datum/reagent/consumable/lemonjuice name = "Lemon Juice" @@ -101,6 +122,9 @@ description = "This juice is VERY sour." color = "#863333" // rgb: 175, 175, 0 taste_description = "sourness" + glass_icon_state = "lemonglass" + glass_name = "glass of lemon juice" + glass_desc = "Sour..." /datum/reagent/consumable/banana name = "Banana Juice" @@ -108,6 +132,9 @@ description = "The raw essence of a banana. HONK" color = "#863333" // rgb: 175, 175, 0 taste_description = "banana" + glass_icon_state = "banana" + glass_name = "glass of banana juice" + glass_desc = "The raw essence of a banana. HONK." /datum/reagent/consumable/banana/on_mob_life(mob/living/M) if((ishuman(M) && M.job in list("Clown") ) || ismonkey(M)) @@ -120,6 +147,10 @@ id = "nothing" description = "Absolutely nothing." taste_description = "nothing" + glass_icon_state = "nothing" + glass_name = "Nothing" + glass_desc = "Absolutely nothing." + shot_glass_icon_state = "shotglass" /datum/reagent/consumable/nothing/on_mob_life(mob/living/M) if(ishuman(M) && M.job in list("Mime")) @@ -159,6 +190,9 @@ nutriment_factor = 2 * REAGENTS_METABOLISM color = "#302000" // rgb: 48, 32, 0 taste_description = "irish sadness" + glass_icon_state = "glass_brown" + glass_name = "glass of potato juice" + glass_desc = "Bleh..." /datum/reagent/consumable/grapejuice name = "Grape Juice" @@ -173,6 +207,9 @@ description = "An opaque white liquid produced by the mammary glands of mammals." color = "#DFDFDF" // rgb: 223, 223, 223 taste_description = "milk" + glass_icon_state = "glass_white" + glass_name = "glass of milk" + glass_desc = "White and nutritious goodness!" /datum/reagent/consumable/milk/on_mob_life(mob/living/M) if(M.getBruteLoss() && prob(20)) @@ -192,6 +229,9 @@ description = "An opaque white liquid made from soybeans." color = "#DFDFC7" // rgb: 223, 223, 199 taste_description = "soy milk" + glass_icon_state = "glass_white" + glass_name = "glass of soy milk" + glass_desc = "White and nutritious soy goodness!" /datum/reagent/consumable/soymilk/on_mob_life(mob/living/M) if(M.getBruteLoss() && prob(20)) @@ -205,6 +245,9 @@ description = "The fatty, still liquid part of milk. Why don't you mix this with sum scotch, eh?" color = "#DFD7AF" // rgb: 223, 215, 175 taste_description = "creamy milk" + glass_icon_state = "glass_white" + glass_name = "glass of cream" + glass_desc = "Ewwww..." /datum/reagent/consumable/cream/on_mob_life(mob/living/M) if(M.getBruteLoss() && prob(20)) @@ -220,6 +263,9 @@ nutriment_factor = 0 overdose_threshold = 80 taste_description = "bitterness" + glass_icon_state = "glass_brown" + glass_name = "glass of coffee" + glass_desc = "Don't drop it, or you'll send scalding liquid and glass shards everywhere." /datum/reagent/consumable/coffee/overdose_process(mob/living/M) M.Jitter(5) @@ -243,6 +289,9 @@ color = "#101000" // rgb: 16, 16, 0 nutriment_factor = 0 taste_description = "tart black tea" + glass_icon_state = "teaglass" + glass_name = "glass of tea" + glass_desc = "Drinking it from here would not seem right." /datum/reagent/consumable/tea/on_mob_life(mob/living/M) M.dizziness = max(0,M.dizziness-2) @@ -263,6 +312,9 @@ color = "#FFB766" nutriment_factor = 2 taste_description = "bitter tea" + glass_icon_state = "arnold_palmer" + glass_name = "Arnold Palmer" + glass_desc = "You feel like taking a few golf swings after a few swigs of this." /datum/reagent/consumable/tea/arnold_palmer/on_mob_life(mob/living/M) if(prob(5)) @@ -277,6 +329,9 @@ color = "#102838" // rgb: 16, 40, 56 nutriment_factor = 0 taste_description = "bitter coldness" + glass_icon_state = "icedcoffeeglass" + glass_name = "Iced Coffee" + glass_desc = "A drink to perk you up and refresh you!" /datum/reagent/consumable/icecoffee/on_mob_life(mob/living/M) M.dizziness = max(0,M.dizziness-5) @@ -295,6 +350,9 @@ color = "#104038" // rgb: 16, 64, 56 nutriment_factor = 0 taste_description = "sweet tea" + glass_icon_state = "icedteaglass" + glass_name = "Iced Tea" + glass_desc = "All natural, antioxidant-rich flavour sensation." /datum/reagent/consumable/icetea/on_mob_life(mob/living/M) M.dizziness = max(0,M.dizziness-2) @@ -313,6 +371,9 @@ description = "A refreshing beverage." color = "#100800" // rgb: 16, 8, 0 taste_description = "cola" + glass_icon_state = "glass_brown" + glass_name = "glass of space Cola" + glass_desc = "A glass of refreshing Space Cola." /datum/reagent/consumable/space_cola/on_mob_life(mob/living/M) M.drowsyness = max(0,M.drowsyness-5) @@ -326,6 +387,9 @@ description = "Cola, cola never changes." color = "#100800" // rgb: 16, 8, 0 taste_description = "the future" + glass_icon_state = "nuka_colaglass" + glass_name = "Nuka Cola" + glass_desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland." /datum/reagent/consumable/nuka_cola/on_mob_life(mob/living/M) M.Jitter(20) @@ -345,6 +409,9 @@ description = "Blows right through you like a space wind." color = "#102000" // rgb: 16, 32, 0 taste_description = "sweet citrus soda" + glass_icon_state = "Space_mountain_wind_glass" + glass_name = "glass of Space Mountain Wind" + glass_desc = "Space Mountain Wind. As you know, there are no mountains in space, only wind." /datum/reagent/consumable/spacemountainwind/on_mob_life(mob/living/M) M.drowsyness = max(0,M.drowsyness-7) @@ -361,6 +428,9 @@ description = "A delicious blend of 42 different flavours." color = "#102000" // rgb: 16, 32, 0 taste_description = "cherry soda" // FALSE ADVERTISING + glass_icon_state = "dr_gibb_glass" + glass_name = "glass of Dr. Gibb" + glass_desc = "Dr. Gibb. Not as dangerous as the glass_name might imply." /datum/reagent/consumable/dr_gibb/on_mob_life(mob/living/M) M.drowsyness = max(0,M.drowsyness-6) @@ -374,6 +444,10 @@ description = "Tastes like a hull breach in your mouth." color = "#00FF00" // rgb: 0, 255, 0 taste_description = "cherry soda" + glass_icon_state = "space-up_glass" + glass_name = "glass of Space-up" + glass_desc = "Space-up. It helps you keep your cool." + /datum/reagent/consumable/space_up/on_mob_life(mob/living/M) if (M.bodytemperature > 310) @@ -386,6 +460,10 @@ id = "lemon_lime" color = "#8CFF00" // rgb: 135, 255, 0 taste_description = "tangy lime and lemon soda" + glass_icon_state = "glass_yellow" + glass_name = "glass of Lemon-Lime" + glass_desc = "You're pretty certain a real fruit has never actually touched this." + /datum/reagent/consumable/lemon_lime/on_mob_life(mob/living/M) if (M.bodytemperature > 310) @@ -398,6 +476,9 @@ id = "pwr_game" color = "#9385bf" // rgb: 58, 52, 75 taste_description = "sweet and salty tang" + glass_icon_state = "glass_red" + glass_name = "glass of Pwr Game" + glass_desc = "Goes well with a Vlad's salad." /datum/reagent/consumable/pwr_game/on_mob_life(mob/living/M) if (M.bodytemperature > 310) @@ -410,6 +491,9 @@ id = "shamblers" color = "#f00060" // rgb: 94, 0, 38 taste_description = "carbonated metallic soda" + glass_icon_state = "glass_red" + glass_name = "glass of Shambler's Juice" + glass_desc = "Mmm mm, shambly." /datum/reagent/consumable/shamblers/on_mob_life(mob/living/M) if (M.bodytemperature > 310) @@ -421,6 +505,9 @@ description = "A can of club soda. Why not make a scotch and soda?" color = "#619494" // rgb: 97, 148, 148 taste_description = "carbonated water" + glass_icon_state = "glass_clear" + glass_name = "glass of Soda Water" + glass_desc = "Soda water. Why not make a scotch and soda?" /datum/reagent/consumable/sodawater/on_mob_life(mob/living/M) M.dizziness = max(0,M.dizziness-5) @@ -435,6 +522,9 @@ description = "It tastes strange but at least the quinine keeps the Space Malaria at bay." color = "#0064C8" // rgb: 0, 100, 200 taste_description = "tart and fresh" + glass_icon_state = "glass_clear" + glass_name = "glass of Tonic Water" + glass_desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away." /datum/reagent/consumable/tonic/on_mob_life(mob/living/M) M.dizziness = max(0,M.dizziness-5) @@ -452,6 +542,9 @@ reagent_state = SOLID color = "#619494" // rgb: 97, 148, 148 taste_description = "ice" + glass_icon_state = "iceglass" + glass_name = "glass of ice" + glass_desc = "Generally, you're supposed to put something else in there too..." /datum/reagent/consumable/ice/on_mob_life(mob/living/M) M.bodytemperature = max( M.bodytemperature - 5 * TEMPERATURE_DAMAGE_COEFFICIENT, 0) @@ -463,6 +556,9 @@ description = "A nice and tasty beverage while you are reading your hippie books." color = "#664300" // rgb: 102, 67, 0 taste_description = "creamy coffee" + glass_icon_state = "soy_latte" + glass_name = "Soy Latte" + glass_desc = "A nice and refreshing beverage while you're reading." /datum/reagent/consumable/soy_latte/on_mob_life(mob/living/M) M.dizziness = max(0,M.dizziness-5) @@ -482,6 +578,9 @@ description = "A nice, strong and tasty beverage while you are reading." color = "#664300" // rgb: 102, 67, 0 taste_description = "bitter cream" + glass_icon_state = "cafe_latte" + glass_name = "Cafe Latte" + glass_desc = "A nice, strong and refreshing beverage while you're reading." /datum/reagent/consumable/cafe_latte/on_mob_life(mob/living/M) M.dizziness = max(0,M.dizziness-5) @@ -501,6 +600,9 @@ description = "A gulp a day keeps the Medibot away! A mixture of juices that heals most damage types fairly quickly at the cost of hunger." color = "#FF8CFF" // rgb: 255, 140, 255 taste_description = "homely fruit" + glass_icon_state = "doctorsdelightglass" + glass_name = "Doctor's Delight" + glass_desc = "The space doctor's favorite. Guaranteed to restore bodily injury; side effects include cravings and hunger." /datum/reagent/consumable/doctor_delight/on_mob_life(mob/living/M) M.adjustBruteLoss(-0.5, 0) @@ -520,6 +622,9 @@ color = "#800000" nutriment_factor = 4 * REAGENTS_METABOLISM taste_description = "sweet chocolate" + glass_icon_state = "chocolatepudding" + glass_name = "Chocolate Pudding" + glass_desc = "Tasty." /datum/reagent/consumable/vanillapudding name = "Vanilla Pudding" @@ -528,6 +633,9 @@ color = "#FAFAD2" nutriment_factor = 4 * REAGENTS_METABOLISM taste_description = "sweet vanilla" + glass_icon_state = "vanillapudding" + glass_name = "Vanilla Pudding" + glass_desc = "Tasty." /datum/reagent/consumable/cherryshake name = "Cherry Shake" @@ -536,6 +644,9 @@ color = "#FFB6C1" nutriment_factor = 4 * REAGENTS_METABOLISM taste_description = "creamy cherry" + glass_icon_state = "cherryshake" + glass_name = "Cherry Shake" + glass_desc = "A cherry flavored milkshake." /datum/reagent/consumable/bluecherryshake name = "Blue Cherry Shake" @@ -544,6 +655,9 @@ color = "#00F1FF" nutriment_factor = 4 * REAGENTS_METABOLISM taste_description = "creamy blue cherry" + glass_icon_state = "bluecherryshake" + glass_name = "Blue Cherry Shake" + glass_desc = "An exotic blue milkshake." /datum/reagent/consumable/pumpkin_latte name = "Pumpkin Latte" @@ -552,6 +666,9 @@ color = "#F4A460" nutriment_factor = 3 * REAGENTS_METABOLISM taste_description = "creamy pumpkin" + glass_icon_state = "pumpkin_latte" + glass_name = "Pumpkin Latte" + glass_desc = "A mix of coffee and pumpkin juice." /datum/reagent/consumable/gibbfloats name = "Gibb Floats" @@ -560,6 +677,9 @@ color = "#B22222" nutriment_factor = 3 * REAGENTS_METABOLISM taste_description = "creamy cherry" + glass_icon_state = "gibbfloats" + glass_name = "Gibbfloat" + glass_desc = "Dr. Gibb with ice cream on top." /datum/reagent/consumable/pumpkinjuice name = "Pumpkin Juice" @@ -581,6 +701,9 @@ description = "A solution." color = "#C8A5DC" taste_description = "extreme bitterness" + glass_icon_state = "triplecitrus" //needs own sprite mine are trash + glass_name = "glass of triple citrus" + glass_desc = "A mixture of citrus juices. Tangy, yet smooth." /datum/reagent/consumable/grape_soda name = "Grape soda" @@ -588,6 +711,8 @@ description = "Beloved of children and teetotalers." color = "#E6CDFF" taste_description = "grape soda" + glass_name = "glass of grape juice" + glass_desc = "It's grape (soda)!" /datum/reagent/consumable/milk/chocolate_milk name = "Chocolate Milk" diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index 5a20d17b19..19bfd20fee 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -15,7 +15,7 @@ M.set_drugginess(15) if(isturf(M.loc) && !isspaceturf(M.loc)) if(M.canmove) - if(prob(10)) step(M, pick(cardinal)) + if(prob(10)) step(M, pick(GLOB.cardinal)) if(prob(7)) M.emote(pick("twitch","drool","moan","giggle")) ..() @@ -49,6 +49,14 @@ ..() . = 1 +/datum/reagent/drug/menthol + name = "Menthol" + id = "menthol" + description = "Tastes naturally minty, and imparts a very mild numbing sensation." + taste_description = "mint" + reagent_state = LIQUID + color = "#80AF9C" + /datum/reagent/drug/crank name = "Crank" id = "crank" @@ -176,7 +184,7 @@ /datum/reagent/drug/methamphetamine/overdose_process(mob/living/M) if(M.canmove && !istype(M.loc, /atom/movable)) for(var/i in 1 to 4) - step(M, pick(cardinal)) + step(M, pick(GLOB.cardinal)) if(prob(20)) M.emote("laugh") if(prob(33)) @@ -205,7 +213,7 @@ /datum/reagent/drug/methamphetamine/addiction_act_stage3(mob/living/M) if(M.canmove && !istype(M.loc, /atom/movable)) for(var/i = 0, i < 4, i++) - step(M, pick(cardinal)) + step(M, pick(GLOB.cardinal)) M.Jitter(15) M.Dizzy(15) if(prob(40)) @@ -215,7 +223,7 @@ /datum/reagent/drug/methamphetamine/addiction_act_stage4(mob/living/carbon/human/M) if(M.canmove && !istype(M.loc, /atom/movable)) for(var/i = 0, i < 8, i++) - step(M, pick(cardinal)) + step(M, pick(GLOB.cardinal)) M.Jitter(20) M.Dizzy(20) M.adjustToxLoss(5, 0) @@ -247,8 +255,8 @@ M.adjustToxLoss(0.1, 0) M.hallucination += 10 if(M.canmove && !istype(M.loc, /atom/movable)) - step(M, pick(cardinal)) - step(M, pick(cardinal)) + step(M, pick(GLOB.cardinal)) + step(M, pick(GLOB.cardinal)) ..() . = 1 @@ -256,7 +264,7 @@ M.hallucination += 10 if(M.canmove && !istype(M.loc, /atom/movable)) for(var/i in 1 to 8) - step(M, pick(cardinal)) + step(M, pick(GLOB.cardinal)) if(prob(20)) M.emote(pick("twitch","drool","moan")) if(prob(33)) @@ -269,7 +277,7 @@ M.hallucination += 10 if(M.canmove && !istype(M.loc, /atom/movable)) for(var/i = 0, i < 8, i++) - step(M, pick(cardinal)) + step(M, pick(GLOB.cardinal)) M.Jitter(5) M.adjustBrainLoss(10) if(prob(20)) @@ -280,7 +288,7 @@ M.hallucination += 20 if(M.canmove && !istype(M.loc, /atom/movable)) for(var/i = 0, i < 8, i++) - step(M, pick(cardinal)) + step(M, pick(GLOB.cardinal)) M.Jitter(10) M.Dizzy(10) M.adjustBrainLoss(10) @@ -292,7 +300,7 @@ M.hallucination += 30 if(M.canmove && !istype(M.loc, /atom/movable)) for(var/i = 0, i < 12, i++) - step(M, pick(cardinal)) + step(M, pick(GLOB.cardinal)) M.Jitter(15) M.Dizzy(15) M.adjustBrainLoss(10) @@ -304,7 +312,7 @@ M.hallucination += 40 if(M.canmove && !istype(M.loc, /atom/movable)) for(var/i = 0, i < 16, i++) - step(M, pick(cardinal)) + step(M, pick(GLOB.cardinal)) M.Jitter(50) M.Dizzy(50) M.adjustToxLoss(5, 0) diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 59fc0da766..442772fea8 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -326,6 +326,9 @@ nutriment_factor = 3 * REAGENTS_METABOLISM color = "#403010" // rgb: 64, 48, 16 taste_description = "creamy chocolate" + glass_icon_state = "chocolateglass" + glass_name = "glass of chocolate" + glass_desc = "Tasty." /datum/reagent/consumable/hot_coco/on_mob_life(mob/living/M) if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 5339b3dc92..d2a1cbdb28 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -6,6 +6,10 @@ metabolization_rate = 5 //fast rate so it disappears fast. taste_description = "iron" taste_mult = 1.3 + glass_icon_state = "glass_red" + glass_name = "glass of tomato juice" + glass_desc = "Are you sure this is tomato juice?" + shot_glass_icon_state = "shotglassred" /datum/reagent/blood/reaction_mob(mob/M, method=TOUCH, reac_volume) if(data && data["viruses"]) @@ -81,6 +85,7 @@ color = "#FF9966" description = "You don't even want to think about what's in here." taste_description = "gross iron" + shot_glass_icon_state = "shotglassred" /datum/reagent/vaccine //data must contain virus type @@ -107,6 +112,10 @@ color = "#AAAAAA77" // rgb: 170, 170, 170, 77 (alpha) taste_description = "water" var/cooling_temperature = 2 + glass_icon_state = "glass_clear" + glass_name = "glass of Water" + glass_desc = "The father of all refreshments." + shot_glass_icon_state = "shotglassclear" /* * Water reaction to turf @@ -168,6 +177,9 @@ id = "holywater" description = "Water blessed by some deity." color = "#E0E8EF" // rgb: 224, 232, 239 + glass_icon_state = "glass_clear" + glass_name = "glass of Holy Water" + glass_desc = "A glass of holy water." /datum/reagent/water/holywater/reaction_mob(mob/living/M, method=TOUCH, reac_volume) if(is_servant_of_ratvar(M)) @@ -197,7 +209,7 @@ if(data >= 75) // 30 units, 135 seconds if(iscultist(M) || is_servant_of_ratvar(M)) if(iscultist(M)) - ticker.mode.remove_cultist(M.mind, 1, 1) + SSticker.mode.remove_cultist(M.mind, 1, 1) else if(is_servant_of_ratvar(M)) remove_servant_of_ratvar(M) holder.remove_reagent(id, volume) // maybe this is a little too perfect and a max() cap on the statuses would be better?? @@ -645,7 +657,7 @@ /datum/reagent/mercury/on_mob_life(mob/living/M) if(M.canmove && isspaceturf(M.loc)) - step(M, pick(cardinal)) + step(M, pick(GLOB.cardinal)) if(prob(5)) M.emote(pick("twitch","drool","moan")) M.adjustBrainLoss(2) @@ -725,7 +737,7 @@ /datum/reagent/lithium/on_mob_life(mob/living/M) if(M.canmove && isspaceturf(M.loc)) - step(M, pick(cardinal)) + step(M, pick(GLOB.cardinal)) if(prob(5)) M.emote(pick("twitch","drool","moan")) ..() @@ -858,7 +870,7 @@ to_chat(M, "You feel unstable...") M.Jitter(2) current_cycle = 1 - addtimer(CALLBACK(GLOBAL_PROC, .proc/do_teleport, M, get_turf(M), 5, asoundin = 'sound/effects/phasein.ogg'), 30) + addtimer(CALLBACK(GLOBAL_PROC, .proc/do_teleport, M, get_turf(M), 5, null, null, null, 'sound/effects/phasein.ogg'), 30) ..() /datum/reagent/aluminium @@ -883,6 +895,9 @@ description = "Required for welders. Flamable." color = "#660000" // rgb: 102, 0, 0 taste_description = "gross metal" + glass_icon_state = "dr_gibb_glass" + glass_name = "glass of welder fuel" + glass_desc = "Unless you're an industrial tool, this is probably not safe for consumption." /datum/reagent/fuel/reaction_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with welding fuel to make them easy to ignite! if(!isliving(M)) @@ -1353,8 +1368,8 @@ if(method == TOUCH || method == VAPOR) if(M && ishuman(M)) var/mob/living/carbon/human/H = M - var/datum/sprite_accessory/hair/picked_hair = pick(hair_styles_list) - var/datum/sprite_accessory/facial_hair/picked_beard = pick(facial_hair_styles_list) + var/datum/sprite_accessory/hair/picked_hair = pick(GLOB.hair_styles_list) + var/datum/sprite_accessory/facial_hair/picked_beard = pick(GLOB.facial_hair_styles_list) H.hair_style = picked_hair H.facial_hair_style = picked_beard H.update_hair() diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm index 5c244e8c34..cb06dc29ee 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm @@ -146,6 +146,9 @@ taste_description = "burning" /datum/reagent/phlogiston/reaction_mob(mob/living/M, method=TOUCH, reac_volume) + M.adjust_fire_stacks(1) + var/burndmg = max(0.3*M.fire_stacks, 0.3) + M.adjustFireLoss(burndmg, 0) M.IgniteMob() ..() diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index ee296f312d..528124f84c 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -304,6 +304,9 @@ color = "#664300" // rgb: 102, 67, 0 metabolization_rate = 1.5 * REAGENTS_METABOLISM taste_description = "piss water" + glass_icon_state = "beerglass" + glass_name = "glass of beer" + glass_desc = "A freezing pint of beer." /datum/reagent/toxin/beer2/on_mob_life(mob/living/M) switch(current_cycle) diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm index 3de44af126..9e0bb2d0e4 100644 --- a/code/modules/reagents/chemistry/recipes.dm +++ b/code/modules/reagents/chemistry/recipes.dm @@ -21,9 +21,9 @@ return //I recommend you set the result amount to the total volume of all components. -var/list/chemical_mob_spawn_meancritters = list() // list of possible hostile mobs -var/list/chemical_mob_spawn_nicecritters = list() // and possible friendly mobs /datum/chemical_reaction/proc/chemical_mob_spawn(datum/reagents/holder, amount_to_spawn, reaction_name, mob_faction = "chemicalsummon") + var/static/list/chemical_mob_spawn_meancritters = list() // list of possible hostile mobs + var/static/list/chemical_mob_spawn_nicecritters = list() // and possible friendly mobs if(holder && holder.my_atom) if (chemical_mob_spawn_meancritters.len <= 0 || chemical_mob_spawn_nicecritters.len <= 0) for (var/T in typesof(/mob/living/simple_animal)) diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm index 2e24309085..0357f0dbdc 100644 --- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm +++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm @@ -61,8 +61,8 @@ strengthdiv = 8 for(var/mob/living/simple_animal/revenant/R in get_hearers_in_view(7,get_turf(holder.my_atom))) var/deity - if(SSreligion.Bible_deity_name) - deity = SSreligion.Bible_deity_name + if(SSreligion.deity) + deity = SSreligion.deity else deity = "Christ" to_chat(R, "The power of [deity] compels you!") diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm index c7a744b1c1..ee6da85de0 100644 --- a/code/modules/reagents/reagent_containers/borghydro.dm +++ b/code/modules/reagents/reagent_containers/borghydro.dm @@ -110,7 +110,7 @@ Borg Hypospray return mode = chosen_reagent playsound(loc, 'sound/effects/pop.ogg', 50, 0) - var/datum/reagent/R = chemical_reagents_list[reagent_ids[mode]] + var/datum/reagent/R = GLOB.chemical_reagents_list[reagent_ids[mode]] to_chat(user, "[src] is now dispensing '[R.name]'.") return diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 2049a1868d..77cbb10c8b 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -41,8 +41,8 @@ ..() update_icon() -/obj/item/weapon/reagent_containers/syringe/attack_paw() - return attack_hand() +/obj/item/weapon/reagent_containers/syringe/attack_paw(mob/user) + return attack_hand(user) /obj/item/weapon/reagent_containers/syringe/attackby(obj/item/I, mob/user, params) return @@ -80,7 +80,7 @@ target.visible_message("[user] is trying to take a blood sample from [target]!", \ "[user] is trying to take a blood sample from [target]!") busy = 1 - if(!do_mob(user, target)) + if(!do_mob(user, target, extra_checks=CALLBACK(L, /mob/living/proc/can_inject,user,1))) busy = 0 return if(reagents.total_volume >= reagents.maximum_volume) @@ -123,13 +123,12 @@ if(L != user) L.visible_message("[user] is trying to inject [L]!", \ "[user] is trying to inject [L]!") - if(!do_mob(user, L)) + if(!do_mob(user, L, extra_checks=CALLBACK(L, /mob/living/proc/can_inject,user,1))) return if(!reagents.total_volume) return if(L.reagents.total_volume >= L.reagents.maximum_volume) return - L.visible_message("[user] injects [L] with the syringe!", \ "[user] injects [L] with the syringe!") diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 4c42d6236d..f3bc94c4e6 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -87,7 +87,7 @@ if(!QDELETED(src)) //wasn't deleted by the projectile's effects. if(!P.nodamage && ((P.damage_type == BURN) || (P.damage_type == BRUTE))) var/boom_message = "[key_name_admin(P.firer)] triggered a fueltank explosion via projectile." - bombers += boom_message + GLOB.bombers += boom_message message_admins(boom_message) var/log_message = "triggered a fueltank explosion via projectile." P.firer.log_message(log_message, INDIVIDUAL_ATTACK_LOG) @@ -111,7 +111,7 @@ else user.visible_message("[user] catastrophically fails at refilling [user.p_their()] [W.name]!", "That was stupid of you.") var/message_admins = "[key_name_admin(user)] triggered a fueltank explosion via welding tool." - bombers += message_admins + GLOB.bombers += message_admins message_admins(message_admins) var/message_log = "triggered a fueltank explosion via welding tool." user.log_message(message_log, INDIVIDUAL_ATTACK_LOG) diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index 2ef0842a04..71b73de0e1 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -222,7 +222,7 @@ update() conveyors = list() - for(var/obj/machinery/conveyor/C in machines) + for(var/obj/machinery/conveyor/C in GLOB.machines) if(C.id == id) conveyors += C @@ -271,7 +271,7 @@ update() // find any switches with same id as this one, and set their positions to match us - for(var/obj/machinery/conveyor_switch/S in machines) + for(var/obj/machinery/conveyor_switch/S in GLOB.machines) if(S.id == src.id) S.position = position S.update() diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm index 11d37b1cae..235cb1d880 100644 --- a/code/modules/recycling/disposal-construction.dm +++ b/code/modules/recycling/disposal-construction.dm @@ -251,7 +251,7 @@ else if(ptype == DISP_END_BIN) var/obj/machinery/disposal/bin/B = new /obj/machinery/disposal/bin(loc,src) - B.mode = 0 // start with pump off + B.pressure_charging = FALSE // start with pump off transfer_fingerprints_to(B) else if(ptype == DISP_END_OUTLET) diff --git a/code/modules/recycling/disposal-structures.dm b/code/modules/recycling/disposal-structures.dm index 1fd66eb1d2..a823b4a62e 100644 --- a/code/modules/recycling/disposal-structures.dm +++ b/code/modules/recycling/disposal-structures.dm @@ -329,7 +329,7 @@ stored.anchored = 1 stored.update_icon() else - for(var/D in cardinal) + for(var/D in GLOB.cardinal) if(D & dpdir) var/obj/structure/disposalpipe/broken/P = new(src.loc) P.setDir(D) @@ -425,7 +425,7 @@ if(sortTypes.len>0) to_chat(user, "It is tagged with the following tags:") for(var/t in sortTypes) - to_chat(user, TAGGERLOCATIONS[t]) + to_chat(user, GLOB.TAGGERLOCATIONS[t]) else to_chat(user, "It has no sorting tags set.") @@ -467,10 +467,10 @@ if(O.currTag > 0)// Tag set if(O.currTag in sortTypes) sortTypes -= O.currTag - to_chat(user, "Removed \"[TAGGERLOCATIONS[O.currTag]]\" filter.") + to_chat(user, "Removed \"[GLOB.TAGGERLOCATIONS[O.currTag]]\" filter.") else sortTypes |= O.currTag - to_chat(user, "Added \"[TAGGERLOCATIONS[O.currTag]]\" filter.") + to_chat(user, "Added \"[GLOB.TAGGERLOCATIONS[O.currTag]]\" filter.") playsound(src.loc, 'sound/machines/twobeep.ogg', 100, 1) else return ..() @@ -731,7 +731,7 @@ if(direction) dirs = list( direction, turn(direction, -45), turn(direction, 45)) else - dirs = alldirs.Copy() + dirs = GLOB.alldirs.Copy() src.streak(dirs) @@ -740,6 +740,6 @@ if(direction) dirs = list( direction, turn(direction, -45), turn(direction, 45)) else - dirs = alldirs.Copy() + dirs = GLOB.alldirs.Copy() src.streak(dirs) diff --git a/code/modules/recycling/disposal-unit.dm b/code/modules/recycling/disposal-unit.dm index d8385fafcc..7cc890c1f6 100644 --- a/code/modules/recycling/disposal-unit.dm +++ b/code/modules/recycling/disposal-unit.dm @@ -12,8 +12,10 @@ obj_integrity = 200 max_integrity = 200 resistance_flags = FIRE_PROOF + interact_open = TRUE var/datum/gas_mixture/air_contents // internal reservoir - var/mode = PRESSURE_ON + var/full_pressure = FALSE + var/pressure_charging = TRUE var/flush = 0 // true if flush handle is pulled var/obj/structure/disposalpipe/trunk/trunk = null // the attached pipe trunk var/flushing = 0 // true if flushing in progress @@ -43,11 +45,11 @@ /obj/machinery/disposal/proc/trunk_check() trunk = locate() in loc if(!trunk) - mode = PRESSURE_OFF - flush = 0 + pressure_charging = FALSE + flush = FALSE else - if(initial(mode)) - mode = PRESSURE_ON + if(initial(pressure_charging)) + pressure_charging = TRUE flush = initial(flush) trunk.linked = src // link the pipe trunk to self @@ -76,21 +78,18 @@ /obj/machinery/disposal/attackby(obj/item/I, mob/user, params) add_fingerprint(user) - if(mode != PRESSURE_ON && mode != PRESSURE_MAXED && !flush) + if(!pressure_charging && !full_pressure && !flush) if(istype(I, /obj/item/weapon/screwdriver)) - if(mode == PRESSURE_OFF) - mode = SCREWS_OUT - else - mode = PRESSURE_OFF - playsound(src.loc, I.usesound, 50, 1) - to_chat(user, "You [mode == SCREWS_OUT ? "remove":"attach"] the screws around the power connection.") + panel_open = !panel_open + playsound(get_turf(src), I.usesound, 50, 1) + to_chat(user, "You [panel_open ? "remove":"attach"] the screws around the power connection.") return - else if(istype(I,/obj/item/weapon/weldingtool) && mode == SCREWS_OUT) + else if(istype(I,/obj/item/weapon/weldingtool) && panel_open) var/obj/item/weapon/weldingtool/W = I if(W.remove_fuel(0,user)) playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) to_chat(user, "You start slicing the floorweld off \the [src]...") - if(do_after(user,20*I.toolspeed, target = src) && mode == SCREWS_OUT) + if(do_after(user,20*I.toolspeed, target = src) && panel_open) if(!W.isOn()) return to_chat(user, "You slice the floorweld off \the [src].") @@ -190,7 +189,7 @@ return /obj/machinery/disposal/proc/flush() - flushing = 1 + flushing = TRUE flushAnimation() sleep(10) if(last_sound < world.time + 1) @@ -204,8 +203,8 @@ H.init(src) air_contents = new() H.start(src) - flushing = 0 - flush = 0 + flushing = FALSE + flush = FALSE /obj/machinery/disposal/proc/newHolderDestination(obj/structure/disposalholder/H) for(var/obj/item/smallDelivery/O in src) @@ -286,7 +285,7 @@ // handle machine interaction /obj/machinery/disposal/bin/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/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) if(stat & BROKEN) return if(user.loc == src) @@ -300,7 +299,9 @@ /obj/machinery/disposal/bin/ui_data(mob/user) var/list/data = list() data["flush"] = flush - data["mode"] = mode + data["full_pressure"] = full_pressure + data["pressure_charging"] = pressure_charging + data["panel_open"] = panel_open var/per = Clamp(100* air_contents.return_pressure() / (SEND_PRESSURE), 0, 100) data["per"] = round(per, 1) data["isai"] = isAI(user) @@ -311,22 +312,22 @@ return switch(action) if("handle-0") - flush = 0 + flush = FALSE update_icon() . = TRUE if("handle-1") - if(mode != SCREWS_OUT) - flush = 1 + if(!panel_open) + flush = TRUE update_icon() . = TRUE if("pump-0") - if(mode == PRESSURE_ON) - mode = PRESSURE_OFF + if(pressure_charging) + pressure_charging = FALSE update_icon() . = TRUE if("pump-1") - if(mode == PRESSURE_OFF) - mode = PRESSURE_ON + if(!pressure_charging) + pressure_charging = TRUE update_icon() . = TRUE if("eject") @@ -339,26 +340,26 @@ if(istype(I, /obj/item/projectile)) return if(prob(75)) - I.loc = src - visible_message("\the [I] lands in \the [src].") + I.forceMove(src) + visible_message("[I] lands in [src].") update_icon() else - visible_message("\the [I] bounces off of \the [src]'s rim!") + visible_message("[I] bounces off of [src]'s rim!") return 0 else return ..(mover, target, height) /obj/machinery/disposal/bin/flush() ..() - if(mode == PRESSURE_MAXED) - mode = PRESSURE_ON + full_pressure = FALSE + pressure_charging = TRUE update_icon() /obj/machinery/disposal/bin/update_icon() cut_overlays() if(stat & BROKEN) - mode = PRESSURE_OFF - flush = 0 + pressure_charging = FALSE + flush = FALSE return //flush handle @@ -366,7 +367,7 @@ add_overlay(image('icons/obj/atmospherics/pipes/disposal.dmi', "dispover-handle")) //only handle is shown if no power - if(stat & NOPOWER || mode == SCREWS_OUT) + if(stat & NOPOWER || panel_open) return //check for items in disposal - occupied light @@ -374,9 +375,9 @@ add_overlay(image('icons/obj/atmospherics/pipes/disposal.dmi', "dispover-full")) //charging and ready light - if(mode == PRESSURE_ON) + if(pressure_charging) add_overlay(image('icons/obj/atmospherics/pipes/disposal.dmi', "dispover-charge")) - else if(mode == PRESSURE_MAXED) + else if(full_pressure) add_overlay(image('icons/obj/atmospherics/pipes/disposal.dmi', "dispover-ready")) //timed process @@ -388,7 +389,7 @@ flush_count++ if(flush_count >= flush_every_ticks) if(contents.len) - if(mode == PRESSURE_MAXED) + if(full_pressure) spawn(0) feedback_inc("disposal_auto_flush",1) flush() @@ -404,7 +405,7 @@ use_power(100) // base power usage - if(mode != PRESSURE_ON) // if off or ready, no need to charge + if(!pressure_charging) // if off or ready, no need to charge return // otherwise charge @@ -426,7 +427,8 @@ //if full enough, switch to ready mode if(air_contents.return_pressure() >= SEND_PRESSURE) - mode = PRESSURE_MAXED + full_pressure = TRUE + pressure_charging = FALSE update_icon() return @@ -441,7 +443,7 @@ desc = "A chute for big and small packages alike!" density = 1 icon_state = "intake" - mode = PRESSURE_OFF // the chute doesn't need charging and always works + pressure_charging = FALSE // the chute doesn't need charging and always works /obj/machinery/disposal/deliveryChute/New(loc,var/obj/structure/disposalconstruct/make_from) ..() diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 29c746136a..fb0a4f5edb 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -27,7 +27,7 @@ var/obj/item/device/destTagger/O = W if(sortTag != O.currTag) - var/tag = uppertext(TAGGERLOCATIONS[O.currTag]) + var/tag = uppertext(GLOB.TAGGERLOCATIONS[O.currTag]) to_chat(user, "*[tag]*") sortTag = O.currTag playsound(loc, 'sound/machines/twobeep.ogg', 100, 1) @@ -108,7 +108,7 @@ var/obj/item/device/destTagger/O = W if(sortTag != O.currTag) - var/tag = uppertext(TAGGERLOCATIONS[O.currTag]) + var/tag = uppertext(GLOB.TAGGERLOCATIONS[O.currTag]) to_chat(user, "*[tag]*") sortTag = O.currTag playsound(loc, 'sound/machines/twobeep.ogg', 100, 1) @@ -151,13 +151,13 @@ var/dat = "

    TagMaster 2.2

    " dat += "

    Name

    Status

    Location

    Control

    " - for (var/i = 1, i <= TAGGERLOCATIONS.len, i++) - dat += "" + for (var/i = 1, i <= GLOB.TAGGERLOCATIONS.len, i++) + dat += "" if(i%4==0) dat += "" - dat += "
    [TAGGERLOCATIONS[i]][GLOB.TAGGERLOCATIONS[i]]

    Current Selection: [currTag ? TAGGERLOCATIONS[currTag] : "None"]
    " + dat += "
    Current Selection: [currTag ? GLOB.TAGGERLOCATIONS[currTag] : "None"]" user << browse(dat, "window=destTagScreen;size=450x350") onclose(user, "destTagScreen") diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 040997da87..28b5a893a9 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -616,6 +616,14 @@ build_path = /obj/item/weapon/restraints/handcuffs category = list("hacked", "Security") +/datum/design/receiver + name = "Modular Receiver" + id = "reciever" + build_type = AUTOLATHE + materials = list(MAT_METAL = 15000) + build_path = /obj/item/weaponcrafting/receiver + category = list("hacked", "Security") + /datum/design/shotgun_slug name = "Shotgun slug" id = "shotgun_slug" diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 08c66925e7..56fb705e57 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -90,14 +90,14 @@ build_path = /obj/item/weapon/circuitboard/machine/quantumpad category = list ("Teleportation Machinery") -/datum/design/board/telepad +/*/datum/design/board/telepad name = "Machine Design (Telepad Board)" desc = "The circuit board for a telescience telepad." id = "telepad" req_tech = list("programming" = 4, "bluespace" = 5, "plasmatech" = 4, "engineering" = 4) build_path = /obj/item/weapon/circuitboard/machine/telesci_pad category = list ("Teleportation Machinery") - +*/ /datum/design/board/teleconsole name = "Computer Design (Teleporter Console)" desc = "Allows for the construction of circuit boards used to build a teleporter control console." @@ -106,14 +106,14 @@ build_path = /obj/item/weapon/circuitboard/computer/teleporter category = list("Teleportation Machinery") -/datum/design/board/telesci_console +/* /datum/design/board/telesci_console name = "Computer Design (Telepad Control Console Board)" desc = "Allows for the construction of circuit boards used to build a telescience console." id = "telesci_console" req_tech = list("programming" = 3, "bluespace" = 3, "plasmatech" = 4) build_path = /obj/item/weapon/circuitboard/computer/telesci_console category = list("Teleportation Machinery") - +*/ /datum/design/board/sleeper name = "Machine Design (Sleeper Board)" desc = "The circuit board for a sleeper." diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index 545bff7ac4..a8527f035b 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -718,6 +718,16 @@ construction_time = 120 category = list("Cyborg Upgrade Modules") +/datum/design/boris_ai_controller + name = "B.O.R.I.S. AI-Cyborg Remote Control Module" + id = "borg_ai_control" + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/ai + materials = list(MAT_METAL = 1200, MAT_GLASS = 1500, MAT_GOLD = 200) + req_tech = list("programming" = 4, "magnets" = 4, "engineering" = 4) + construction_time = 50 + category = list("Misc") + //Misc /datum/design/mecha_tracking name = "Exosuit Tracking Beacon" @@ -759,7 +769,6 @@ construction_time = 100 build_path = /obj/item/device/assembly/flash/handheld category = list("Misc") - /* /datum/design/flightsuit //Multi step build process/redo WIP name = "Flight Suit" @@ -771,7 +780,6 @@ construction_time = 250 category = list("Misc") req_tech = list("magnets" = 2, "combat" = 2, "plasmatech" = 2, "materials" = 4, "engineering" = 3, "powerstorage" = 2) - */ /datum/design/flightpack name = "Flight Pack" @@ -784,7 +792,6 @@ category = list("Misc") req_tech = list("magnets" = 4, "combat" = 3, "plasmatech" = 4, "materials" = 5, "engineering" = 4, "powerstorage" = 4) -/* /datum/design/flightshoes name = "Flight Shoes" desc = "Flight shoes, attachable to a flight suit to provide additional functions." @@ -795,4 +802,4 @@ construction_time = 100 category = list("Misc") req_tech = list("magnets" = 2, "combat" = 2, "plasmatech" = 3, "materials" = 3, "engineering" = 2, "powerstorage" = 2) - */ +*/ \ No newline at end of file diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 500f61beff..80863259e8 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -177,16 +177,6 @@ build_path = /obj/item/weapon/gun/energy/wormhole_projector category = list("Weapons") -/datum/design/reciever - name = "Modular Receiver" - desc = "A prototype modular receiver and trigger assembly for a variety of firearms." - id = "reciever" - req_tech = list("combat" = 4, "materials" = 4) - build_type = PROTOLATHE - materials = list(MAT_METAL = 6500, MAT_SILVER = 500) - build_path = /obj/item/weaponcrafting/reciever - category = list("Weapons") - //WT550 Mags /datum/design/mag_oldsmg diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index bd2e617372..e9bc353715 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -84,8 +84,8 @@ var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/experimentor(null) B.apply_default_parts(src) - trackedIan = locate(/mob/living/simple_animal/pet/dog/corgi/Ian) in mob_list - trackedRuntime = locate(/mob/living/simple_animal/pet/cat/Runtime) in mob_list + trackedIan = locate(/mob/living/simple_animal/pet/dog/corgi/Ian) in GLOB.mob_list + trackedRuntime = locate(/mob/living/simple_animal/pet/cat/Runtime) in GLOB.mob_list SetTypeReactions() /obj/item/weapon/circuitboard/machine/experimentor @@ -556,7 +556,7 @@ //~~~~~~~~Admin logging proc, aka the Powergamer Alarm~~~~~~~~ /obj/machinery/r_n_d/experimentor/proc/warn_admins(mob/user, ReactionName) var/turf/T = get_turf(src) - message_admins("Experimentor reaction: [ReactionName] generated by [key_name_admin(user)](?) (FLW) at ([T.x],[T.y],[T.z] - JMP)",0,1) + message_admins("Experimentor reaction: [ReactionName] generated by [ADMIN_LOOKUPFLW(user)] at [ADMIN_COORDJMP(T)]",0,1) log_game("Experimentor reaction: [ReactionName] generated by [key_name(user)] in ([T.x],[T.y],[T.z])") #undef SCANTYPE_POKE @@ -638,7 +638,7 @@ /obj/item/weapon/relic/proc/flash(mob/user) playsound(src.loc, "sparks", rand(25,50), 1) - var/obj/item/weapon/grenade/flashbang/CB = new/obj/item/weapon/grenade/flashbang(get_turf(user)) + var/obj/item/weapon/grenade/flashbang/CB = new/obj/item/weapon/grenade/flashbang(user.loc) CB.prime() warn_admins(user, "Flash") @@ -703,6 +703,6 @@ var/turf/T = get_turf(src) var/log_msg = "[RelicType] relic used by [key_name(user)] in ([T.x],[T.y],[T.z])" if(priority) //For truly dangerous relics that may need an admin's attention. BWOINK! - message_admins("[RelicType] relic activated by [key_name_admin(user)](?) (FLW) in ([T.x],[T.y],[T.z] - JMP)",0,1) + message_admins("[RelicType] relic activated by [ADMIN_LOOKUPFLW(user)] in [ADMIN_COORDJMP(T)]",0,1) log_game(log_msg) investigate_log(log_msg, "experimentor") diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm index 064fef483b..d4b19a77b1 100644 --- a/code/modules/research/message_server.dm +++ b/code/modules/research/message_server.dm @@ -1,4 +1,4 @@ -var/global/list/obj/machinery/message_server/message_servers = list() +GLOBAL_LIST_INIT(message_servers, list()) /datum/data_pda_msg var/recipient = "Unspecified" //name of the person @@ -79,14 +79,14 @@ var/global/list/obj/machinery/message_server/message_servers = list() var/decryptkey = "password" /obj/machinery/message_server/New() - message_servers += src + GLOB.message_servers += src decryptkey = GenerateKey() send_pda_message("System Administrator", "system", "This is an automated message. The messaging system is functioning correctly.") ..() return /obj/machinery/message_server/Destroy() - message_servers -= src + GLOB.message_servers -= src return ..() /obj/machinery/message_server/proc/GenerateKey() diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 4116be3463..ed5190a701 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -47,7 +47,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, var/sync = 1 //If sync = 0, it doesn't show up on Server Control Console var/first_use = 1 //If first_use = 1, it will try to auto-connect with nearby devices - req_access = list(access_tox) //Data and setting manipulation requires scientist access. + req_access = list(GLOB.access_tox) //Data and setting manipulation requires scientist access. var/selected_category var/list/datum/design/matching_designs = list() //for the search function @@ -55,18 +55,18 @@ won't update every console in existence) but it's more of a hassle to do. Also, /proc/CallTechName(ID) //A simple helper proc to find the name of a tech with a given ID. - if(tech_list[ID]) - var/datum/tech/tech = tech_list[ID] + if(GLOB.tech_list[ID]) + var/datum/tech/tech = GLOB.tech_list[ID] return tech.name return "ERROR: Report This" /proc/CallMaterialName(ID) - if (copytext(ID, 1, 2) == "$" && materials_list[ID]) - var/datum/material/material = materials_list[ID] + if (copytext(ID, 1, 2) == "$" && GLOB.materials_list[ID]) + var/datum/material/material = GLOB.materials_list[ID] return material.name - else if(chemical_reagents_list[ID]) - var/datum/reagent/reagent = chemical_reagents_list[ID] + else if(GLOB.chemical_reagents_list[ID]) + var/datum/reagent/reagent = GLOB.chemical_reagents_list[ID] return reagent.name return "ERROR: Report This" @@ -90,7 +90,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, //Have it automatically push research to the centcom server so wild griffins can't fuck up R&D's work --NEO /obj/machinery/computer/rdconsole/proc/griefProtection() - for(var/obj/machinery/r_n_d/server/centcom/C in machines) + for(var/obj/machinery/r_n_d/server/centcom/C in GLOB.machines) for(var/v in files.known_tech) var/datum/tech/T = files.known_tech[v] C.files.AddTech2Known(T) @@ -350,7 +350,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, griefProtection() //Putting this here because I dont trust the sync process spawn(30) if(src) - for(var/obj/machinery/r_n_d/server/S in machines) + for(var/obj/machinery/r_n_d/server/S in GLOB.machines) var/server_processed = 0 if(S.disabled) continue diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index 03613990f5..4b8242c1f8 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -12,7 +12,7 @@ var/heat_gen = 100 var/heating_power = 40000 var/delay = 10 - req_access = list(access_rd) //Only the R&D can change server settings. + req_access = list(GLOB.access_rd) //Only the R&D can change server settings. /obj/machinery/r_n_d/server/New() ..() @@ -90,7 +90,7 @@ //Backup files to centcom to help admins recover data after greifer attacks /obj/machinery/r_n_d/server/proc/griefProtection() - for(var/obj/machinery/r_n_d/server/centcom/C in machines) + for(var/obj/machinery/r_n_d/server/centcom/C in GLOB.machines) for(var/v in files.known_tech) var/datum/tech/T = files.known_tech[v] C.files.AddTech2Known(T) @@ -143,7 +143,7 @@ /proc/fix_noid_research_servers() var/list/no_id_servers = list() var/list/server_ids = list() - for(var/obj/machinery/r_n_d/server/S in machines) + for(var/obj/machinery/r_n_d/server/S in GLOB.machines) switch(S.server_id) if(-1) continue @@ -195,20 +195,20 @@ temp_server = null consoles = list() servers = list() - for(var/obj/machinery/r_n_d/server/S in machines) + for(var/obj/machinery/r_n_d/server/S in GLOB.machines) if(S.server_id == text2num(href_list["access"]) || S.server_id == text2num(href_list["data"]) || S.server_id == text2num(href_list["transfer"])) temp_server = S break if(href_list["access"]) screen = 1 - for(var/obj/machinery/computer/rdconsole/C in machines) + for(var/obj/machinery/computer/rdconsole/C in GLOB.machines) if(C.sync) consoles += C else if(href_list["data"]) screen = 2 else if(href_list["transfer"]) screen = 3 - for(var/obj/machinery/r_n_d/server/S in machines) + for(var/obj/machinery/r_n_d/server/S in GLOB.machines) if(S == src) continue servers += S @@ -256,7 +256,7 @@ if(0) //Main Menu dat += "Connected Servers:

    " - for(var/obj/machinery/r_n_d/server/S in machines) + for(var/obj/machinery/r_n_d/server/S in GLOB.machines) if(istype(S, /obj/machinery/r_n_d/server/centcom) && !badmin) continue dat += "[S.name] || " diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm index 35895dfdac..c02894bc3c 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -104,7 +104,7 @@ C.client.images -= chunk.obscured C.remote_control = null C.unset_machine() - src.Remove(C) + Remove(C) /datum/action/innate/slime_place @@ -118,7 +118,7 @@ var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control var/obj/machinery/computer/camera_advanced/xenobio/X = target - if(cameranet.checkTurfVis(remote_eye.loc)) + if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) for(var/mob/living/simple_animal/slime/S in X.stored_slimes) S.loc = remote_eye.loc S.visible_message("[S] warps in!") @@ -137,7 +137,7 @@ var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control var/obj/machinery/computer/camera_advanced/xenobio/X = target - if(cameranet.checkTurfVis(remote_eye.loc)) + if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) for(var/mob/living/simple_animal/slime/S in remote_eye.loc) if(X.stored_slimes.len >= X.max_slimes) break @@ -162,7 +162,7 @@ var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control var/obj/machinery/computer/camera_advanced/xenobio/X = target - if(cameranet.checkTurfVis(remote_eye.loc)) + if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) if(X.monkeys >= 1) var/mob/living/carbon/monkey/food = new /mob/living/carbon/monkey(remote_eye.loc) food.LAssailant = C @@ -183,7 +183,7 @@ var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control var/obj/machinery/computer/camera_advanced/xenobio/X = target - if(cameranet.checkTurfVis(remote_eye.loc)) + if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) for(var/mob/living/carbon/monkey/M in remote_eye.loc) if(M.stat) M.visible_message("[M] vanishes as they are reclaimed for recycling!") diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index df28cca78f..f31cd01131 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -177,12 +177,12 @@ return ..() var/mob/living/simple_animal/SM = M if(SM.sentience_type != sentience_type) - to_chat(user, "The potion won't work on [SM].") + to_chat(user, "[src] won't work on [SM].") return ..() - to_chat(user, "You offer the sentience potion to [SM]...") + to_chat(user, "You offer [src] to [SM]...") being_used = 1 var/list/candidates = pollCandidatesForMob("Do you want to play as [SM.name]?", ROLE_ALIEN, null, ROLE_ALIEN, 50, SM, POLL_IGNORE_SENTIENCE_POTION) // see poll_ignore.dm @@ -190,13 +190,11 @@ if(candidates.len) theghost = pick(candidates) SM.key = theghost.key - SM.languages_spoken |= HUMAN - SM.languages_understood |= HUMAN SM.mind.enslave_mind_to_creator(user) SM.sentience_act() to_chat(SM, "All at once it makes sense: you know what you are and who you are! Self awareness is yours!") to_chat(SM, "You are grateful to be self aware and owe [user] a great debt. Serve [user], and assist [user.p_them()] in completing [user.p_their()] goals at any cost.") - to_chat(user, "[SM] accepts the potion and suddenly becomes attentive and aware. It worked!") + to_chat(user, "[SM] accepts [src] and suddenly becomes attentive and aware. It worked!") qdel(src) else to_chat(user, "[SM] looks interested for a moment, but then looks back down. Maybe you should try again later.") @@ -238,8 +236,6 @@ user.mind.transfer_to(SM) - SM.languages_spoken = user.languages_spoken - SM.languages_understood = user.languages_understood SM.faction = user.faction.Copy() SM.sentience_act() //Same deal here as with sentience user.death() @@ -523,7 +519,7 @@ var/mob/living/carbon/human/G = new /mob/living/carbon/human G.set_species(/datum/species/golem/adamantine) G.set_cloned_appearance() - G.real_name = "Adamantine Golem ([rand(1, 1000)])" + G.real_name = G.dna.species.random_name() G.name = G.real_name G.dna.unique_enzymes = G.dna.generate_unique_enzymes() G.dna.species.auto_equip(G) @@ -560,7 +556,7 @@ /obj/effect/timestop/New() ..() - for(var/mob/living/M in player_list) + for(var/mob/living/M in GLOB.player_list) for(var/obj/effect/proc_holder/spell/aoe_turf/conjure/timestop/T in M.mind.spell_list) //People who can stop time are immune to timestop immune |= M timestop() diff --git a/code/modules/ruins/lavaland_ruin_code.dm b/code/modules/ruins/lavaland_ruin_code.dm index bf2da8aba2..376c8aa9f2 100644 --- a/code/modules/ruins/lavaland_ruin_code.dm +++ b/code/modules/ruins/lavaland_ruin_code.dm @@ -50,8 +50,8 @@ /obj/item/golem_shell/attackby(obj/item/I, mob/user, params) ..() var/species - if(istype(I, /obj/item/stack/sheet)) - var/obj/item/stack/sheet/O = I + if(istype(I, /obj/item/stack/)) + var/obj/item/stack/O = I if(istype(O, /obj/item/stack/sheet/metal)) species = /datum/species/golem @@ -101,6 +101,9 @@ if(istype(O, /obj/item/stack/sheet/runed_metal)) species = /datum/species/golem/runic + if(istype(O, /obj/item/stack/medical/gauze) || istype(O, /obj/item/stack/sheet/cloth)) + species = /datum/species/golem/cloth + if(species) if(O.use(10)) to_chat(user, "You finish up the golem shell with ten sheets of [O].") @@ -134,7 +137,7 @@ icon_state = "sleeper" has_id = 1 flavour_text = "You are a syndicate agent, employed in a top secret research facility developing biological weapons. Unfortunatley, your hated enemy, Nanotrasen, has begun mining in this sector. Continue your research as best you can, and try to keep a low profile. Do not abandon the base without good cause. The base is rigged with explosives should the worst happen, do not let the base fall into enemy hands!
    " - id_access_list = list(access_syndicate) + id_access_list = list(GLOB.access_syndicate) /obj/effect/mob_spawn/human/lavaland_syndicate/comms name = "Syndicate Comms Agent" diff --git a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm index 86e9afe420..6d18ce98f7 100644 --- a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm +++ b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm @@ -16,7 +16,7 @@ var/is_anyone_home = FALSE /obj/structure/necropolis_gate/attack_hand(mob/user) - for(var/mob/living/simple_animal/hostile/megafauna/legion/L in mob_list) + for(var/mob/living/simple_animal/hostile/megafauna/legion/L in GLOB.mob_list) return if(is_anyone_home) return @@ -42,7 +42,7 @@ visible_message("Something horrible emerges from the Necropolis!") message_admins("[key_name_admin(user)] has summoned Legion!") log_game("[key_name(user)] summoned Legion.") - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) if(M.z == z) to_chat(M, "Discordant whispers flood your mind in a thousand voices. Each one speaks your name, over and over. Something horrible has come.") M << 'sound/creatures/legion_spawn.ogg' diff --git a/code/modules/ruins/objects_and_mobs/sin_ruins.dm b/code/modules/ruins/objects_and_mobs/sin_ruins.dm index fc23f92177..c5aacadecb 100644 --- a/code/modules/ruins/objects_and_mobs/sin_ruins.dm +++ b/code/modules/ruins/objects_and_mobs/sin_ruins.dm @@ -86,6 +86,8 @@ return 1 else to_chat(H, "You're repulsed by even looking at [src]. Only a pig could force themselves to go through it.") + if(istype(mover, /mob/living/simple_animal/hostile/morph)) + return 1 else return 0 diff --git a/code/modules/security_levels/keycard_authentication.dm b/code/modules/security_levels/keycard_authentication.dm index 0c907ac30f..6f6533326b 100644 --- a/code/modules/security_levels/keycard_authentication.dm +++ b/code/modules/security_levels/keycard_authentication.dm @@ -1,4 +1,4 @@ -var/datum/events/keycard_events = new() +GLOBAL_DATUM_INIT(keycard_events, /datum/events, new) /obj/machinery/keycard_auth name = "Keycard Authentication Device" @@ -10,7 +10,7 @@ var/datum/events/keycard_events = new() idle_power_usage = 2 active_power_usage = 6 power_channel = ENVIRON - req_access = list(access_keycard_auth) + req_access = list(GLOB.access_keycard_auth) resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF var/datum/callback/ev var/event = "" @@ -20,15 +20,15 @@ var/datum/events/keycard_events = new() /obj/machinery/keycard_auth/New() . = ..() - ev = keycard_events.addEvent("triggerEvent", CALLBACK(src, .proc/triggerEvent)) + ev = GLOB.keycard_events.addEvent("triggerEvent", CALLBACK(src, .proc/triggerEvent)) /obj/machinery/keycard_auth/Destroy() - keycard_events.clearEvent("triggerEvent", ev) + GLOB.keycard_events.clearEvent("triggerEvent", ev) qdel(ev) . = ..() /obj/machinery/keycard_auth/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) + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "keycard_auth", name, 375, 125, master_ui, state) @@ -39,7 +39,7 @@ var/datum/events/keycard_events = new() data["waiting"] = waiting data["auth_required"] = event_source ? event_source.event : 0 data["red_alert"] = (seclevel2num(get_security_level()) >= SEC_LEVEL_RED) ? 1 : 0 - data["emergency_maint"] = emergency_access + data["emergency_maint"] = GLOB.emergency_access return data /obj/machinery/keycard_auth/ui_status(mob/user) @@ -72,7 +72,7 @@ var/datum/events/keycard_events = new() triggerer = usr event = event_type waiting = 1 - keycard_events.fireEvent("triggerEvent", src) + GLOB.keycard_events.fireEvent("triggerEvent", src) addtimer(CALLBACK(src, .proc/eventSent), 20) /obj/machinery/keycard_auth/proc/eventSent() @@ -101,14 +101,14 @@ var/datum/events/keycard_events = new() feedback_inc("alert_keycard_auth_maint",1) -/var/emergency_access = 0 +GLOBAL_VAR_INIT(emergency_access, FALSE) /proc/make_maint_all_access() for(var/area/maintenance/A in world) for(var/obj/machinery/door/airlock/D in A) D.emergency = 1 D.update_icon(0) minor_announce("Access restrictions on maintenance and external airlocks have been lifted.", "Attention! Station-wide emergency declared!",1) - emergency_access = 1 + GLOB.emergency_access = TRUE /proc/revoke_maint_all_access() for(var/area/maintenance/A in world) @@ -116,4 +116,4 @@ var/datum/events/keycard_events = new() D.emergency = 0 D.update_icon(0) minor_announce("Access restrictions in maintenance areas have been restored.", "Attention! Station-wide emergency rescinded:") - emergency_access = 0 + GLOB.emergency_access = FALSE diff --git a/code/modules/security_levels/security_levels.dm b/code/modules/security_levels/security_levels.dm index a112336bdf..4013664e03 100644 --- a/code/modules/security_levels/security_levels.dm +++ b/code/modules/security_levels/security_levels.dm @@ -1,4 +1,4 @@ -/var/security_level = 0 +GLOBAL_VAR_INIT(security_level, 0) //0 = code green //1 = code blue //2 = code red @@ -18,21 +18,21 @@ level = SEC_LEVEL_DELTA //Will not be announced if you try to set to the same level as it already is - if(level >= SEC_LEVEL_GREEN && level <= SEC_LEVEL_DELTA && level != security_level) + if(level >= SEC_LEVEL_GREEN && level <= SEC_LEVEL_DELTA && level != GLOB.security_level) switch(level) if(SEC_LEVEL_GREEN) minor_announce(config.alert_desc_green, "Attention! Security level lowered to green:") if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL) - if(security_level >= SEC_LEVEL_RED) + if(GLOB.security_level >= SEC_LEVEL_RED) SSshuttle.emergency.modTimer(4) else SSshuttle.emergency.modTimer(2) - security_level = SEC_LEVEL_GREEN - for(var/obj/machinery/firealarm/FA in machines) + GLOB.security_level = SEC_LEVEL_GREEN + for(var/obj/machinery/firealarm/FA in GLOB.machines) if(FA.z == ZLEVEL_STATION) FA.update_icon() if(SEC_LEVEL_BLUE) - if(security_level < SEC_LEVEL_BLUE) + if(GLOB.security_level < SEC_LEVEL_BLUE) minor_announce(config.alert_desc_blue_upto, "Attention! Security level elevated to blue:",1) if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL) SSshuttle.emergency.modTimer(0.5) @@ -40,56 +40,56 @@ minor_announce(config.alert_desc_blue_downto, "Attention! Security level lowered to blue:") if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL) SSshuttle.emergency.modTimer(2) - security_level = SEC_LEVEL_BLUE - for(var/mob/M in player_list) + GLOB.security_level = SEC_LEVEL_BLUE + for(var/mob/M in GLOB.player_list) M << sound('sound/misc/voybluealert.ogg') - for(var/obj/machinery/firealarm/FA in machines) + for(var/obj/machinery/firealarm/FA in GLOB.machines) if(FA.z == ZLEVEL_STATION) FA.update_icon() if(SEC_LEVEL_RED) - if(security_level < SEC_LEVEL_RED) + if(GLOB.security_level < SEC_LEVEL_RED) minor_announce(config.alert_desc_red_upto, "Attention! Code red!",1) if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL) - if(security_level == SEC_LEVEL_GREEN) + if(GLOB.security_level == SEC_LEVEL_GREEN) SSshuttle.emergency.modTimer(0.25) else SSshuttle.emergency.modTimer(0.5) else minor_announce(config.alert_desc_red_downto, "Attention! Code red!") - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) M << sound('sound/misc/voyalert.ogg') - security_level = SEC_LEVEL_RED + GLOB.security_level = SEC_LEVEL_RED /* - At the time of commit, setting status displays didn't work properly var/obj/machinery/computer/communications/CC = locate(/obj/machinery/computer/communications,world) if(CC) CC.post_status("alert", "redalert")*/ - for(var/obj/machinery/firealarm/FA in machines) + for(var/obj/machinery/firealarm/FA in GLOB.machines) if(FA.z == ZLEVEL_STATION) FA.update_icon() - for(var/obj/machinery/computer/shuttle/pod/pod in machines) + for(var/obj/machinery/computer/shuttle/pod/pod in GLOB.machines) pod.admin_controlled = 0 if(SEC_LEVEL_DELTA) minor_announce(config.alert_desc_delta, "Attention! Delta security level reached!",1) if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL) - if(security_level == SEC_LEVEL_GREEN) + if(GLOB.security_level == SEC_LEVEL_GREEN) SSshuttle.emergency.modTimer(0.25) - else if(security_level == SEC_LEVEL_BLUE) + else if(GLOB.security_level == SEC_LEVEL_BLUE) SSshuttle.emergency.modTimer(0.5) - security_level = SEC_LEVEL_DELTA - for(var/mob/M in player_list) + GLOB.security_level = SEC_LEVEL_DELTA + for(var/mob/M in GLOB.player_list) M << sound('sound/misc/deltakalaxon.ogg') - for(var/obj/machinery/firealarm/FA in machines) + for(var/obj/machinery/firealarm/FA in GLOB.machines) if(FA.z == ZLEVEL_STATION) FA.update_icon() - for(var/obj/machinery/computer/shuttle/pod/pod in machines) + for(var/obj/machinery/computer/shuttle/pod/pod in GLOB.machines) pod.admin_controlled = 0 else return /proc/get_security_level() - switch(security_level) + switch(GLOB.security_level) if(SEC_LEVEL_GREEN) return "green" if(SEC_LEVEL_BLUE) diff --git a/code/modules/shuttle/arrivals.dm b/code/modules/shuttle/arrivals.dm index 42248f1b19..d961447053 100644 --- a/code/modules/shuttle/arrivals.dm +++ b/code/modules/shuttle/arrivals.dm @@ -39,23 +39,23 @@ areas = list() var/list/new_latejoin = list() - for(var/area/shuttle/arrival/A in sortedAreas) + for(var/area/shuttle/arrival/A in GLOB.sortedAreas) for(var/obj/structure/chair/C in A) new_latejoin += C if(!console) console = locate(/obj/machinery/requests_console) in A areas += A - if(latejoin.len) + if(GLOB.latejoin.len) WARNING("Map contains predefined latejoin spawn points and an arrivals shuttle. Using the arrivals shuttle.") if(!new_latejoin.len) WARNING("Arrivals shuttle contains no chairs for spawn points. Reverting to latejoin landmarks.") - if(!latejoin.len) + if(!GLOB.latejoin.len) WARNING("No latejoin landmarks exist. Players will spawn unbuckled on the shuttle.") return - latejoin = new_latejoin + GLOB.latejoin = new_latejoin /obj/docking_port/mobile/arrivals/dockRoundstart() SSshuttle.generate_transit_dock(src) @@ -66,12 +66,12 @@ /obj/docking_port/mobile/arrivals/check() . = ..() - + if(perma_docked) if(mode != SHUTTLE_CALL) sound_played = FALSE mode = SHUTTLE_IDLE - else + else SendToStation() return @@ -79,7 +79,7 @@ if(!CheckTurfsPressure()) damaged = FALSE if(console) - console.say("Repairs complete, launching soon.") + console.say("Repairs complete, launching soon.") return //If this proc is high on the profiler add a cooldown to the stuff after this line @@ -88,12 +88,12 @@ damaged = TRUE if(console) console.say("Alert, hull breach detected!") - var/obj/machinery/announcement_system/announcer = pick(announcement_systems) + var/obj/machinery/announcement_system/announcer = pick(GLOB.announcement_systems) announcer.announce("ARRIVALS_BROKEN", channels = list()) if(mode != SHUTTLE_CALL) sound_played = FALSE mode = SHUTTLE_IDLE - else + else SendToStation() return @@ -112,7 +112,7 @@ Launch(FALSE) /obj/docking_port/mobile/arrivals/proc/CheckTurfsPressure() - for(var/I in latejoin) + for(var/I in GLOB.latejoin) var/turf/open/T = get_turf(I) var/pressure = T.air.return_pressure() if(pressure < HAZARD_LOW_PRESSURE || pressure > HAZARD_HIGH_PRESSURE) //simple safety check @@ -120,7 +120,7 @@ return FALSE /obj/docking_port/mobile/arrivals/proc/PersonCheck() - for(var/M in (living_mob_list & player_list)) + for(var/M in (GLOB.living_mob_list & GLOB.player_list)) var/mob/living/L = M if((get_area(M) in areas) && L.stat != DEAD) return TRUE @@ -130,7 +130,7 @@ var/dockTime = config.arrivals_shuttle_dock_window if(mode == SHUTTLE_CALL && timeLeft(1) > dockTime) if(console) - console.say(damaged ? "Initiating emergency docking for repairs!" : "Now approaching: [SSmapping.config.map_name].") + console.say(damaged ? "Initiating emergency docking for repairs!" : "Now approaching: [station_name()].") hyperspace_sound(HYPERSPACE_LAUNCH, areas) //for the new guy setTimer(dockTime) @@ -174,7 +174,7 @@ /obj/docking_port/mobile/arrivals/proc/RequireUndocked(mob/user) if(mode == SHUTTLE_CALL || damaged) return - + Launch(TRUE) user << "Calling your shuttle. One moment..." diff --git a/code/modules/shuttle/assault_pod.dm b/code/modules/shuttle/assault_pod.dm index 0e18c4cdc5..37cd0238b3 100644 --- a/code/modules/shuttle/assault_pod.dm +++ b/code/modules/shuttle/assault_pod.dm @@ -32,8 +32,8 @@ /obj/item/device/assault_pod/attack_self(mob/living/user) var/target_area - target_area = input("Area to land", "Select a Landing Zone", target_area) in teleportlocs - var/area/picked_area = teleportlocs[target_area] + target_area = input("Area to land", "Select a Landing Zone", target_area) in GLOB.teleportlocs + var/area/picked_area = GLOB.teleportlocs[target_area] if(!src || QDELETED(src)) return @@ -49,7 +49,7 @@ landing_zone.height = height landing_zone.setDir(lz_dir) - for(var/obj/machinery/computer/shuttle/S in machines) + for(var/obj/machinery/computer/shuttle/S in GLOB.machines) if(S.shuttleId == shuttle_id) S.possible_destinations = "[landing_zone.id]" diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index 7addfe25fe..07c135d795 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -16,7 +16,7 @@ say("Please equip your ID card into your ID slot to authenticate.") . = ..() -/obj/machinery/computer/emergency_shuttle/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = human_adjacent_state) +/obj/machinery/computer/emergency_shuttle/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.human_adjacent_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) @@ -63,7 +63,7 @@ to_chat(user, "You don't have an ID.") return - if(!(access_heads in ID.access)) + if(!(GLOB.access_heads in ID.access)) to_chat(user, "The access level of your card is not high enough.") return @@ -118,7 +118,14 @@ // Launch check is in process in case auth_need changes for some reason // probably external. . = FALSE - if(!SSshuttle.emergency || ENGINES_STARTED || (!IS_DOCKED)) + if(!SSshuttle.emergency) + return + + if(SSshuttle.emergency.mode == SHUTTLE_STRANDED) + authorized.Cut() + emagged = FALSE + + if(ENGINES_STARTED || (!IS_DOCKED)) return . // Check to see if we've reached criteria for early launch @@ -236,7 +243,7 @@ /obj/docking_port/mobile/emergency/proc/is_hijacked() var/has_people = FALSE - for(var/mob/living/player in player_list) + for(var/mob/living/player in GLOB.player_list) if(player.mind) if(player.stat != DEAD) if(issilicon(player)) //Borgs are technically dead anyways @@ -288,7 +295,7 @@ // Gangs only have one attempt left if the shuttle has // docked with the station to prevent suffering from // endless dominator delays - for(var/datum/gang/G in ticker.mode.gangs) + for(var/datum/gang/G in SSticker.mode.gangs) if(G.is_dominating) G.dom_attempts = 0 else @@ -323,7 +330,7 @@ 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. var/list/areas = list() - for(var/area/shuttle/escape/E in sortedAreas) + for(var/area/shuttle/escape/E in GLOB.sortedAreas) areas += E hyperspace_sound(HYPERSPACE_WARMUP, areas) @@ -337,7 +344,7 @@ //now move the actual emergency shuttle to its transit dock var/list/areas = list() - for(var/area/shuttle/escape/E in sortedAreas) + for(var/area/shuttle/escape/E in GLOB.sortedAreas) areas += E hyperspace_sound(HYPERSPACE_LAUNCH, areas) enterTransit() @@ -352,7 +359,7 @@ if(SHUTTLE_ESCAPE) if(sound_played && time_left <= HYPERSPACE_END_TIME) var/list/areas = list() - for(var/area/shuttle/escape/E in sortedAreas) + for(var/area/shuttle/escape/E in GLOB.sortedAreas) areas += E hyperspace_sound(HYPERSPACE_END, areas) if(areaInstance.parallax_movedir && time_left <= PARALLAX_LOOP_TIME) @@ -397,7 +404,7 @@ /obj/docking_port/mobile/pod/request() var/obj/machinery/computer/shuttle/S = getControlConsole() - if(security_level == SEC_LEVEL_RED || security_level == SEC_LEVEL_DELTA || (S && S.emagged)) + if(GLOB.security_level == SEC_LEVEL_RED || GLOB.security_level == SEC_LEVEL_DELTA || (S && S.emagged)) if(launch_status == UNLAUNCHED) launch_status = EARLY_LAUNCHED return ..() @@ -503,7 +510,7 @@ return /obj/item/weapon/storage/pod/MouseDrop(over_object, src_location, over_location) - if(security_level == SEC_LEVEL_RED || security_level == SEC_LEVEL_DELTA || unlocked) + if(GLOB.security_level == SEC_LEVEL_RED || GLOB.security_level == SEC_LEVEL_DELTA || unlocked) . = ..() else to_chat(usr, "The storage unit will only unlock during a Red or Delta security alert.") diff --git a/code/modules/shuttle/ferry.dm b/code/modules/shuttle/ferry.dm index 88129d562d..2e04fdd9af 100644 --- a/code/modules/shuttle/ferry.dm +++ b/code/modules/shuttle/ferry.dm @@ -3,7 +3,7 @@ circuit = /obj/item/weapon/circuitboard/computer/ferry shuttleId = "ferry" possible_destinations = "ferry_home;ferry_away" - req_access = list(access_cent_general) + req_access = list(GLOB.access_cent_general) var/aiControlDisabled = 1 @@ -20,7 +20,7 @@ var/last_request //prevents spamming admins var/cooldown = 600 possible_destinations = "ferry_home;ferry_away" - req_access = list(access_cent_general) + req_access = list(GLOB.access_cent_general) resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF /obj/machinery/computer/shuttle/ferry/request/Topic(href, href_list) @@ -30,4 +30,4 @@ return last_request = world.time to_chat(usr, "Your request has been recieved by Centcom.") - to_chat(admins, "FERRY: [key_name_admin(usr)] (?) (FLW) (Move Ferry) is requesting to move the transport ferry to Centcom.") + to_chat(GLOB.admins, "FERRY: [key_name_admin(usr)] (?) (FLW) (Move Ferry) is requesting to move the transport ferry to Centcom.") diff --git a/code/modules/shuttle/manipulator.dm b/code/modules/shuttle/manipulator.dm index 64303e0e36..bb2f401cdb 100644 --- a/code/modules/shuttle/manipulator.dm +++ b/code/modules/shuttle/manipulator.dm @@ -35,7 +35,7 @@ /obj/machinery/shuttle_manipulator/ui_interact(mob/user, ui_key = "main", \ datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, \ - datum/ui_state/state = admin_state) + datum/ui_state/state = GLOB.admin_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 699f1921b2..a271ddfe41 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -428,7 +428,7 @@ return ripple_turfs /obj/docking_port/mobile/proc/check_poddoors() - for(var/obj/machinery/door/poddoor/shuttledock/pod in airlocks) + for(var/obj/machinery/door/poddoor/shuttledock/pod in GLOB.airlocks) pod.check() //this is the main proc. It instantly moves our mobile port to stationary port S1 diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm index d039929d2f..9e1cde7857 100644 --- a/code/modules/shuttle/special.dm +++ b/code/modules/shuttle/special.dm @@ -65,9 +65,10 @@ var/never_spoken = TRUE flags = NODECONSTRUCT -/obj/structure/table/abductor/wabbajack/New() +/obj/structure/table/abductor/wabbajack/Initialize(mapload) . = ..() START_PROCESSING(SSobj, src) + grant_language(/datum/language/common) /obj/structure/table/abductor/wabbajack/Destroy() STOP_PROCESSING(SSobj, src) @@ -145,14 +146,13 @@ laws = "1. Serve drinks.\n\ 2. Talk to patrons.\n\ 3. Don't get messed up in their affairs." - languages_spoken = ALL - languages_understood = ALL status_flags = GODMODE // Please don't punch the barkeeper unique_name = FALSE // disables the (123) number suffix /mob/living/simple_animal/drone/snowflake/bardrone/Initialize() . = ..() - access_card.access |= access_cent_bar + access_card.access |= GLOB.access_cent_bar + grant_all_languages(omnitongue=TRUE) /mob/living/simple_animal/hostile/alien/maid/barmaid gold_core_spawnable = 0 @@ -160,8 +160,6 @@ desc = "A barmaid, a maiden found in a bar." pass_flags = PASSTABLE status_flags = GODMODE - languages_spoken = ALL - languages_understood = ALL unique_name = FALSE AIStatus = AI_OFF stop_automated_movement = TRUE @@ -171,9 +169,11 @@ access_card = new /obj/item/weapon/card/id(src) var/datum/job/captain/C = new /datum/job/captain access_card.access = C.get_access() - access_card.access |= access_cent_bar + access_card.access |= GLOB.access_cent_bar access_card.flags |= NODROP + grant_all_languages(omnitongue=TRUE) + /mob/living/simple_animal/hostile/alien/maid/barmaid/Destroy() qdel(access_card) . = ..() @@ -212,13 +212,13 @@ return TRUE var/obj/item/weapon/card/id/ID = user.get_idcard() - if(ID && (access_cent_bar in ID.access)) + if(ID && (GLOB.access_cent_bar in ID.access)) return TRUE //Luxury Shuttle Blockers /obj/effect/forcefield/luxury_shuttle - var/threshhold = 500 + var/threshold = 500 var/static/list/approved_passengers = list() /obj/effect/forcefield/luxury_shuttle/CanPass(atom/movable/mover, turf/target, height=0) @@ -234,15 +234,15 @@ for(var/obj/item/weapon/coin/C in mover.GetAllContents()) total_cash += C.value counted_money += C - if(total_cash >= threshhold) + if(total_cash >= threshold) break for(var/obj/item/stack/spacecash/S in mover.GetAllContents()) total_cash += S.value * S.amount counted_money += S - if(total_cash >= threshhold) + if(total_cash >= threshold) break - if(total_cash >= threshhold) + if(total_cash >= threshold) for(var/obj/I in counted_money) qdel(I) diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index 8f391570fc..1e3b9906be 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -1,4 +1,4 @@ -var/list/blacklisted_cargo_types = typecacheof(list( +GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( /mob/living, /obj/structure/blob, /obj/effect/rune, @@ -18,7 +18,7 @@ var/list/blacklisted_cargo_types = typecacheof(list( /obj/effect/clockwork/spatial_gateway, /obj/structure/destructible/clockwork/powered/clockwork_obelisk, /obj/item/device/warp_cube - )) + ))) /obj/docking_port/mobile/supply name = "supply shuttle" @@ -49,7 +49,7 @@ var/list/blacklisted_cargo_types = typecacheof(list( for(var/trf in areaInstance) var/turf/T = trf for(var/a in T.GetAllContents()) - if(is_type_in_typecache(a, blacklisted_cargo_types)) + if(is_type_in_typecache(a, GLOB.blacklisted_cargo_types)) return FALSE return TRUE @@ -102,7 +102,7 @@ var/list/blacklisted_cargo_types = typecacheof(list( /obj/docking_port/mobile/supply/proc/sell() var/presale_points = SSshuttle.points - if(!exports_list.len) // No exports list? Generate it! + if(!GLOB.exports_list.len) // No exports list? Generate it! setupExports() var/msg = "" @@ -116,7 +116,7 @@ var/list/blacklisted_cargo_types = typecacheof(list( if(sold_atoms) sold_atoms += "." - for(var/a in exports_list) + for(var/a in GLOB.exports_list) var/datum/export/E = a var/export_text = E.total_printout() if(!export_text) diff --git a/code/modules/shuttle/syndicate.dm b/code/modules/shuttle/syndicate.dm index b4166a38d1..22a408ec6c 100644 --- a/code/modules/shuttle/syndicate.dm +++ b/code/modules/shuttle/syndicate.dm @@ -6,7 +6,7 @@ icon_screen = "syndishuttle" icon_keyboard = "syndie_key" light_color = LIGHT_COLOR_RED - req_access = list(access_syndicate) + req_access = list(GLOB.access_syndicate) shuttleId = "syndicate" possible_destinations = "syndicate_away;syndicate_z5;syndicate_ne;syndicate_nw;syndicate_n;syndicate_se;syndicate_sw;syndicate_s" resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF @@ -32,11 +32,11 @@ var/moved = FALSE /obj/item/weapon/circuitboard/computer/syndicate_shuttle/New() - syndicate_shuttle_boards += src + GLOB.syndicate_shuttle_boards += src ..() /obj/item/weapon/circuitboard/computer/syndicate_shuttle/Destroy() - syndicate_shuttle_boards -= src + GLOB.syndicate_shuttle_boards -= src return ..() /obj/machinery/computer/shuttle/syndicate/drop_pod @@ -44,7 +44,7 @@ icon = 'icons/obj/terminals.dmi' icon_state = "dorm_available" light_color = LIGHT_COLOR_BLUE - req_access = list(access_syndicate) + req_access = list(GLOB.access_syndicate) shuttleId = "steel_rain" possible_destinations = null clockwork = TRUE //it'd look weird diff --git a/code/modules/shuttle/transit.dm b/code/modules/shuttle/transit.dm index 24bed0c63c..c03d4a2645 100644 --- a/code/modules/shuttle/transit.dm +++ b/code/modules/shuttle/transit.dm @@ -7,8 +7,8 @@ /obj/effect/landmark/transit/New() . = ..() - transit_markers += src + GLOB.transit_markers += src /obj/effect/landmark/transit/Destroy() - transit_markers -= src + GLOB.transit_markers -= src . = ..() diff --git a/code/modules/space_transition/space_transition.dm b/code/modules/space_transition/space_transition.dm index 5c1def150b..e1a4c743bf 100644 --- a/code/modules/space_transition/space_transition.dm +++ b/code/modules/space_transition/space_transition.dm @@ -5,8 +5,7 @@ #define Z_LEVEL_EAST "4" #define Z_LEVEL_WEST "8" - -var/list/z_levels_list = list() +GLOBAL_LIST_EMPTY(z_levels_list) /datum/space_level var/name = "Your config settings failed, you need to fix this for the datum space levels to work" @@ -86,7 +85,7 @@ var/list/z_levels_list = list() D.name = A D.z_value = k if(D.linked != CROSSLINKED) - z_levels_list["[D.z_value]"] = D + GLOB.z_levels_list["[D.z_value]"] = D else SLS.Add(D) k++ @@ -116,8 +115,8 @@ var/list/z_levels_list = list() P = pick(possible_points) grid["[D.z_value]"] = D - for(var/A in z_levels_list) - grid[A] = z_levels_list[A] + for(var/A in GLOB.z_levels_list) + grid[A] = GLOB.z_levels_list[A] //Lists below are pre-calculated values arranged in the list in such a way to be easily accessable in the loop by the counter //Its either this or madness with lotsa math @@ -157,7 +156,7 @@ var/list/z_levels_list = list() //S.maptext = "[zdestination]" // for debugging for(var/A in grid) - z_levels_list[A] = grid[A] + GLOB.z_levels_list[A] = grid[A] #undef Z_LEVEL_NORTH #undef Z_LEVEL_SOUTH diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm index d8d42d1c99..3de937a15e 100644 --- a/code/modules/spells/spell.dm +++ b/code/modules/spells/spell.dm @@ -9,7 +9,7 @@ var/mob/living/ranged_ability_user var/ranged_clickcd_override = -1 -var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin verb for now +GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for the badmin verb for now /obj/effect/proc_holder/Destroy() if(ranged_ability_user) @@ -133,7 +133,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin return 0 var/turf/T = get_turf(user) - if(T.z == ZLEVEL_CENTCOM && (!centcom_cancast || ticker.mode.name == "ragin' mages")) //Certain spells are not allowed on the centcom zlevel + if(T.z == ZLEVEL_CENTCOM && (!centcom_cancast || SSticker.mode.name == "ragin' mages")) //Certain spells are not allowed on the centcom zlevel to_chat(user, "You can't cast this spell here.") return 0 @@ -329,6 +329,8 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin adjust_var(user, holder_var_type, -holder_var_amount) /obj/effect/proc_holder/spell/proc/adjust_var(mob/living/target = usr, type, amount) //handles the adjustment of the var when the spell is used. has some hardcoded types + if (!istype(target)) + return switch(type) if("bruteloss") target.adjustBruteLoss(amount) diff --git a/code/modules/spells/spell_types/area_teleport.dm b/code/modules/spells/spell_types/area_teleport.dm index 12bc45931b..3e34a54eb8 100644 --- a/code/modules/spells/spell_types/area_teleport.dm +++ b/code/modules/spells/spell_types/area_teleport.dm @@ -24,12 +24,12 @@ var/A = null if(!randomise_selection) - A = input("Area to teleport to", "Teleport", A) as null|anything in teleportlocs + A = input("Area to teleport to", "Teleport", A) as null|anything in GLOB.teleportlocs else - A = pick(teleportlocs) + A = pick(GLOB.teleportlocs) if(!A) return - var/area/thearea = teleportlocs[A] + var/area/thearea = GLOB.teleportlocs[A] return thearea diff --git a/code/modules/spells/spell_types/devil.dm b/code/modules/spells/spell_types/devil.dm index 91226d2e44..c9ff892910 100644 --- a/code/modules/spells/spell_types/devil.dm +++ b/code/modules/spells/spell_types/devil.dm @@ -191,7 +191,7 @@ for(var/mob/living/carbon/human/H in targets) if(!H.mind) continue - for(var/datum/objective/sintouched/A in H.mind.objectives) + if(locate(/datum/objective/sintouched) in H.mind.objectives) continue H.influenceSin() H.Weaken(2) diff --git a/code/modules/spells/spell_types/ethereal_jaunt.dm b/code/modules/spells/spell_types/ethereal_jaunt.dm index 904843d7f8..f1e959fd6f 100644 --- a/code/modules/spells/spell_types/ethereal_jaunt.dm +++ b/code/modules/spells/spell_types/ethereal_jaunt.dm @@ -56,7 +56,7 @@ qdel(holder) if(!QDELETED(target)) if(mobloc.density) - for(var/direction in alldirs) + for(var/direction in GLOB.alldirs) var/turf/T = get_step(mobloc, direction) if(T) if(target.Move(T)) diff --git a/code/modules/spells/spell_types/lichdom.dm b/code/modules/spells/spell_types/lichdom.dm index 3058051fdc..f72eff6302 100644 --- a/code/modules/spells/spell_types/lichdom.dm +++ b/code/modules/spells/spell_types/lichdom.dm @@ -17,124 +17,139 @@ cooldown_min = 10 include_user = 1 - var/obj/marked_item - var/mob/living/current_body - var/resurrections = 0 - var/existence_stops_round_end = 0 - action_icon_state = "skeleton" -/obj/effect/proc_holder/spell/targeted/lichdom/New() - if(initial(ticker.mode.round_ends_with_antag_death)) - existence_stops_round_end = 1 - ticker.mode.round_ends_with_antag_death = 0 - ..() - -/obj/effect/proc_holder/spell/targeted/lichdom/Destroy() - for(var/datum/mind/M in ticker.mode.wizards) //Make sure no other bones are about - for(var/obj/effect/proc_holder/spell/S in M.spell_list) - if(istype(S,/obj/effect/proc_holder/spell/targeted/lichdom) && S != src) - return ..() - if(existence_stops_round_end) - ticker.mode.round_ends_with_antag_death = 1 - ..() - /obj/effect/proc_holder/spell/targeted/lichdom/cast(list/targets,mob/user = usr) for(var/mob/M in targets) var/list/hand_items = list() if(iscarbon(M)) hand_items = list(M.get_active_held_item(),M.get_inactive_held_item()) - - if(marked_item && !stat_allowed) //sanity, shouldn't happen without badminry - marked_item = null + if(!hand_items.len) + to_chat(M, "You must hold an item you wish to make your phylactery...") return - if(stat_allowed) //Death is not my end! - if(M.stat == CONSCIOUS && iscarbon(M)) - to_chat(M, "You aren't dead enough to revive!" ) - charge_counter = charge_max - return + var/obj/item/marked_item - if(!marked_item || QDELETED(marked_item)) //Wait nevermind - to_chat(M, "Your phylactery is gone!") - return + for(var/obj/item in hand_items) + // I ensouled the nuke disk once. But it's probably a really + // mean tactic, so probably should discourage it. + if(ABSTRACT in item.flags || NODROP in item.flags || HAS_SECONDARY_FLAG(item, STATIONLOVING)) + continue + marked_item = item + to_chat(M, "You begin to focus your very being into [item]...") + break - var/turf/user_turf = get_turf(M) - var/turf/item_turf = get_turf(marked_item) + if(!marked_item) + to_chat(M, "None of the items you hold are suitable for emplacement of your fragile soul.") + return - if(user_turf.z != item_turf.z) - to_chat(M, "Your phylactery is out of range!") - return + playsound(user, 'sound/effects/pope_entry.ogg', 100) - if(isobserver(M)) - var/mob/dead/observer/O = M - O.reenter_corpse() + if(!do_after(M, 50, needhand=FALSE, target=marked_item)) + to_chat(M, "Your soul snaps back to your body as you stop ensouling [marked_item]!") + return - var/mob/living/carbon/human/lich = new /mob/living/carbon/human(item_turf) + marked_item.name = "ensouled [marked_item.name]" + marked_item.desc += "\nA terrible aura surrounds this item, its very existence is offensive to life itself..." + marked_item.add_atom_colour("#003300", ADMIN_COLOUR_PRIORITY) - lich.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(lich), slot_shoes) - lich.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(lich), slot_w_uniform) - lich.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/black(lich), slot_wear_suit) - lich.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/black(lich), slot_head) + new /obj/item/phylactery(marked_item, M.mind) - lich.real_name = M.mind.name - M.mind.transfer_to(lich) - lich.hardset_dna(null,null,lich.real_name,null,/datum/species/skeleton) - to_chat(lich, "Your bones clatter and shutter as you are pulled back into this world!") - charge_max += 600 - var/mob/old_body = current_body - var/turf/body_turf = get_turf(old_body) - current_body = lich - lich.Weaken(10+10*resurrections) - ++resurrections - if(old_body && old_body.loc) - if(iscarbon(old_body)) - var/mob/living/carbon/C = old_body - for(var/obj/item/W in C) - C.dropItemToGround(W) - for(var/X in C.internal_organs) - var/obj/item/organ/I = X - I.Remove(C) - I.forceMove(body_turf) - var/wheres_wizdo = dir2text(get_dir(body_turf, item_turf)) - if(wheres_wizdo) - old_body.visible_message("Suddenly [old_body.name]'s corpse falls to pieces! You see a strange energy rise from the remains, and speed off towards the [wheres_wizdo]!") - body_turf.Beam(item_turf,icon_state="lichbeam",time=10+10*resurrections,maxdistance=INFINITY) - old_body.dust() + to_chat(M, "With a hideous feeling of emptiness you watch in horrified fascination as skin sloughs off bone! Blood boils, nerves disintegrate, eyes boil in their sockets! As your organs crumble to dust in your fleshless chest you come to terms with your choice. You're a lich!") + M.set_species(/datum/species/skeleton) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + H.dropItemToGround(H.w_uniform) + H.dropItemToGround(H.wear_suit) + H.dropItemToGround(H.head) + H.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/black(H), slot_wear_suit) + H.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/black(H), slot_head) + H.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(H), slot_w_uniform) - if(!marked_item) //linking item to the spell - message = "" - for(var/obj/item in hand_items) - if(ABSTRACT in item.flags || NODROP in item.flags) - continue - marked_item = item - to_chat(M, "You begin to focus your very being into the [item.name]...") - break + // you only get one phylactery. + M.mind.RemoveSpell(src) - if(!marked_item) - to_chat(M, "You must hold an item you wish to make your phylactery...") - return - if(!do_after(M, 50, needhand=FALSE, target=marked_item)) - to_chat(M, "Your soul snaps back to your body as you stop ensouling [marked_item.name]!") - marked_item = null - return - name = "RISE!" - desc = "Rise from the dead! You will reform at the location of your phylactery and your old body will crumble away." - charge_max = 1800 //3 minute cooldown, if you rise in sight of someone and killed again, you're probably screwed. - charge_counter = 1800 - stat_allowed = 1 - marked_item.name = "ensouled [marked_item.name]" - marked_item.desc += "\nA terrible aura surrounds this item, its very existence is offensive to life itself..." - marked_item.add_atom_colour("#003300", ADMIN_COLOUR_PRIORITY) - poi_list |= marked_item +/obj/item/phylactery + name = "phylactery" + desc = "Stores souls. Revives liches. Also repels mosquitos." + icon = 'icons/obj/projectiles.dmi' + icon_state = "bluespace" + color = "#003300" + light_color = "#003300" + var/lon_range = 3 + var/resurrections = 0 + var/datum/mind/mind + var/respawn_time = 1800 - to_chat(M, "With a hideous feeling of emptiness you watch in horrified fascination as skin sloughs off bone! Blood boils, nerves disintegrate, eyes boil in their sockets! As your organs crumble to dust in your fleshless chest you come to terms with your choice. You're a lich!") - M.set_species(/datum/species/skeleton) - current_body = M.mind.current - if(ishuman(M)) - var/mob/living/carbon/human/H = M - H.dropItemToGround(H.wear_suit) - H.dropItemToGround(H.head) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/black(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/black(H), slot_head) + var/static/active_phylacteries = 0 + +/obj/item/phylactery/Initialize(mapload, datum/mind/newmind) + ..() + mind = newmind + name = "phylactery of [mind.name]" + + active_phylacteries++ + GLOB.poi_list |= src + START_PROCESSING(SSobj, src) + set_light(lon_range) + if(initial(SSticker.mode.round_ends_with_antag_death)) + SSticker.mode.round_ends_with_antag_death = FALSE + +/obj/item/phylactery/Destroy(force=FALSE) + STOP_PROCESSING(SSobj, src) + active_phylacteries-- + GLOB.poi_list -= src + if(!active_phylacteries) + SSticker.mode.round_ends_with_antag_death = initial(SSticker.mode.round_ends_with_antag_death) + . = ..() + +/obj/item/phylactery/process() + if(QDELETED(mind)) + qdel(src) + return + + if(!mind.current || (mind.current && mind.current.stat == DEAD)) + addtimer(CALLBACK(src, .proc/rise), respawn_time, TIMER_UNIQUE) + +/obj/item/phylactery/proc/rise() + if(mind.current && mind.current.stat != DEAD) + return "[mind] already has a living body: [mind.current]" + + var/turf/item_turf = get_turf(src) + if(!item_turf) + return "[src] is not at a turf? NULLSPACE!?" + + var/mob/old_body = mind.current + var/mob/living/carbon/human/lich = new(item_turf) + + lich.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(lich), slot_shoes) + lich.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(lich), slot_w_uniform) + lich.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/black(lich), slot_wear_suit) + lich.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/black(lich), slot_head) + + lich.real_name = mind.name + mind.transfer_to(lich) + mind.grab_ghost(force=TRUE) + lich.hardset_dna(null,null,lich.real_name,null,/datum/species/skeleton) + to_chat(lich, "Your bones clatter and shutter as you are pulled back into this world!") + var/turf/body_turf = get_turf(old_body) + lich.Weaken(10+10*resurrections) + resurrections++ + if(old_body && old_body.loc) + if(iscarbon(old_body)) + var/mob/living/carbon/C = old_body + for(var/obj/item/W in C) + C.dropItemToGround(W) + for(var/X in C.internal_organs) + var/obj/item/organ/I = X + I.Remove(C) + I.forceMove(body_turf) + var/wheres_wizdo = dir2text(get_dir(body_turf, item_turf)) + if(wheres_wizdo) + old_body.visible_message("Suddenly [old_body.name]'s corpse falls to pieces! You see a strange energy rise from the remains, and speed off towards the [wheres_wizdo]!") + body_turf.Beam(item_turf,icon_state="lichbeam",time=10+10*resurrections,maxdistance=INFINITY) + old_body.dust() + + + return "Respawn of [mind] successful." diff --git a/code/modules/spells/spell_types/rightandwrong.dm b/code/modules/spells/spell_types/rightandwrong.dm index dc36403fcb..a007c6c919 100644 --- a/code/modules/spells/spell_types/rightandwrong.dm +++ b/code/modules/spells/spell_types/rightandwrong.dm @@ -9,12 +9,12 @@ to_chat(user, "You summoned [summon_type ? "magic" : "guns"]!") message_admins("[key_name_admin(user, 1)] summoned [summon_type ? "magic" : "guns"]!") log_game("[key_name(user)] summoned [summon_type ? "magic" : "guns"]!") - for(var/mob/living/carbon/human/H in player_list) + for(var/mob/living/carbon/human/H in GLOB.player_list) if(H.stat == 2 || !(H.client)) continue if(H.mind) if(H.mind.special_role == "Wizard" || H.mind.special_role == "apprentice" || H.mind.special_role == "survivalist") continue - if(prob(survivor_probability) && !(H.mind in ticker.mode.traitors)) - ticker.mode.traitors += H.mind + if(prob(survivor_probability) && !(H.mind in SSticker.mode.traitors)) + SSticker.mode.traitors += H.mind if(!summon_type) var/datum/objective/steal_five_of_type/summon_guns/guns = new guns.owner = H.mind @@ -203,17 +203,17 @@ /proc/summonevents() - if(!SSevent.wizardmode) - SSevent.frequency_lower = 600 //1 minute lower bound - SSevent.frequency_upper = 3000 //5 minutes upper bound - SSevent.toggleWizardmode() - SSevent.reschedule() + if(!SSevents.wizardmode) + SSevents.frequency_lower = 600 //1 minute lower bound + SSevents.frequency_upper = 3000 //5 minutes upper bound + SSevents.toggleWizardmode() + SSevents.reschedule() else //Speed it up - SSevent.frequency_upper -= 600 //The upper bound falls a minute each time, making the AVERAGE time between events lessen - if(SSevent.frequency_upper < SSevent.frequency_lower) //Sanity - SSevent.frequency_upper = SSevent.frequency_lower + SSevents.frequency_upper -= 600 //The upper bound falls a minute each time, making the AVERAGE time between events lessen + if(SSevents.frequency_upper < SSevents.frequency_lower) //Sanity + SSevents.frequency_upper = SSevents.frequency_lower - SSevent.reschedule() - message_admins("Summon Events intensifies, events will now occur every [SSevent.frequency_lower / 600] to [SSevent.frequency_upper / 600] minutes.") + SSevents.reschedule() + message_admins("Summon Events intensifies, events will now occur every [SSevents.frequency_lower / 600] to [SSevents.frequency_upper / 600] minutes.") log_game("Summon Events was increased!") diff --git a/code/modules/spells/spell_types/shapeshift.dm b/code/modules/spells/spell_types/shapeshift.dm index 456d98c7fc..63c840a9b0 100644 --- a/code/modules/spells/spell_types/shapeshift.dm +++ b/code/modules/spells/spell_types/shapeshift.dm @@ -27,7 +27,10 @@ for(var/path in possible_shapes) var/mob/living/simple_animal/A = path animal_list[initial(A.name)] = path - shapeshift_type = input(M, "Choose Your Animal Form!", "It's Morphing Time!", null) as anything in animal_list + var/new_shapeshift_type = input(M, "Choose Your Animal Form!", "It's Morphing Time!", null) as null|anything in animal_list + if(shapeshift_type) + return + shapeshift_type = new_shapeshift_type if(!shapeshift_type) //If you aren't gonna decide I am! shapeshift_type = pick(animal_list) shapeshift_type = animal_list[shapeshift_type] @@ -80,4 +83,4 @@ shapeshift_type = /mob/living/simple_animal/hostile/megafauna/dragon/lesser list/current_shapes = list(/mob/living/simple_animal/hostile/megafauna/dragon/lesser) list/current_casters = list() - list/possible_shapes = list(/mob/living/simple_animal/hostile/megafauna/dragon/lesser) \ No newline at end of file + list/possible_shapes = list(/mob/living/simple_animal/hostile/megafauna/dragon/lesser) diff --git a/code/modules/spells/spell_types/spacetime_distortion.dm b/code/modules/spells/spell_types/spacetime_distortion.dm index 99cc0d3c99..bed0255b02 100644 --- a/code/modules/spells/spell_types/spacetime_distortion.dm +++ b/code/modules/spells/spell_types/spacetime_distortion.dm @@ -29,7 +29,8 @@ turf_steps[pick_n_take(turfs)] = pick_n_take(turfs) if(turfs.len > 0) var/turf/loner = pick(turfs) - turf_steps[loner] = pick(Z_TURFS(user.z)) + var/area/A = get_area(user) + turf_steps[loner] = get_turf(pick(A.contents)) perform(turf_steps,user=user) @@ -44,7 +45,10 @@ var/obj/effect/cross_action/spacetime_dist/STD0 = new /obj/effect/cross_action/spacetime_dist(T0) var/obj/effect/cross_action/spacetime_dist/STD1 = new /obj/effect/cross_action/spacetime_dist(T1) STD0.linked_dist = STD1 + STD0.add_overlay(T1.photograph()) STD1.linked_dist = STD0 + STD1.add_overlay(T0.photograph()) + STD1.set_light(4, 30, "#c9fff5") effects += STD0 effects += STD1 @@ -63,16 +67,16 @@ /obj/effect/cross_action/spacetime_dist name = "spacetime distortion" desc = "A distortion in spacetime. You can hear faint music..." - icon_state = "wave1" - color = "#8A2BE2" + icon_state = "" var/obj/effect/cross_action/spacetime_dist/linked_dist var/busy = FALSE var/sound var/walks_left = 50 //prevents the game from hanging in extreme cases (such as minigun fire) -/obj/effect/cross_action/spacetime_dist/New() +/obj/effect/cross_action/spacetime_dist/Initialize(mapload) ..() - sound = "sound/guitar/[safepick(guitar_notes)]" + sound = "sound/guitar/[safepick(GLOB.guitar_notes)]" + dir = pick(GLOB.cardinal) /obj/effect/cross_action/spacetime_dist/proc/walk_link(atom/movable/AM) if(linked_dist && walks_left > 0) diff --git a/code/modules/station_goals/bsa.dm b/code/modules/station_goals/bsa.dm index a0e481ccca..0d4200d49e 100644 --- a/code/modules/station_goals/bsa.dm +++ b/code/modules/station_goals/bsa.dm @@ -248,7 +248,7 @@ var/area_aim = FALSE //should also show areas for targeting /obj/machinery/computer/bsa_control/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) + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "bsa", name, 400, 305, master_ui, state) @@ -280,12 +280,12 @@ /obj/machinery/computer/bsa_control/proc/calibrate(mob/user) var/list/gps_locators = list() - for(var/obj/item/device/gps/G in GPS_list) //nulls on the list somehow + for(var/obj/item/device/gps/G in GLOB.GPS_list) //nulls on the list somehow gps_locators[G.gpstag] = G var/list/options = gps_locators if(area_aim) - options += teleportlocs + options += GLOB.teleportlocs var/V = input(user,"Select target", "Select target",null) in options|null target = options[V] diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm index 78891e5157..d7f9a72a9e 100644 --- a/code/modules/station_goals/dna_vault.dm +++ b/code/modules/station_goals/dna_vault.dm @@ -20,7 +20,7 @@ /datum/station_goal/dna_vault/New() ..() animal_count = rand(15,20) //might be too few given ~15 roundstart stationside ones - human_count = rand(round(0.75 * ticker.totalPlayersReady) , ticker.totalPlayersReady) // 75%+ roundstart population. + human_count = rand(round(0.75 * SSticker.totalPlayersReady) , SSticker.totalPlayersReady) // 75%+ roundstart population. var/non_standard_plants = non_standard_plants_count() plant_count = rand(round(0.5 * non_standard_plants),round(0.7 * non_standard_plants)) @@ -53,7 +53,7 @@ /datum/station_goal/dna_vault/check_completion() if(..()) return TRUE - for(var/obj/machinery/dna_vault/V in machines) + for(var/obj/machinery/dna_vault/V in GLOB.machines) if(V.animals.len >= animal_count && V.plants.len >= plant_count && V.dna.len >= human_count) return TRUE return FALSE @@ -75,8 +75,6 @@ plants = list() dna = list() -var/list/non_simple_animals = typecacheof(list(/mob/living/carbon/monkey,/mob/living/carbon/alien)) - /obj/item/device/dna_probe/afterattack(atom/target, mob/user, proximity) ..() if(!proximity || !target) @@ -96,6 +94,7 @@ var/list/non_simple_animals = typecacheof(list(/mob/living/carbon/monkey,/mob/li to_chat(user, "Plant data added to local storage.") //animals + var/static/list/non_simple_animals = typecacheof(list(/mob/living/carbon/monkey,/mob/living/carbon/alien)) if(isanimal(target) || is_type_in_typecache(target,non_simple_animals)) if(isanimal(target)) var/mob/living/simple_animal/A = target @@ -152,7 +151,7 @@ var/list/non_simple_animals = typecacheof(list(/mob/living/carbon/monkey,/mob/li var/list/obj/structure/fillers = list() -/obj/machinery/dna_vault/New() +/obj/machinery/dna_vault/Initialize() //TODO: Replace this,bsa and gravgen with some big machinery datum var/list/occupied = list() for(var/direct in list(EAST,WEST,SOUTHEAST,SOUTHWEST)) @@ -165,12 +164,13 @@ var/list/non_simple_animals = typecacheof(list(/mob/living/carbon/monkey,/mob/li F.parent = src fillers += F - if(ticker.mode) - for(var/datum/station_goal/dna_vault/G in ticker.mode.station_goals) + if(SSticker.mode) + for(var/datum/station_goal/dna_vault/G in SSticker.mode.station_goals) animals_max = G.animal_count plants_max = G.plant_count dna_max = G.human_count break + ..() /obj/machinery/dna_vault/Destroy() for(var/V in fillers) @@ -180,7 +180,7 @@ var/list/non_simple_animals = typecacheof(list(/mob/living/carbon/monkey,/mob/li . = ..() -/obj/machinery/dna_vault/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) +/obj/machinery/dna_vault/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) roll_powers(user) diff --git a/code/modules/station_goals/shield.dm b/code/modules/station_goals/shield.dm index e5d548d830..863d7d4bde 100644 --- a/code/modules/station_goals/shield.dm +++ b/code/modules/station_goals/shield.dm @@ -30,7 +30,7 @@ /datum/station_goal/proc/get_coverage() var/list/coverage = list() - for(var/obj/machinery/satellite/meteor_shield/A in machines) + for(var/obj/machinery/satellite/meteor_shield/A in GLOB.machines) if(!A.active || A.z != ZLEVEL_STATION) continue coverage |= view(A.kill_range,A) @@ -47,7 +47,7 @@ circuit = /obj/item/weapon/circuitboard/machine/computer/sat_control var/notice -/obj/machinery/computer/sat_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) +/obj/machinery/computer/sat_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "sat_control", name, 400, 305, master_ui, state) @@ -62,7 +62,7 @@ . = TRUE /obj/machinery/computer/sat_control/proc/toggle(id) - for(var/obj/machinery/satellite/S in machines) + for(var/obj/machinery/satellite/S in GLOB.machines) if(S.id == id && S.z == z) S.toggle() @@ -70,7 +70,7 @@ var/list/data = list() data["satellites"] = list() - for(var/obj/machinery/satellite/S in machines) + for(var/obj/machinery/satellite/S in GLOB.machines) data["satellites"] += list(list( "id" = S.id, "active" = S.active, @@ -79,7 +79,7 @@ data["notice"] = notice - var/datum/station_goal/station_shield/G = locate() in ticker.mode.station_goals + var/datum/station_goal/station_shield/G = locate() in SSticker.mode.station_goals if(G) data["meteor_shield"] = 1 data["meteor_shield_coverage"] = G.get_coverage() @@ -147,7 +147,7 @@ /obj/machinery/satellite/meteor_shield/process() if(!active) return - for(var/obj/effect/meteor/M in meteor_list) + for(var/obj/effect/meteor/M in GLOB.meteor_list) if(M.z != z) continue if(get_dist(M,src) > kill_range) @@ -166,7 +166,7 @@ change_meteor_chance(0.5) /obj/machinery/satellite/meteor_shield/proc/change_meteor_chance(mod) - var/datum/round_event_control/E = locate(/datum/round_event_control/meteor_wave) in SSevent.control + var/datum/round_event_control/E = locate(/datum/round_event_control/meteor_wave) in SSevents.control if(E) E.weight *= mod diff --git a/code/modules/station_goals/station_goal.dm b/code/modules/station_goals/station_goal.dm index 42a72f0e97..3014659205 100644 --- a/code/modules/station_goals/station_goal.dm +++ b/code/modules/station_goals/station_goal.dm @@ -13,7 +13,7 @@ /datum/station_goal/proc/send_report() priority_announce("Priority Nanotrasen directive received. Project \"[name]\" details inbound.", "Incoming Priority Message", 'sound/AI/commandreport.ogg') - print_command_report(get_report(),"Nanotrasen Directive [pick(phonetic_alphabet)] \Roman[rand(1,50)]", announce=FALSE) + print_command_report(get_report(),"Nanotrasen Directive [pick(GLOB.phonetic_alphabet)] \Roman[rand(1,50)]", announce=FALSE) on_report() /datum/station_goal/proc/on_report() @@ -33,7 +33,7 @@ to_chat(world, "Station Goal : [name] : Failed!") /datum/station_goal/Destroy() - ticker.mode.station_goals -= src + SSticker.mode.station_goals -= src . = ..() /datum/station_goal/Topic(href, href_list) diff --git a/code/modules/stock_market/articles.dm b/code/modules/stock_market/articles.dm index 08c693b680..1ed89d786f 100644 --- a/code/modules/stock_market/articles.dm +++ b/code/modules/stock_market/articles.dm @@ -14,11 +14,11 @@ M += ucfirst(P) return jointext(M, " ") -var/global/list/FrozenAccounts = list() +GLOBAL_LIST_EMPTY(FrozenAccounts) /proc/list_frozen() - for (var/A in FrozenAccounts) - to_chat(usr, "[A]: [length(FrozenAccounts[A])] borrows") + for (var/A in GLOB.FrozenAccounts) + to_chat(usr, "[A]: [length(GLOB.FrozenAccounts[A])] borrows") /datum/article var/headline = "Something big is happening" @@ -94,11 +94,11 @@ var/global/list/FrozenAccounts = list() /datum/article/proc/generateAuthorName() switch(rand(1,3)) if (1) - return "[consonant()]. [pick(last_names)]" + return "[consonant()]. [pick(GLOB.last_names)]" if (2) - return "[prob(50) ? pick(first_names_male) : pick(first_names_female)] [consonant()].[prob(50) ? "[consonant()]. " : null] [pick(last_names)]" + return "[prob(50) ? pick(GLOB.first_names_male) : pick(GLOB.first_names_female)] [consonant()].[prob(50) ? "[consonant()]. " : null] [pick(GLOB.last_names)]" if (3) - return "[prob(50) ? pick(first_names_male) : pick(first_names_female)] \"[prob(50) ? pick(first_names_male) : pick(first_names_female)]\" [pick(last_names)]" + return "[prob(50) ? pick(GLOB.first_names_male) : pick(GLOB.first_names_female)] \"[prob(50) ? pick(GLOB.first_names_male) : pick(GLOB.first_names_female)]\" [pick(GLOB.last_names)]" /datum/article/proc/formatSpacetime() var/ticksc = round(ticks/100) diff --git a/code/modules/stock_market/computer.dm b/code/modules/stock_market/computer.dm index 51ced45e40..5299debf24 100644 --- a/code/modules/stock_market/computer.dm +++ b/code/modules/stock_market/computer.dm @@ -64,8 +64,8 @@ a.updated { var/dat = "[station_name()] Stock Exchange[css]" dat += "Welcome, [logged_in]
    Credits: [balance()]
    " - for (var/datum/stock/S in stockExchange.last_read) - var/list/LR = stockExchange.last_read[S] + for (var/datum/stock/S in GLOB.stockExchange.last_read) + var/list/LR = GLOB.stockExchange.last_read[S] if (!(logged_in in LR)) LR[logged_in] = 0 dat += "View mode: [vmode ? "Compact" : "Full"] " @@ -76,7 +76,7 @@ a.updated { dat += "

    Listed stocks

    " if (vmode == 0) - for (var/datum/stock/S in stockExchange.stocks) + for (var/datum/stock/S in GLOB.stockExchange.stocks) var/mystocks = 0 if (logged_in && (logged_in in S.shareholders)) mystocks = S.shareholders[logged_in] @@ -94,7 +94,7 @@ a.updated { dat += "[prod]
    " var/news = 0 if (logged_in) - var/list/LR = stockExchange.last_read[S] + var/list/LR = GLOB.stockExchange.last_read[S] var/lrt = LR[logged_in] for (var/datum/article/A in S.articles) if (A.ticks > lrt) @@ -111,7 +111,7 @@ a.updated { dat += "" dat += "" - for (var/datum/stock/S in stockExchange.stocks) + for (var/datum/stock/S in GLOB.stockExchange.stocks) var/mystocks = 0 if (logged_in && (logged_in in S.shareholders)) mystocks = S.shareholders[logged_in] @@ -144,7 +144,7 @@ a.updated { dat += "" var/news = 0 if (logged_in) - var/list/LR = stockExchange.last_read[S] + var/list/LR = GLOB.stockExchange.last_read[S] var/lrt = LR[logged_in] for (var/datum/article/A in S.articles) if (A.ticks > lrt) @@ -205,7 +205,7 @@ a.updated { to_chat(user, "Could not complete transaction.") return to_chat(user, "Sold [amt] shares of [S.name] at [S.current_value] a share for [total] credits.") - stockExchange.add_log(/datum/stock_log/sell, user.name, S.name, amt, S.current_value, total) + GLOB.stockExchange.add_log(/datum/stock_log/sell, user.name, S.name, amt, S.current_value, total) /obj/machinery/computer/stockexchange/proc/buy_some_shares(var/datum/stock/S, var/mob/user) if (!user || !S) @@ -240,12 +240,12 @@ a.updated { var/total = amt * S.current_value to_chat(user, "Bought [amt] shares of [S.name] at [S.current_value] a share for [total] credits.") - stockExchange.add_log(/datum/stock_log/buy, user.name, S.name, amt, S.current_value, total) + GLOB.stockExchange.add_log(/datum/stock_log/buy, user.name, S.name, amt, S.current_value, total) /obj/machinery/computer/stockexchange/proc/do_borrowing_deal(var/datum/borrow/B, var/mob/user) if (B.stock.borrow(B, logged_in)) to_chat(user, "You successfully borrowed [B.share_amount] shares. Deposit: [B.deposit].") - stockExchange.add_log(/datum/stock_log/borrow, user.name, B.stock.name, B.share_amount, B.deposit) + GLOB.stockExchange.add_log(/datum/stock_log/borrow, user.name, B.stock.name, B.share_amount, B.deposit) else to_chat(user, "Could not complete transaction. Check your account balance.") @@ -257,7 +257,7 @@ a.updated { usr.machine = src if (href_list["viewhistory"]) - var/datum/stock/S = locate(href_list["viewhistory"]) in stockExchange.stocks + var/datum/stock/S = locate(href_list["viewhistory"]) in GLOB.stockExchange.stocks if (S) S.displayValues(usr) @@ -265,18 +265,18 @@ a.updated { logged_in = null if (href_list["buyshares"]) - var/datum/stock/S = locate(href_list["buyshares"]) in stockExchange.stocks + var/datum/stock/S = locate(href_list["buyshares"]) in GLOB.stockExchange.stocks if (S) buy_some_shares(S, usr) if (href_list["sellshares"]) - var/datum/stock/S = locate(href_list["sellshares"]) in stockExchange.stocks + var/datum/stock/S = locate(href_list["sellshares"]) in GLOB.stockExchange.stocks if (S) sell_some_shares(S, usr) if (href_list["show_logs"]) var/dat = "Stock Transaction Logs

    Stock Transaction Logs


    " - for(var/D in stockExchange.logs) + for(var/D in GLOB.stockExchange.logs) var/datum/stock_log/L = D if(istype(L, /datum/stock_log/buy)) dat += "[L.time] | [L.user_name] bought [L.stocks] stocks at [L.shareprice] a share for [L.money] total credits in [L.company_name].
    " @@ -295,7 +295,7 @@ a.updated { if (href_list["archive"]) var/datum/stock/S = locate(href_list["archive"]) if (logged_in && logged_in != "") - var/list/LR = stockExchange.last_read[S] + var/list/LR = GLOB.stockExchange.last_read[S] LR[logged_in] = world.time var/dat = "News feed for [S.name]

    News feed for [S.name]

    " dat += "

    Events

    " diff --git a/code/modules/stock_market/events.dm b/code/modules/stock_market/events.dm index 72f9858ea3..17a92ea83f 100644 --- a/code/modules/stock_market/events.dm +++ b/code/modules/stock_market/events.dm @@ -102,11 +102,11 @@ company.bankrupt = 1 for (var/X in company.shareholders) var/amt = company.shareholders[X] - stockExchange.balanceLog(X, -amt * company.current_value) + GLOB.stockExchange.balanceLog(X, -amt * company.current_value) company.shareholders = list() company.current_value = 0 company.borrow_brokers = list() - stockExchange.generateStocks(1) + GLOB.stockExchange.generateStocks(1) var/bailout = (effect > 0 && prob(80)) || (effect < 0 && prob(20)) current_title = "[company.name] [bailout ? "bailed out" : "on a painful rebound"]" @@ -180,7 +180,7 @@ /datum/stockEvent/arrest/transition() switch (phase_id) if (0) - tname = "[female ? pick(first_names_female) : pick(first_names_male)] [pick(last_names)]" + tname = "[female ? pick(GLOB.first_names_female) : pick(GLOB.first_names_male)] [pick(GLOB.last_names)]" next_phase = world.time + rand(300*TIME_MULTIPLIER, 600*TIME_MULTIPLIER) * (10*TIME_MULTIPLIER) var/datum/article/A = generateArrestArticle() if (!A.opinion) diff --git a/code/modules/stock_market/stockmarket.dm b/code/modules/stock_market/stockmarket.dm index 2071a7bef9..9a00cfce05 100644 --- a/code/modules/stock_market/stockmarket.dm +++ b/code/modules/stock_market/stockmarket.dm @@ -123,7 +123,7 @@ L.time = time2text(world.timeofday, "hh:mm") logs += L -var/global/datum/stockMarket/stockExchange = new +GLOBAL_DATUM_INIT(stockExchange, /datum/stockMarket, new) /proc/plotBarGraph(var/list/points, var/base_text, var/width=400, var/height=400) var/output = "
     IDNameValueOwnedAvailActions
    [S.available_shares]
    " diff --git a/code/modules/stock_market/stocks.dm b/code/modules/stock_market/stocks.dm index 9969136ec5..2b4a4c3d6f 100644 --- a/code/modules/stock_market/stocks.dm +++ b/code/modules/stock_market/stocks.dm @@ -190,10 +190,10 @@ if (world.time > borrow.grace_expires) modifyAccount(borrow.borrower, -max(current_value * borrow.share_debt, 0), 1) borrows -= borrow - if (borrow.borrower in FrozenAccounts) - FrozenAccounts[borrow.borrower] -= borrow - if (length(FrozenAccounts[borrow.borrower]) == 0) - FrozenAccounts -= borrow.borrower + if (borrow.borrower in GLOB.FrozenAccounts) + GLOB.FrozenAccounts[borrow.borrower] -= borrow + if (length(GLOB.FrozenAccounts[borrow.borrower]) == 0) + GLOB.FrozenAccounts -= borrow.borrower qdel(borrow) else if (world.time > borrow.lease_expires) if (borrow.borrower in shareholders) @@ -201,10 +201,10 @@ if (amt > borrow.share_debt) shareholders[borrow.borrower] -= borrow.share_debt borrows -= borrow - if (borrow.borrower in FrozenAccounts) - FrozenAccounts[borrow.borrower] -= borrow - if (length(FrozenAccounts[borrow.borrower]) == 0) - FrozenAccounts -= borrow.borrower + if (borrow.borrower in GLOB.FrozenAccounts) + GLOB.FrozenAccounts[borrow.borrower] -= borrow + if (length(GLOB.FrozenAccounts[borrow.borrower]) == 0) + GLOB.FrozenAccounts -= borrow.borrower qdel(borrow) else shareholders -= borrow.borrower @@ -229,9 +229,9 @@ /datum/stock/proc/generateBrokers() if (borrow_brokers.len > 2) return - if (!stockExchange.stockBrokers.len) - stockExchange.generateBrokers() - var/broker = pick(stockExchange.stockBrokers) + if (!GLOB.stockExchange.stockBrokers.len) + GLOB.stockExchange.generateBrokers() + var/broker = pick(GLOB.stockExchange.stockBrokers) var/datum/borrow/B = new B.broker = broker B.stock = src @@ -248,7 +248,7 @@ if (by < 0 && SSshuttle.points + by < 0 && !force) return 0 SSshuttle.points += by - stockExchange.balanceLog(whose, by) + GLOB.stockExchange.balanceLog(whose, by) return 1 return 0 @@ -271,10 +271,10 @@ borrows += B B.borrower = who B.grace_expires = B.lease_expires + B.grace_time - if (!(who in FrozenAccounts)) - FrozenAccounts[who] = list(B) + if (!(who in GLOB.FrozenAccounts)) + GLOB.FrozenAccounts[who] = list(B) else - FrozenAccounts[who] += B + GLOB.FrozenAccounts[who] += B return 1 /datum/stock/proc/buyShares(var/who, var/howmany) diff --git a/code/modules/surgery/amputation.dm b/code/modules/surgery/amputation.dm index ccff88204c..af7bb41126 100644 --- a/code/modules/surgery/amputation.dm +++ b/code/modules/surgery/amputation.dm @@ -20,9 +20,6 @@ user.visible_message("[user] severs [L]'s [parse_zone(target_zone)]!", "You sever [L]'s [parse_zone(target_zone)].") if(surgery.operated_bodypart) var/obj/item/bodypart/target_limb = surgery.operated_bodypart - var/obj/item/held_item = L.get_item_for_held_index(target_limb.held_index) target_limb.drop_limb() - if(held_item && held_item.flags & NODROP) - qdel(target_limb) // arm is ruined return 1 \ No newline at end of file diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index e46dd39c80..167ccf62f7 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -20,6 +20,7 @@ var/max_damage = 0 var/list/embedded_objects = list() var/held_index = 0 //are we a hand? if so, which one! + var/is_pseudopart = FALSE //For limbs that don't really exist, eg chainsaws //Coloring and proper item icon update var/skin_tone = "" @@ -554,4 +555,4 @@ icon = 'icons/obj/surgery.dmi' icon_state = "severedtail" color = "#161" - var/markings = "Smooth" \ No newline at end of file + var/markings = "Smooth" diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index 8e5197ef60..7d9cf89ff0 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -30,7 +30,7 @@ var/turf/location = C.loc if(istype(location)) C.add_splatter_floor(location) - var/direction = pick(cardinal) + var/direction = pick(GLOB.cardinal) var/t_range = rand(2,max(throw_range/2, 2)) var/turf/target_turf = get_turf(src) for(var/i in 1 to t_range-1) @@ -86,6 +86,7 @@ var/mob/living/carbon/C = owner update_limb(1) C.bodyparts -= src + if(held_index) C.dropItemToGround(owner.get_item_for_held_index(held_index), 1) C.hand_bodyparts[held_index] = null @@ -125,6 +126,9 @@ C.update_body() C.update_hair() C.update_canmove() + if(is_pseudopart) + drop_organs(C) //Psuedoparts shouldn't have organs, but just in case + qdel(src) //when a limb is dropped, the internal organs are removed from the mob and put into the limb diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm index 1932793654..6417ade819 100644 --- a/code/modules/surgery/bodyparts/head.dm +++ b/code/modules/surgery/bodyparts/head.dm @@ -126,7 +126,7 @@ if(status != BODYPART_ROBOTIC) //having a robotic head hides certain features. //facial hair if(facial_hair_style) - S = facial_hair_styles_list[facial_hair_style] + S = GLOB.facial_hair_styles_list[facial_hair_style] if(S) var/image/img_facial = image("icon" = S.icon, "icon_state" = "[S.icon_state]", "layer" = -HAIR_LAYER, "dir"=SOUTH) img_facial.color = "#" + facial_hair_color @@ -143,7 +143,7 @@ standing += image("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained", "layer" = -HAIR_LAYER, "dir"=SOUTH) else if(hair_style) - S = hair_styles_list[hair_style] + S = GLOB.hair_styles_list[hair_style] if(S) var/image/img_hair = image("icon" = S.icon, "icon_state" = "[S.icon_state]", "layer" = -HAIR_LAYER, "dir"=SOUTH) img_hair.color = "#" + hair_color diff --git a/code/modules/surgery/bodyparts/robot_bodyparts.dm b/code/modules/surgery/bodyparts/robot_bodyparts.dm index 19cb14d3c1..d9b51a19a5 100644 --- a/code/modules/surgery/bodyparts/robot_bodyparts.dm +++ b/code/modules/surgery/bodyparts/robot_bodyparts.dm @@ -1,3 +1,5 @@ + + /obj/item/bodypart/l_arm/robot name = "cyborg left arm" desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case." @@ -186,4 +188,4 @@ desc = "A skeletal, robotic limb. Outdated and fragile, but it's still better than nothing." icon = 'icons/mob/surplus_augments.dmi' icon_state = "surplus_r_leg" - max_damage = 20 \ No newline at end of file + max_damage = 20 diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm index b69a2f1141..312bd04c76 100644 --- a/code/modules/surgery/helpers.dm +++ b/code/modules/surgery/helpers.dm @@ -20,7 +20,7 @@ current_surgery = S if(!current_surgery) - var/list/all_surgeries = surgeries_list.Copy() + var/list/all_surgeries = GLOB.surgeries_list.Copy() var/list/available_surgeries = list() for(var/datum/surgery/S in all_surgeries) @@ -31,6 +31,8 @@ continue if(S.requires_organic_bodypart && affecting.status == BODYPART_ROBOTIC) continue + if(S.requires_real_bodypart && affecting.is_pseudopart) + continue else if(C && S.requires_bodypart) //mob with no limb in surgery zone when we need a limb continue if(!S.can_start(user, M)) diff --git a/code/modules/surgery/limb_augmentation.dm b/code/modules/surgery/limb_augmentation.dm index e6ddbc5ba3..e25c06cffb 100644 --- a/code/modules/surgery/limb_augmentation.dm +++ b/code/modules/surgery/limb_augmentation.dm @@ -1,3 +1,4 @@ + /////AUGMENTATION SURGERIES////// @@ -42,6 +43,7 @@ steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/replace, /datum/surgery_step/saw, /datum/surgery_step/add_limb) species = list(/mob/living/carbon/human) possible_locs = list("r_arm","l_arm","r_leg","l_leg","chest","head") + requires_real_bodypart = TRUE //SURGERY STEP SUCCESSES @@ -58,4 +60,4 @@ add_logs(user, target, "augmented", addition="by giving him new [parse_zone(target_zone)] INTENT: [uppertext(user.a_intent)]") else to_chat(user, "[target] has no organic [parse_zone(target_zone)] there!") - return 1 \ No newline at end of file + return 1 diff --git a/code/modules/surgery/organ_manipulation.dm b/code/modules/surgery/organ_manipulation.dm index f9f532ec7c..1808a45b08 100644 --- a/code/modules/surgery/organ_manipulation.dm +++ b/code/modules/surgery/organ_manipulation.dm @@ -4,7 +4,8 @@ /datum/surgery_step/incise, /datum/surgery_step/manipulate_organs) species = list(/mob/living/carbon/human, /mob/living/carbon/monkey) possible_locs = list("chest", "head") - requires_organic_bodypart = 0 + requires_organic_bodypart = FALSE + requires_real_bodypart = TRUE /datum/surgery/organ_manipulation/soft possible_locs = list("groin", "eyes", "mouth", "l_arm", "r_arm") diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm index 7ca10c5c5e..75014626be 100644 --- a/code/modules/surgery/organs/augments_eyes.dm +++ b/code/modules/surgery/organs/augments_eyes.dm @@ -17,13 +17,13 @@ /obj/item/organ/cyberimp/eyes/hud/Insert(var/mob/living/carbon/M, var/special = 0) ..() if(HUD_type) - var/datum/atom_hud/H = huds[HUD_type] + var/datum/atom_hud/H = GLOB.huds[HUD_type] H.add_hud_to(M) M.permanent_huds |= H /obj/item/organ/cyberimp/eyes/hud/Remove(var/mob/living/carbon/M, var/special = 0) if(HUD_type) - var/datum/atom_hud/H = huds[HUD_type] + var/datum/atom_hud/H = GLOB.huds[HUD_type] M.permanent_huds ^= H H.remove_hud_from(M) ..() diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index 384a0f311c..85a98b09e6 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -117,6 +117,7 @@ return crit_fail = TRUE addtimer(CALLBACK(src, .proc/reboot), 90 / severity) + ..() /obj/item/organ/cyberimp/brain/anti_stun/proc/reboot() crit_fail = FALSE @@ -144,28 +145,19 @@ //BOX O' IMPLANTS /obj/item/weapon/storage/box/cyber_implants - name = "boxed cybernetic implant" + name = "boxed cybernetic implants" desc = "A sleek, sturdy box." icon_state = "cyber_implants" - -/obj/item/weapon/storage/box/cyber_implants/New(loc, implant) - ..() - new /obj/item/device/autoimplanter(src) - if(ispath(implant)) - new implant(src) - -/obj/item/weapon/storage/box/cyber_implants/bundle - name = "boxed cybernetic implants" var/list/boxed = list( - /obj/item/organ/eyes/robotic/xray, - /obj/item/organ/eyes/robotic/thermals, - /obj/item/organ/cyberimp/brain/anti_stun, - /obj/item/organ/cyberimp/chest/reviver) + /obj/item/device/autosurgeon/thermal_eyes, + /obj/item/device/autosurgeon/xray_eyes, + /obj/item/device/autosurgeon/anti_stun, + /obj/item/device/autosurgeon/reviver) var/amount = 5 /obj/item/weapon/storage/box/cyber_implants/bundle/New() ..() var/implant - while(contents.len <= amount + 1) // +1 for the autoimplanter. + while(contents.len <= amount) implant = pick(boxed) new implant(src) diff --git a/code/modules/surgery/organs/autosurgeon.dm b/code/modules/surgery/organs/autosurgeon.dm new file mode 100644 index 0000000000..981e6000c3 --- /dev/null +++ b/code/modules/surgery/organs/autosurgeon.dm @@ -0,0 +1,84 @@ +#define INFINITE -1 + +/obj/item/device/autosurgeon + name = "autosurgeon" + desc = "A device that automatically inserts an implant or organ into the user without the hassle of extensive surgery. It has a slot to insert implants/organs and a screwdriver slot for removing accidentally added items." + icon_state = "autoimplanter" + item_state = "walkietalkie"//left as this so as to intentionally not have inhands + w_class = WEIGHT_CLASS_SMALL + var/obj/item/organ/storedorgan + var/organ_type = /obj/item/organ + var/uses = INFINITE + var/starting_organ + +/obj/item/device/autosurgeon/Initialize(mapload) + ..() + if(starting_organ) + insert_organ(new starting_organ(src)) + +/obj/item/device/autosurgeon/proc/insert_organ(var/obj/item/I) + storedorgan = I + I.forceMove(src) + name = "[initial(name)] ([storedorgan.name])" + +/obj/item/device/autosurgeon/attack_self(mob/user)//when the object it used... + if(!uses) + to_chat(user, "[src] has already been used. The tools are dull and won't reactivate.") + return + else if(!storedorgan) + to_chat(user, "[src] currently has no implant stored.") + return + storedorgan.Insert(user)//insert stored organ into the user + user.visible_message("[user] presses a button on [src], and you hear a short mechanical noise.", "You feel a sharp sting as [src] plunges into your body.") + playsound(get_turf(user), 'sound/weapons/circsawhit.ogg', 50, 1) + storedorgan = null + name = initial(name) + if(uses != INFINITE) + uses-- + if(!uses) + desc = "[initial(desc)] Looks like it's been used up." + +/obj/item/device/autosurgeon/attackby(obj/item/I, mob/user, params) + if(istype(I, organ_type)) + if(storedorgan) + to_chat(user, "[src] already has an implant stored.") + return + else if(!uses) + to_chat(user, "[src] has already been used up.") + return + if(!user.drop_item()) + return + I.forceMove(src) + storedorgan = I + to_chat(user, "You insert the [I] into [src].") + else if(istype(I, /obj/item/weapon/screwdriver)) + if(!storedorgan) + to_chat(user, "There's no implant in [src] for you to remove.") + else + var/turf/open/floorloc = get_turf(user) + floorloc.contents += contents + to_chat(user, "You remove the [storedorgan] from [src].") + playsound(get_turf(user), I.usesound, 50, 1) + storedorgan = null + if(uses != INFINITE) + uses-- + if(!uses) + desc = "[initial(desc)] Looks like it's been used up." + +/obj/item/device/autosurgeon/cmo + desc = "A single use autosurgeon that contains a medical heads-up display augment. A screwdriver can be used to remove it, but implants can't be placed back in." + uses = 1 + starting_organ = /obj/item/organ/cyberimp/eyes/hud/medical + + +/obj/item/device/autosurgeon/thermal_eyes + starting_organ = /obj/item/organ/eyes/robotic/thermals + +/obj/item/device/autosurgeon/xray_eyes + starting_organ = /obj/item/organ/eyes/robotic/xray + +/obj/item/device/autosurgeon/anti_stun + starting_organ = /obj/item/organ/cyberimp/brain/anti_stun + +/obj/item/device/autosurgeon/reviver + starting_organ = /obj/item/organ/cyberimp/chest/reviver diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 4473bcaec8..227e72c91c 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -12,13 +12,17 @@ var/vital = 0 -/obj/item/organ/proc/Insert(mob/living/carbon/M, special = 0) +/obj/item/organ/proc/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE) if(!iscarbon(M) || owner == M) return var/obj/item/organ/replaced = M.getorganslot(slot) if(replaced) replaced.Remove(M, special = 1) + if(drop_if_replaced) + replaced.forceMove(get_turf(src)) + else + qdel(replaced) owner = M M.internal_organs |= src @@ -62,7 +66,6 @@ S.icon_state = icon_state S.origin_tech = origin_tech S.w_class = w_class - S.color = color return S @@ -227,7 +230,7 @@ colour = "red" #define HUMAN_MAX_OXYLOSS 3 -#define HUMAN_CRIT_MAX_OXYLOSS (SSmob.wait/30) +#define HUMAN_CRIT_MAX_OXYLOSS (SSmobs.wait/30) #define HEAT_GAS_DAMAGE_LEVEL_1 2 #define HEAT_GAS_DAMAGE_LEVEL_2 4 #define HEAT_GAS_DAMAGE_LEVEL_3 8 @@ -454,7 +457,7 @@ if(H && H.dna && H.dna.species && H.dna.species.species_traits) species_traits = H.dna.species.species_traits - if(!(mutations_list[COLDRES] in H.dna.mutations) && !(RESISTCOLD in species_traits)) // COLD DAMAGE + if(!(GLOB.mutations_list[COLDRES] in H.dna.mutations) && !(RESISTCOLD in species_traits)) // COLD DAMAGE switch(breath.temperature) if(-INFINITY to 120) H.apply_damage(COLD_GAS_DAMAGE_LEVEL_3, BURN, "head") @@ -509,9 +512,18 @@ zone = "mouth" slot = "tongue" attack_verb = list("licked", "slobbered", "slapped", "frenched", "tongued") + var/list/languages_possible var/say_mod = null var/taste_sensitivity = 15 // lower is more sensitive. +/obj/item/organ/tongue/Initialize(mapload) + ..() + languages_possible = typecacheof(list( + /datum/language/common, + /datum/language/monkey, + /datum/language/ratvar + )) + /obj/item/organ/tongue/get_spans() return list() @@ -528,6 +540,9 @@ if(say_mod && M.dna && M.dna.species) M.dna.species.say_mod = initial(M.dna.species.say_mod) +/obj/item/organ/tongue/can_speak_in_language(datum/language/dt) + . = is_type_in_typecache(dt, languages_possible) + /obj/item/organ/tongue/lizard name = "forked tongue" desc = "A thin and long muscle typically found in reptilian races, apparently moonlights as a nose." @@ -569,7 +584,7 @@ //Hacks var/mob/living/carbon/human/user = usr var/rendered = "[user.name]: [message]" - for(var/mob/living/carbon/human/H in living_mob_list) + for(var/mob/living/carbon/human/H in GLOB.living_mob_list) var/obj/item/organ/tongue/T = H.getorganslot("tongue") if(!T || T.type != type) continue @@ -579,7 +594,7 @@ if(Ayy.team != Byy.team) continue to_chat(H, rendered) - for(var/mob/M in dead_mob_list) + for(var/mob/M in GLOB.dead_mob_list) var/link = FOLLOW_LINK(M, user) to_chat(M, "[link] [rendered]") return "" @@ -614,6 +629,14 @@ say_mod = "hisses" taste_sensitivity = 10 // LIZARDS ARE ALIENS CONFIRMED +/obj/item/organ/tongue/alien/Initialize(mapload) + ..() + languages_possible = typecacheof(list( + /datum/language/xenocommon, + /datum/language/common, + /datum/language/ratvar, + /datum/language/monkey)) + /obj/item/organ/tongue/alien/TongueSpeech(var/message) playsound(owner, "hiss", 25, 1, 1) return message @@ -652,10 +675,6 @@ if("papyrus") . |= SPAN_PAPYRUS -/obj/item/organ/tongue/bone/chatter - name = "chattering bone \"tongue\"" - chattering = TRUE - /obj/item/organ/tongue/robot name = "robotic voicebox" desc = "A voice synthesizer that can interface with organic lifeforms." @@ -665,6 +684,17 @@ attack_verb = list("beeped", "booped") taste_sensitivity = 25 // not as good as an organic tongue +/obj/item/organ/tongue/robot/Initialize(mapload) + ..() + languages_possible = typecacheof(list( + /datum/language/xenocommon, + /datum/language/common, + /datum/language/ratvar, + /datum/language/monkey, + /datum/language/drone, + /datum/language/machine, + /datum/language/swarmer)) + /obj/item/organ/tongue/robot/get_spans() return ..() | SPAN_ROBOT @@ -754,6 +784,7 @@ var/old_eye_color = "fff" var/flash_protect = 0 var/see_invisible = SEE_INVISIBLE_LIVING + var/lighting_alpha /obj/item/organ/eyes/Insert(mob/living/carbon/M, special = 0) ..() @@ -781,26 +812,27 @@ name = "shadow eyes" desc = "A spooky set of eyes that can see in the dark." see_in_dark = 8 - see_invisible = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE actions_types = list(/datum/action/item_action/organ_action/use) var/night_vision = TRUE /obj/item/organ/eyes/night_vision/ui_action_click() - if(night_vision) - see_in_dark = 4 - see_invisible = SEE_INVISIBLE_LIVING - night_vision = FALSE - else - see_in_dark = 8 - see_invisible = SEE_INVISIBLE_MINIMUM - night_vision = TRUE + switch(lighting_alpha) + if (LIGHTING_PLANE_ALPHA_VISIBLE) + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE + if (LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE) + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + if (LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE) + lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE + else + lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE owner.update_sight() /obj/item/organ/eyes/night_vision/alien name = "alien eyes" desc = "It turned out they had them after all!" see_in_dark = 8 - see_invisible = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE sight_flags = SEE_MOBS @@ -834,7 +866,7 @@ eye_color = "FC0" origin_tech = "materials=5;programming=4;biotech=4;magnets=4;syndicate=1" sight_flags = SEE_MOBS - see_invisible = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE flash_protect = -1 see_in_dark = 8 diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index 6c2e8a4ad6..e844918eeb 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -1,48 +1,3 @@ -var/static/regex/stun_words = regex("stop|wait|stand still|hold on|halt") -var/static/regex/weaken_words = regex("drop|fall|trip|weaken") -var/static/regex/sleep_words = regex("sleep|slumber") -var/static/regex/vomit_words = regex("vomit|throw up") -var/static/regex/silence_words = regex("shut up|silence|ssh|quiet|hush") -var/static/regex/hallucinate_words = regex("see the truth|hallucinate") -var/static/regex/wakeup_words = regex("wake up|awaken") -var/static/regex/heal_words = regex("live|heal|survive|mend|heroes never die") -var/static/regex/hurt_words = regex("die|suffer|hurt|pain") -var/static/regex/bleed_words = regex("bleed|there will be blood") -var/static/regex/burn_words = regex("burn|ignite") -var/static/regex/hot_words = regex("heat|hot|hell") -var/static/regex/cold_words = regex("cold|cool down|chill|freeze") -var/static/regex/repulse_words = regex("shoo|go away|leave me alone|begone|flee|fus ro dah|get away|repulse") -var/static/regex/attract_words = regex("come here|come to me|get over here|attract") -var/static/regex/whoareyou_words = regex("who are you|say your name|state your name|identify") -var/static/regex/saymyname_words = regex("say my name|who am i|whoami") -var/static/regex/knockknock_words = regex("knock knock") -var/static/regex/statelaws_words = regex("state laws|state your laws") -var/static/regex/move_words = regex("move|walk") -var/static/regex/left_words = regex("left|west|port") -var/static/regex/right_words = regex("right|east|starboard") -var/static/regex/up_words = regex("up|north|fore") -var/static/regex/down_words = regex("down|south|aft") -var/static/regex/walk_words = regex("slow down") -var/static/regex/run_words = regex("run") -var/static/regex/helpintent_words = regex("help|hug") -var/static/regex/disarmintent_words = regex("disarm") -var/static/regex/grabintent_words = regex("grab") -var/static/regex/harmintent_words = regex("harm|fight|punch") -var/static/regex/throwmode_words = regex("throw|catch") -var/static/regex/flip_words = regex("flip|rotate|revolve|roll|somersault") -var/static/regex/speak_words = regex("speak|say something") -var/static/regex/rest_words = regex("rest") -var/static/regex/getup_words = regex("get up") -var/static/regex/sit_words = regex("sit") -var/static/regex/stand_words = regex("stand") -var/static/regex/dance_words = regex("dance") -var/static/regex/jump_words = regex("jump") -var/static/regex/salute_words = regex("salute") -var/static/regex/deathgasp_words = regex("play dead") -var/static/regex/clap_words = regex("clap|applaud") -var/static/regex/honk_words = regex("ho+nk") //hooooooonk -var/static/regex/multispin_words = regex("like a record baby|right round") - #define COOLDOWN_STUN 1200 #define COOLDOWN_DAMAGE 600 #define COOLDOWN_MEME 300 @@ -170,7 +125,7 @@ var/static/regex/multispin_words = regex("like a record baby|right round") if(user.mind.assigned_role == "Chaplain") power_multiplier *= 2 //Command staff has authority - if(user.mind.assigned_role in command_positions) + if(user.mind.assigned_role in GLOB.command_positions) power_multiplier *= 1.4 //Why are you speaking if(user.mind.assigned_role == "Mime") @@ -218,6 +173,51 @@ var/static/regex/multispin_words = regex("like a record baby|right round") power_multiplier *= (1 + (1/specific_listeners.len)) //2x on a single guy, 1.5x on two and so on message = copytext(message, 0, 1)+copytext(message, 1 + length(found_string), length(message) + 1) + var/static/regex/stun_words = regex("stop|wait|stand still|hold on|halt") + var/static/regex/weaken_words = regex("drop|fall|trip|weaken") + var/static/regex/sleep_words = regex("sleep|slumber") + var/static/regex/vomit_words = regex("vomit|throw up") + var/static/regex/silence_words = regex("shut up|silence|ssh|quiet|hush") + var/static/regex/hallucinate_words = regex("see the truth|hallucinate") + var/static/regex/wakeup_words = regex("wake up|awaken") + var/static/regex/heal_words = regex("live|heal|survive|mend|heroes never die") + var/static/regex/hurt_words = regex("die|suffer|hurt|pain") + var/static/regex/bleed_words = regex("bleed|there will be blood") + var/static/regex/burn_words = regex("burn|ignite") + var/static/regex/hot_words = regex("heat|hot|hell") + var/static/regex/cold_words = regex("cold|cool down|chill|freeze") + var/static/regex/repulse_words = regex("shoo|go away|leave me alone|begone|flee|fus ro dah|get away|repulse") + var/static/regex/attract_words = regex("come here|come to me|get over here|attract") + var/static/regex/whoareyou_words = regex("who are you|say your name|state your name|identify") + var/static/regex/saymyname_words = regex("say my name|who am i|whoami") + var/static/regex/knockknock_words = regex("knock knock") + var/static/regex/statelaws_words = regex("state laws|state your laws") + var/static/regex/move_words = regex("move|walk") + var/static/regex/left_words = regex("left|west|port") + var/static/regex/right_words = regex("right|east|starboard") + var/static/regex/up_words = regex("up|north|fore") + var/static/regex/down_words = regex("down|south|aft") + var/static/regex/walk_words = regex("slow down") + var/static/regex/run_words = regex("run") + var/static/regex/helpintent_words = regex("help|hug") + var/static/regex/disarmintent_words = regex("disarm") + var/static/regex/grabintent_words = regex("grab") + var/static/regex/harmintent_words = regex("harm|fight|punch") + var/static/regex/throwmode_words = regex("throw|catch") + var/static/regex/flip_words = regex("flip|rotate|revolve|roll|somersault") + var/static/regex/speak_words = regex("speak|say something") + var/static/regex/rest_words = regex("rest") + var/static/regex/getup_words = regex("get up") + var/static/regex/sit_words = regex("sit") + var/static/regex/stand_words = regex("stand") + var/static/regex/dance_words = regex("dance") + var/static/regex/jump_words = regex("jump") + var/static/regex/salute_words = regex("salute") + var/static/regex/deathgasp_words = regex("play dead") + var/static/regex/clap_words = regex("clap|applaud") + var/static/regex/honk_words = regex("ho+nk") //hooooooonk + var/static/regex/multispin_words = regex("like a record baby|right round") + //STUN if(findtext(message, stun_words)) cooldown = COOLDOWN_STUN @@ -371,7 +371,7 @@ var/static/regex/multispin_words = regex("like a record baby|right round") for(var/i=1, i<=(5*power_multiplier), i++) for(var/V in listeners) var/mob/living/L = V - step(L, direction ? direction : pick(cardinal)) + step(L, direction ? direction : pick(GLOB.cardinal)) sleep(10) //WALK diff --git a/code/modules/surgery/prosthetic_replacement.dm b/code/modules/surgery/prosthetic_replacement.dm index 9d56acde18..b054626f4e 100644 --- a/code/modules/surgery/prosthetic_replacement.dm +++ b/code/modules/surgery/prosthetic_replacement.dm @@ -59,6 +59,8 @@ return 1 else target.regenerate_limb(target_zone) + var/obj/item/bodypart/L = target.get_bodypart(target_zone) + L.is_pseudopart = TRUE user.visible_message("[user] finishes attaching [tool]!", "You attach [tool].") qdel(tool) if(istype(tool, /obj/item/weapon/twohanded/required/chainsaw)) diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index 3ff54cabde..f9a3b5c0cf 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -13,7 +13,7 @@ var/obj/item/bodypart/operated_bodypart //Operable body part var/requires_bodypart = TRUE //Surgery available only when a bodypart is present, or only when it is missing. var/success_multiplier = 0 //Step success propability multiplier - + var/requires_real_bodypart = 0 //Some surgeries don't work on limbs that don't really exist /datum/surgery/New(surgery_target, surgery_location, surgery_bodypart) ..() @@ -54,7 +54,7 @@ return new step_type /datum/surgery/proc/complete() - feedback_add_details("surgeries_completed", type) + feedback_add_details("surgeries_completed", "[type]") qdel(src) @@ -94,4 +94,4 @@ //RESOLVED ISSUES //"Todo" jobs that have been completed //combine hands/feet into the arms - Hands/feet were removed - RR -//surgeries (not steps) that can be initiated on any body part (corresponding with damage locations) - Call this one done, see possible_locs var - c0 \ No newline at end of file +//surgeries (not steps) that can be initiated on any body part (corresponding with damage locations) - Call this one done, see possible_locs var - c0 diff --git a/code/modules/tgui/external.dm b/code/modules/tgui/external.dm index d3d5c1a703..4c6102cc37 100644 --- a/code/modules/tgui/external.dm +++ b/code/modules/tgui/external.dm @@ -17,7 +17,7 @@ * optional master_ui datum/tgui The parent UI. * optional state datum/ui_state The state used to determine status. **/ -/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) +/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 = GLOB.default_state) return -1 // Not implemented. /** diff --git a/code/modules/tgui/states/admin.dm b/code/modules/tgui/states/admin.dm index 62e18bb6b9..945a864430 100644 --- a/code/modules/tgui/states/admin.dm +++ b/code/modules/tgui/states/admin.dm @@ -4,7 +4,7 @@ * Checks that the user is an admin, end-of-story. **/ -/var/global/datum/ui_state/admin_state/admin_state = new() +GLOBAL_DATUM_INIT(admin_state, /datum/ui_state/admin_state, new) /datum/ui_state/admin_state/can_use_topic(src_object, mob/user) if(check_rights_for(user.client, R_ADMIN)) diff --git a/code/modules/tgui/states/always.dm b/code/modules/tgui/states/always.dm index e039abd307..b6c689d5d8 100644 --- a/code/modules/tgui/states/always.dm +++ b/code/modules/tgui/states/always.dm @@ -5,7 +5,7 @@ * Always grants the user UI_INTERACTIVE. Period. **/ -/var/global/datum/ui_state/always_state/always_state = new() +GLOBAL_DATUM_INIT(always_state, /datum/ui_state/always_state, new) /datum/ui_state/always_state/can_use_topic(src_object, mob/user) return UI_INTERACTIVE diff --git a/code/modules/tgui/states/conscious.dm b/code/modules/tgui/states/conscious.dm index 9a5c1a5e54..4323c1391c 100644 --- a/code/modules/tgui/states/conscious.dm +++ b/code/modules/tgui/states/conscious.dm @@ -4,7 +4,7 @@ * Only checks if the user is conscious. **/ -/var/global/datum/ui_state/conscious_state/conscious_state = new() +GLOBAL_DATUM_INIT(conscious_state, /datum/ui_state/conscious_state, new) /datum/ui_state/conscious_state/can_use_topic(src_object, mob/user) if(user.stat == CONSCIOUS) diff --git a/code/modules/tgui/states/contained.dm b/code/modules/tgui/states/contained.dm index 6cb88abea2..7387f7e6cb 100644 --- a/code/modules/tgui/states/contained.dm +++ b/code/modules/tgui/states/contained.dm @@ -4,7 +4,7 @@ * Checks that the user is inside the src_object. **/ -/var/global/datum/ui_state/contained_state/contained_state = new() +GLOBAL_DATUM_INIT(contained_state, /datum/ui_state/contained_state, new) /datum/ui_state/contained_state/can_use_topic(atom/src_object, mob/user) if(!src_object.contains(user)) diff --git a/code/modules/tgui/states/deep_inventory.dm b/code/modules/tgui/states/deep_inventory.dm index 70f2a59992..06bdb92f3a 100644 --- a/code/modules/tgui/states/deep_inventory.dm +++ b/code/modules/tgui/states/deep_inventory.dm @@ -4,7 +4,7 @@ * 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() +GLOBAL_DATUM_INIT(deep_inventory_state, /datum/ui_state/deep_inventory_state, new) /datum/ui_state/deep_inventory_state/can_use_topic(src_object, mob/user) if(!user.contains(src_object)) diff --git a/code/modules/tgui/states/default.dm b/code/modules/tgui/states/default.dm index 38c3f4d196..573dcdf7cf 100644 --- a/code/modules/tgui/states/default.dm +++ b/code/modules/tgui/states/default.dm @@ -4,7 +4,7 @@ * Checks a number of things -- mostly physical distance for humans and view for robots. **/ -/var/global/datum/ui_state/default/default_state = new() +GLOBAL_DATUM_INIT(default_state, /datum/ui_state/default, new) /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. @@ -43,7 +43,7 @@ return // The AI can interact with anything it can see nearby, or with cameras. - if((get_dist(src, src_object) <= client.view) || cameranet.checkTurfVis(get_turf_pixel(src_object))) + if((get_dist(src, src_object) <= client.view) || GLOB.cameranet.checkTurfVis(get_turf_pixel(src_object))) return UI_INTERACTIVE return UI_CLOSE diff --git a/code/modules/tgui/states/hands.dm b/code/modules/tgui/states/hands.dm index a312bcecdd..5da0e5d500 100644 --- a/code/modules/tgui/states/hands.dm +++ b/code/modules/tgui/states/hands.dm @@ -4,7 +4,7 @@ * Checks that the src_object is in the user's hands. **/ -/var/global/datum/ui_state/hands_state/hands_state = new() +GLOBAL_DATUM_INIT(hands_state, /datum/ui_state/hands_state, new) /datum/ui_state/hands_state/can_use_topic(src_object, mob/user) . = user.shared_ui_interaction(src_object) diff --git a/code/modules/tgui/states/human_adjacent.dm b/code/modules/tgui/states/human_adjacent.dm index feedd45702..0ab20b36ff 100644 --- a/code/modules/tgui/states/human_adjacent.dm +++ b/code/modules/tgui/states/human_adjacent.dm @@ -6,7 +6,7 @@ * human adjacent user. **/ -/var/global/datum/ui_state/human_adjacent_state/human_adjacent_state = new() +GLOBAL_DATUM_INIT(human_adjacent_state, /datum/ui_state/human_adjacent_state, new) /datum/ui_state/human_adjacent_state/can_use_topic(src_object, mob/user) . = user.default_can_use_topic(src_object) diff --git a/code/modules/tgui/states/inventory.dm b/code/modules/tgui/states/inventory.dm index 0287029633..b8b1ad3b6a 100644 --- a/code/modules/tgui/states/inventory.dm +++ b/code/modules/tgui/states/inventory.dm @@ -4,7 +4,7 @@ * Checks that the src_object is in the user's top-level (hand, ear, pocket, belt, etc) inventory. **/ -/var/global/datum/ui_state/inventory_state/inventory_state = new() +GLOBAL_DATUM_INIT(inventory_state, /datum/ui_state/inventory_state, new) /datum/ui_state/inventory_state/can_use_topic(src_object, mob/user) if(!(src_object in user)) diff --git a/code/modules/tgui/states/language_menu.dm b/code/modules/tgui/states/language_menu.dm new file mode 100644 index 0000000000..4a370e8213 --- /dev/null +++ b/code/modules/tgui/states/language_menu.dm @@ -0,0 +1,14 @@ + /** + * tgui state: language_menu_state + */ + +GLOBAL_DATUM_INIT(language_menu_state, /datum/ui_state/language_menu, new) + +/datum/ui_state/language_menu/can_use_topic(src_object, mob/user) + . = UI_CLOSE + if(check_rights_for(user.client, R_ADMIN)) + . = UI_INTERACTIVE + else if(istype(src_object, /datum/language_menu)) + var/datum/language_menu/LM = src_object + if(LM.owner == user) + . = UI_INTERACTIVE diff --git a/code/modules/tgui/states/not_incapacitated.dm b/code/modules/tgui/states/not_incapacitated.dm index f7e793d1ca..12fe266bc5 100644 --- a/code/modules/tgui/states/not_incapacitated.dm +++ b/code/modules/tgui/states/not_incapacitated.dm @@ -4,7 +4,7 @@ * Checks that the user isn't incapacitated **/ -/var/global/datum/ui_state/not_incapacitated_state/not_incapacitated_state = new() +GLOBAL_DATUM_INIT(not_incapacitated_state, /datum/ui_state/not_incapacitated_state, new) /** * tgui state: not_incapacitated_turf_state @@ -12,7 +12,7 @@ * Checks that the user isn't incapacitated and that their loc is a turf **/ -/var/global/datum/ui_state/not_incapacitated_state/not_incapacitated_turf_state = new(no_turfs = TRUE) +GLOBAL_DATUM_INIT(not_incapacitated_turf_state, /datum/ui_state/not_incapacitated_state, new(no_turfs = TRUE)) /datum/ui_state/not_incapacitated_state var/turf_check = FALSE diff --git a/code/modules/tgui/states/notcontained.dm b/code/modules/tgui/states/notcontained.dm index 0b6462fe33..77a7fe01b0 100644 --- a/code/modules/tgui/states/notcontained.dm +++ b/code/modules/tgui/states/notcontained.dm @@ -4,7 +4,7 @@ * Checks that the user is not inside src_object, and then makes the default checks. **/ -/var/global/datum/ui_state/notcontained_state/notcontained_state = new() +GLOBAL_DATUM_INIT(notcontained_state, /datum/ui_state/notcontained_state, new) /datum/ui_state/notcontained_state/can_use_topic(atom/src_object, mob/user) . = user.shared_ui_interaction(src_object) diff --git a/code/modules/tgui/states/observer.dm b/code/modules/tgui/states/observer.dm index 98fa40509a..ade0ce66bb 100644 --- a/code/modules/tgui/states/observer.dm +++ b/code/modules/tgui/states/observer.dm @@ -4,7 +4,7 @@ * Checks that the user is an observer/ghost. **/ -/var/global/datum/ui_state/observer_state/observer_state = new() +GLOBAL_DATUM_INIT(observer_state, /datum/ui_state/observer_state, new) /datum/ui_state/observer_state/can_use_topic(src_object, mob/user) if(isobserver(user)) diff --git a/code/modules/tgui/states/physical.dm b/code/modules/tgui/states/physical.dm index a967f25916..a4cea7c7c2 100644 --- a/code/modules/tgui/states/physical.dm +++ b/code/modules/tgui/states/physical.dm @@ -4,7 +4,7 @@ * Short-circuits the default state to only check physical distance. **/ -/var/global/datum/ui_state/physical/physical_state = new() +GLOBAL_DATUM_INIT(physical_state, /datum/ui_state/physical, new) /datum/ui_state/physical/can_use_topic(src_object, mob/user) . = user.shared_ui_interaction(src_object) diff --git a/code/modules/tgui/states/self.dm b/code/modules/tgui/states/self.dm index b08fe373c6..10849772c6 100644 --- a/code/modules/tgui/states/self.dm +++ b/code/modules/tgui/states/self.dm @@ -4,7 +4,7 @@ * Only checks that the user and src_object are the same. **/ -/var/global/datum/ui_state/self_state/self_state = new() +GLOBAL_DATUM_INIT(self_state, /datum/ui_state/self_state, new) /datum/ui_state/self_state/can_use_topic(src_object, mob/user) if(src_object != user) diff --git a/code/modules/tgui/states/zlevel.dm b/code/modules/tgui/states/zlevel.dm index a7842383a6..6ccfd0fe7d 100644 --- a/code/modules/tgui/states/zlevel.dm +++ b/code/modules/tgui/states/zlevel.dm @@ -4,7 +4,7 @@ * Only checks that the Z-level of the user and src_object are the same. **/ -/var/global/datum/ui_state/z_state/z_state = new() +GLOBAL_DATUM_INIT(z_state, /datum/ui_state/z_state, new) /datum/ui_state/z_state/can_use_topic(src_object, mob/user) var/turf/turf_obj = get_turf(src_object) diff --git a/code/modules/tgui/tgui.dm b/code/modules/tgui/tgui.dm index 69349d2549..22d7e73a9b 100644 --- a/code/modules/tgui/tgui.dm +++ b/code/modules/tgui/tgui.dm @@ -53,7 +53,7 @@ * * return datum/tgui The requested UI. **/ -/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, browser_id = null) +/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 = GLOB.default_state, browser_id = null) src.user = user src.src_object = src_object src.ui_key = ui_key diff --git a/code/modules/uplink/uplink.dm b/code/modules/uplink/uplink.dm index 90b654e4ad..8a72bd0566 100644 --- a/code/modules/uplink/uplink.dm +++ b/code/modules/uplink/uplink.dm @@ -1,4 +1,4 @@ -var/global/list/uplinks = list() +GLOBAL_LIST_EMPTY(uplinks) /** * Uplinks @@ -22,7 +22,7 @@ var/global/list/uplinks = list() /obj/item/device/uplink/New() ..() - uplinks += src + GLOB.uplinks += src uplink_items = get_uplink_items(gamemode) /obj/item/device/uplink/proc/set_gamemode(gamemode) @@ -30,7 +30,7 @@ var/global/list/uplinks = list() uplink_items = get_uplink_items(gamemode) /obj/item/device/uplink/Destroy() - uplinks -= src + GLOB.uplinks -= src return ..() /obj/item/device/uplink/attackby(obj/item/I, mob/user, params) @@ -60,7 +60,7 @@ var/global/list/uplinks = list() ui_interact(user) /obj/item/device/uplink/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ - datum/tgui/master_ui = null, datum/ui_state/state = inventory_state) + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "uplink", name, 450, 750, master_ui, state) diff --git a/code/modules/uplink/uplink_item.dm b/code/modules/uplink/uplink_item.dm index ae884e6362..dd33cb0b1b 100644 --- a/code/modules/uplink/uplink_item.dm +++ b/code/modules/uplink/uplink_item.dm @@ -1,32 +1,38 @@ -var/list/uplink_items = list() // Global list so we only initialize this once. +GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. + +/proc/initialize_global_uplink_items() + GLOB.uplink_items = list() + for(var/item in subtypesof(/datum/uplink_item)) + var/datum/uplink_item/I = new item() + if(!I.item) + continue + if(!GLOB.uplink_items[I.category]) + GLOB.uplink_items[I.category] = list() + GLOB.uplink_items[I.category][I.name] = I /proc/get_uplink_items(var/datum/game_mode/gamemode = null) - if(!uplink_items.len) - for(var/item in subtypesof(/datum/uplink_item)) - var/datum/uplink_item/I = new item() - if(!I.item) - continue - if(!uplink_items[I.category]) - uplink_items[I.category] = list() - uplink_items[I.category][I.name] = I + if(!GLOB.uplink_items.len) + initialize_global_uplink_items() var/list/filtered_uplink_items = list() var/list/sale_items = list() - for(var/category in uplink_items) - for(var/item in uplink_items[category]) - var/datum/uplink_item/I = uplink_items[category][item] + for(var/category in GLOB.uplink_items) + for(var/item in GLOB.uplink_items[category]) + var/datum/uplink_item/I = GLOB.uplink_items[category][item] + if(!istype(I)) + continue if(I.include_modes.len) - if(!gamemode && ticker && !(ticker.mode.type in I.include_modes)) + if(!gamemode && SSticker && !(SSticker.mode.type in I.include_modes)) continue if(gamemode && !(gamemode in I.include_modes)) continue if(I.exclude_modes.len) - if(!gamemode && ticker && (ticker.mode.type in I.exclude_modes)) + if(!gamemode && SSticker && (SSticker.mode.type in I.exclude_modes)) continue if(gamemode && (gamemode in I.exclude_modes)) continue - if(I.player_minimum && I.player_minimum > joined_player_list.len) + if(I.player_minimum && I.player_minimum > GLOB.joined_player_list.len) continue if(!filtered_uplink_items[category]) @@ -117,6 +123,11 @@ var/list/uplink_items = list() // Global list so we only initialize this once. to_chat(H, "\The [A] materializes onto the floor.") return 1 +/datum/uplink_item/Destroy() + if(src in GLOB.uplink_items) + GLOB.uplink_items -= src //Take us out instead of leaving a null! + return ..() + //Discounts (dynamically filled above) /datum/uplink_item/discounts category = "Discounted Gear" @@ -822,17 +833,6 @@ var/list/uplink_items = list() // Global list so we only initialize this once. cost = 1 surplus = 1 -/datum/uplink_item/stealthy_tools/syndi_borer - name = "Syndicate Brain Slug" - desc = "A small cortical borer, modified to be completely loyal to the owner. \ - Genetically infertile, these brain slugs can assist medically in a support role, or take direct action \ - to assist their host." - item = /obj/item/weapon/antag_spawner/syndi_borer - refundable = TRUE - cost = 10 - surplus = 20 //Let's not have this be too common - exclude_modes = list(/datum/game_mode/nuclear) - //Space Suits and Hardsuits /datum/uplink_item/suits category = "Space Suits and Hardsuits" @@ -1092,10 +1092,10 @@ var/list/uplink_items = list() // Global list so we only initialize this once. cost = 20 /datum/uplink_item/device_tools/jammer - name = "Radio jammer" + name = "Radio Jammer" desc = "This device will disrupt any nearby outgoing radio communication when activated." item = /obj/item/device/jammer - cost = 10 + cost = 5 // Implants /datum/uplink_item/implants @@ -1157,40 +1157,40 @@ var/list/uplink_items = list() // Global list so we only initialize this once. /datum/uplink_item/cyber_implants/spawn_item(turf/loc, obj/item/device/uplink/U) if(item) - if(istype(item, /obj/item/organ/cyberimp)) + if(istype(item, /obj/item/organ)) return new /obj/item/weapon/storage/box/cyber_implants(loc, item) else return ..() /datum/uplink_item/cyber_implants/thermals - name = "Thermal eyes" - desc = "These cybernetic eyes will give you thermal vision. Comes with a free autoimplanter." - item = /obj/item/organ/eyes/robotic/thermals + name = "Thermal Eyes" + desc = "These cybernetic eyes will give you thermal vision. Comes with a free autosurgeon." + item = /obj/item/device/autosurgeon/thermal_eyes cost = 8 /datum/uplink_item/cyber_implants/xray name = "X-Ray Vision Implant" - desc = "These cybernetic eyes will give you X-ray vision. Comes with an autoimplanter." - item = /obj/item/organ/eyes/robotic/xray + desc = "These cybernetic eyes will give you X-ray vision. Comes with an autosurgeon." + item = /obj/item/device/autosurgeon/xray_eyes cost = 10 /datum/uplink_item/cyber_implants/antistun name = "CNS Rebooter Implant" - desc = "This implant will help you get back up on your feet faster after being stunned. Comes with an autoimplanter." - item = /obj/item/organ/cyberimp/brain/anti_stun + desc = "This implant will help you get back up on your feet faster after being stunned. Comes with an autosurgeon." + item = /obj/item/device/autosurgeon/anti_stun cost = 12 /datum/uplink_item/cyber_implants/reviver name = "Reviver Implant" - desc = "This implant will attempt to revive you if you lose consciousness. Comes with an autoimplanter." - item = /obj/item/organ/cyberimp/chest/reviver + desc = "This implant will attempt to revive you if you lose consciousness. Comes with an autosurgeon." + item = /obj/item/device/autosurgeon/reviver cost = 8 /datum/uplink_item/cyber_implants/bundle name = "Cybernetic Implants Bundle" - desc = "A random selection of cybernetic implants. Guaranteed 5 high quality implants. Comes with an autoimplanter." - item = /obj/item/weapon/storage/box/cyber_implants/bundle + desc = "A random selection of cybernetic implants. Guaranteed 5 high quality implants. Comes with an autosurgeon." + item = /obj/item/weapon/storage/box/cyber_implants cost = 40 cant_discount = TRUE @@ -1308,7 +1308,7 @@ var/list/uplink_items = list() // Global list so we only initialize this once. cant_discount = TRUE /datum/uplink_item/badass/surplus/spawn_item(turf/loc, obj/item/device/uplink/U) - var/list/uplink_items = get_uplink_items(ticker.mode) + var/list/uplink_items = get_uplink_items(SSticker.mode) var/crate_value = 50 var/obj/structure/closet/crate/C = new(loc) @@ -1336,7 +1336,7 @@ var/list/uplink_items = list() // Global list so we only initialize this once. cant_discount = TRUE /datum/uplink_item/badass/random/spawn_item(turf/loc, obj/item/device/uplink/U) - var/list/uplink_items = get_uplink_items(ticker.mode) + var/list/uplink_items = get_uplink_items(SSticker.mode) var/list/possible_items = list() for(var/category in uplink_items) for(var/item in uplink_items[category]) diff --git a/code/modules/uplink/uplink_item_cit.dm b/code/modules/uplink/uplink_item_cit.dm new file mode 100644 index 0000000000..c74ad3ba9c --- /dev/null +++ b/code/modules/uplink/uplink_item_cit.dm @@ -0,0 +1,10 @@ +/datum/uplink_item/stealthy_tools/syndi_borer + name = "Syndicate Brain Slug" + desc = "A small cortical borer, modified to be completely loyal to the owner. \ + Genetically infertile, these brain slugs can assist medically in a support role, or take direct action \ + to assist their host." + item = /obj/item/weapon/antag_spawner/syndi_borer + refundable = TRUE + cost = 10 + surplus = 20 //Let's not have this be too common + exclude_modes = list(/datum/game_mode/nuclear) \ No newline at end of file diff --git a/code/modules/vehicles/bicycle.dm b/code/modules/vehicles/bicycle.dm index 0c3e5e02c7..184b03a6bf 100644 --- a/code/modules/vehicles/bicycle.dm +++ b/code/modules/vehicles/bicycle.dm @@ -4,15 +4,15 @@ icon_state = "bicycle" var/easter_egg_chance = 1 -var/static/list/bike_music = list('sound/misc/bike1.mid', - 'sound/misc/bike2.mid', - 'sound/misc/bike3.mid') + var/static/list/bike_music = list('sound/misc/bike1.mid', + 'sound/misc/bike2.mid', + 'sound/misc/bike3.mid') /obj/vehicle/bicycle/New() ..() riding_datum = new/datum/riding/bicycle /obj/vehicle/bicycle/buckle_mob(mob/living/M, force = 0, check_loc = 1) - if(prob(easter_egg_chance) || (SSevent.holidays && SSevent.holidays[APRIL_FOOLS])) + if(prob(easter_egg_chance) || (SSevents.holidays && SSevents.holidays[APRIL_FOOLS])) M << sound(pick(bike_music), repeat = 1, wait = 0, volume = 80, channel = 42) . = ..() diff --git a/code/modules/vehicles/pimpin_ride.dm b/code/modules/vehicles/pimpin_ride.dm index 54ac1111b1..ae34cfd515 100644 --- a/code/modules/vehicles/pimpin_ride.dm +++ b/code/modules/vehicles/pimpin_ride.dm @@ -5,13 +5,17 @@ icon_state = "pussywagon" var/obj/item/weapon/storage/bag/trash/mybag = null - var/floorbuffer = 0 + var/floorbuffer = FALSE + +/obj/vehicle/janicart/Initialize(mapload) + ..() + update_icon() /obj/vehicle/janicart/Destroy() if(mybag) qdel(mybag) mybag = null - return ..() + . = ..() /obj/vehicle/janicart/buckle_mob(mob/living/buckled_mob, force = 0, check_loc = 0) . = ..() @@ -32,17 +36,6 @@ origin_tech = "materials=3;engineering=4" -/obj/vehicle/janicart/Moved(atom/OldLoc, Dir) - if(floorbuffer) - var/turf/tile = loc - if(isturf(tile)) - tile.clean_blood() - for(var/A in tile) - if(is_cleanable(A)) - qdel(A) - . = ..() - - /obj/vehicle/janicart/examine(mob/user) ..() if(floorbuffer) @@ -56,14 +49,18 @@ return if(!user.drop_item()) return - to_chat(user, "You hook the trashbag onto \the [name].") + to_chat(user, "You hook the trashbag onto [src].") I.loc = src mybag = I update_icon() else if(istype(I, /obj/item/janiupgrade)) - floorbuffer = 1 + if(floorbuffer) + to_chat(user, "[src] already has a floor buffer!") + return + floorbuffer = TRUE qdel(I) - to_chat(user, "You upgrade \the [name] with the floor buffer.") + to_chat(user, "You upgrade [src] with the floor buffer.") + flags |= CLEAN_ON_MOVE update_icon() else return ..() @@ -84,4 +81,7 @@ mybag.loc = get_turf(user) user.put_in_hands(mybag) mybag = null - update_icon() \ No newline at end of file + update_icon() + +/obj/vehicle/janicart/upgraded + floorbuffer = TRUE diff --git a/code/modules/vehicles/scooter.dm b/code/modules/vehicles/scooter.dm index b4a0e85b0a..2572306784 100644 --- a/code/modules/vehicles/scooter.dm +++ b/code/modules/vehicles/scooter.dm @@ -52,7 +52,7 @@ ..() if(A.density && has_buckled_mobs()) var/mob/living/carbon/H = buckled_mobs[1] - var/atom/throw_target = get_edge_target_turf(H, pick(cardinal)) + var/atom/throw_target = get_edge_target_turf(H, pick(GLOB.cardinal)) unbuckle_mob(H) H.throw_at(throw_target, 4, 3) H.Weaken(5) diff --git a/code/modules/vehicles/speedbike.dm b/code/modules/vehicles/speedbike.dm index e337a61457..3db99e736b 100644 --- a/code/modules/vehicles/speedbike.dm +++ b/code/modules/vehicles/speedbike.dm @@ -76,4 +76,4 @@ if(src.has_buckled_mobs()) for(var/atom/A in range(2, src)) if(!(A in src.buckled_mobs)) - Bump(A) \ No newline at end of file + Bump(A) diff --git a/code/modules/vore/eating/belly_vr.dm b/code/modules/vore/eating/belly_vr.dm deleted file mode 100644 index c3f8130564..0000000000 --- a/code/modules/vore/eating/belly_vr.dm +++ /dev/null @@ -1,369 +0,0 @@ -// -// The belly object is what holds onto a mob while they're inside a predator. -// It takes care of altering the pred's decription, digesting the prey, relaying struggles etc. -// - -// If you change what variables are on this, then you need to update the copy() proc. - -// -// Parent type of all the various "belly" varieties. -// -/datum/belly - var/name // Name of this location - var/inside_flavor // Flavor text description of inside sight/sound/smells/feels. - var/vore_sound = 'sound/vore/gulp.ogg' // Sound when ingesting someone - var/vore_verb = "ingest" // Verb for eating with this in messages - var/human_prey_swallow_time = 100 // Time in deciseconds to swallow /mob/living/carbon/human - var/nonhuman_prey_swallow_time = 60 // Time in deciseconds to swallow anything else - var/emoteTime = 300 // How long between stomach emotes at prey - var/digest_brute = 1 // Brute damage per tick in digestion mode - var/digest_burn = 3 // Burn damage per tick in digestion mode - var/digest_tickrate = 9 // Modulus this of air controller tick number to iterate gurgles on - var/immutable = FALSE // Prevents this belly from being deleted - var/escapable = TRUE // Belly can be resisted out of at any time - var/escapetime = 200 // Deciseconds, how long to escape this belly - var/escapechance = 45 // % Chance of prey beginning to escape if prey struggles. - var/tmp/digest_mode = DM_HOLD // Whether or not to digest. Default to not digest. - var/tmp/list/digest_modes = list(DM_HOLD,DM_DIGEST,DM_HEAL,DM_DIGESTF) // Possible digest modes - var/tmp/mob/living/owner // The mob whose belly this is. - var/tmp/list/internal_contents = list() // People/Things you've eaten into this belly! - var/tmp/is_full // Flag for if digested remeans are present. (for disposal messages) - var/tmp/emotePend = FALSE // If there's already a spawned thing counting for the next emote - - // Don't forget to watch your commas at the end of each line if you change these. - var/list/struggle_messages_outside = list( - "%pred's %belly wobbles with a squirming meal.", - "%pred's %belly jostles with movement.", - "%pred's %belly briefly swells outward as someone pushes from inside.", - "%pred's %belly fidgets with a trapped victim.", - "%pred's %belly jiggles with motion from inside.", - "%pred's %belly sloshes around.", - "%pred's %belly gushes softly.", - "%pred's %belly lets out a wet squelch.") - - var/list/struggle_messages_inside = list( - "Your useless squirming only causes %pred's slimy %belly to squelch over your body.", - "Your struggles only cause %pred's %belly to gush softly around you.", - "Your movement only causes %pred's %belly to slosh around you.", - "Your motion causes %pred's %belly to jiggle.", - "You fidget around inside of %pred's %belly.", - "You shove against the walls of %pred's %belly, making it briefly swell outward.", - "You jostle %pred's %belly with movement.", - "You squirm inside of %pred's %belly, making it wobble around.") - - var/list/digest_messages_owner = list( - "You feel %prey's body succumb to your digestive system, which breaks it apart into soft slurry.", - "You hear a lewd glorp as your %belly muscles grind %prey into a warm pulp.", - "Your %belly lets out a rumble as it melts %prey into sludge.", - "You feel a soft gurgle as %prey's body loses form in your %belly. They're nothing but a soft mass of churning slop now.", - "Your %belly begins gushing %prey's remains through your system, adding some extra weight to your thighs.", - "Your %belly begins gushing %prey's remains through your system, adding some extra weight to your rump.", - "Your %belly begins gushing %prey's remains through your system, adding some extra weight to your belly.", - "Your %belly groans as %prey falls apart into a thick soup. You can feel their remains soon flowing deeper into your body to be absorbed.", - "Your %belly kneads on every fiber of %prey, softening them down into mush to fuel your next hunt.", - "Your %belly churns %prey down into a hot slush. You can feel the nutrients coursing through your digestive track with a series of long, wet glorps.") - - var/list/digest_messages_prey = list( - "Your body succumbs to %pred's digestive system, which breaks you apart into soft slurry.", - "%pred's %belly lets out a lewd glorp as their muscles grind you into a warm pulp.", - "%pred's %belly lets out a rumble as it melts you into sludge.", - "%pred feels a soft gurgle as your body loses form in their %belly. You're nothing but a soft mass of churning slop now.", - "%pred's %belly begins gushing your remains through their system, adding some extra weight to %pred's thighs.", - "%pred's %belly begins gushing your remains through their system, adding some extra weight to %pred's rump.", - "%pred's %belly begins gushing your remains through their system, adding some extra weight to %pred's belly.", - "%pred's %belly groans as you fall apart into a thick soup. Your remains soon flow deeper into %pred's body to be absorbed.", - "%pred's %belly kneads on every fiber of your body, softening you down into mush to fuel their next hunt.", - "%pred's %belly churns you down into a hot slush. Your nutrient-rich remains course through their digestive track with a series of long, wet glorps.") - - var/list/examine_messages = list( - "They have something solid in their %belly!", - "It looks like they have something in their %belly!") - - //Mostly for being overridden on precreated bellies on mobs. Could be VV'd into - //a carbon's belly if someone really wanted. No UI for carbons to adjust this. - //List has indexes that are the digestion mode strings, and keys that are lists of strings. - var/list/emote_lists = list() - -// Constructor that sets the owning mob -/datum/belly/New(var/mob/living/owning_mob) - owner = owning_mob - -// Toggle digestion on/off and notify user of the new setting. -// If multiple digestion modes are avaliable (i.e. unbirth) then user should be prompted. -/datum/belly/proc/toggle_digestion() - return - -// Checks if any mobs are present inside the belly -// return True if the belly is empty. -/datum/belly/proc/is_empty() - return internal_contents.len == 0 - -// Release all contents of this belly into the owning mob's location. -// If that location is another mob, contents are transferred into whichever of its bellies the owning mob is in. -// Returns the number of mobs so released. -/datum/belly/proc/release_all_contents() - if (internal_contents.len == 0) - return 0 - for (var/atom/movable/M in internal_contents) - M.forceMove(owner.loc) // Move the belly contents into the same location as belly's owner. - internal_contents.Remove(M) // Remove from the belly contents - - var/datum/belly/B = check_belly(owner) // This makes sure that the mob behaves properly if released into another mob - if(B) - B.internal_contents.Add(M) - - owner.visible_message("[owner] expels everything from their [lowertext(name)]!") - return TRUE - -// Release a specific atom from the contents of this belly into the owning mob's location. -// If that location is another mob, the atom is transferred into whichever of its bellies the owning mob is in. -// Returns the number of atoms so released. -/datum/belly/proc/release_specific_contents(var/atom/movable/M) - if (!(M in internal_contents)) - return FALSE // They weren't in this belly anyway - - M.forceMove(owner.loc) // Move the belly contents into the same location as belly's owner. - src.internal_contents.Add(M) // Remove from the belly contents - var/datum/belly/B = check_belly(owner) - if(B) - B.internal_contents.Add(M) - - owner.visible_message("[owner] expels [M] from their [lowertext(name)]!") -// owner.regenerate_icons() - return TRUE - -// Actually perform the mechanics of devouring the tasty prey. -// The purpose of this method is to avoid duplicate code, and ensure that all necessary -// steps are taken. -/datum/belly/proc/nom_mob(var/mob/prey, var/mob/user) -// if (prey.buckled) -// prey.buckled.unbuckle_mob() - - prey.forceMove(owner) - internal_contents.Add(prey) - - if(inside_flavor) - prey << "[inside_flavor]" - -// Get the line that should show up in Examine message if the owner of this belly -// is examined. By making this a proc, we not only take advantage of polymorphism, -// but can easily make the message vary based on how many people are inside, etc. -// Returns a string which shoul be appended to the Examine output. -/datum/belly/proc/get_examine_msg() - if(internal_contents.len && examine_messages.len) - var/formatted_message - var/raw_message = pick(examine_messages) - - formatted_message = replacetext(raw_message,"%belly",lowertext(name)) - - return("[formatted_message]
    ") - -// The next function gets the messages set on the belly, in human-readable format. -// This is useful in customization boxes and such. The delimiter right now is \n\n so -// in message boxes, this looks nice and is easily delimited. -/datum/belly/proc/get_messages(var/type, var/delim = "\n\n") - ASSERT(type == "smo" || type == "smi" || type == "dmo" || type == "dmp" || type == "em") - var/list/raw_messages - - switch(type) - if("smo") - raw_messages = struggle_messages_outside - if("smi") - raw_messages = struggle_messages_inside - if("dmo") - raw_messages = digest_messages_owner - if("dmp") - raw_messages = digest_messages_prey - if("em") - raw_messages = examine_messages - - var/messages = list2text(raw_messages,delim) - return messages - -// The next function sets the messages on the belly, from human-readable var -// replacement strings and linebreaks as delimiters (two \n\n by default). -// They also sanitize the messages. -/datum/belly/proc/set_messages(var/raw_text, var/type, var/delim = "\n\n") - ASSERT(type == "smo" || type == "smi" || type == "dmo" || type == "dmp" || type == "em") - - var/list/raw_list = text2list(html_encode(raw_text),delim) - if(raw_list.len > 10) - raw_list.Cut(11) - - for(var/i = 1, i <= raw_list.len, i++) - if(length(raw_list[i]) > 160 || length(raw_list[i]) < 10) //160 is fudged value due to htmlencoding increasing the size - raw_list.Cut(i,i) - else - raw_list[i] = readd_quotes(raw_list[i]) - //Also fix % sign for var replacement - raw_list[i] = replacetext(raw_list[i],"%","%") - - ASSERT(raw_list.len <= 10) //Sanity - - switch(type) - if("smo") - struggle_messages_outside = raw_list - if("smi") - struggle_messages_inside = raw_list - if("dmo") - digest_messages_owner = raw_list - if("dmp") - digest_messages_prey = raw_list - if("em") - examine_messages = raw_list - - return - -// Handle the death of a mob via digestion. -// Called from the process_Life() methods of bellies that digest prey. -// Default implementation calls M.death() and removes from internal contents. -// Indigestable items are removed, and M is deleted. -/datum/belly/proc/digestion_death(var/mob/living/M) - is_full = TRUE - internal_contents.Remove(M) - - // If digested prey is also a pred... anyone inside their bellies gets moved up. - if (is_vore_predator(M)) - for (var/bellytype in M.vore_organs) - var/datum/belly/belly = M.vore_organs[bellytype] - for (var/obj/thing in belly.internal_contents) - thing.loc = owner - internal_contents.Add(thing) - for (var/mob/subprey in belly.internal_contents) - subprey.loc = owner - internal_contents.Add(subprey) - subprey << "As [M] melts away around you, you find yourself in [owner]'s [name]" - - //Drop all items into the belly. - for(var/obj/item/W in M) - if(!M.dropItemToGround(W)) - qdel(W) - - message_admins("[key_name(owner)] digested [key_name(M)].") - log_attack("[key_name(owner)] digested [key_name(M)].") - - // Delete the digested mob - qdel(M) - -//Handle a mob struggling -// Called from /mob/living/carbon/relaymove() -/datum/belly/proc/relay_resist(var/mob/living/R) - if (!(R in internal_contents)) - return // User is not in this belly, or struggle too soon. - - R.setClickCooldown(50) - - if(owner.stat) //If owner is stat (dead, KO) we can actually escape - R << "You attempt to climb out of \the [name]. (This will take around [escapetime/10] seconds.)" - owner << "Someone is attempting to climb out of your [name]!" - - if(do_after(R, escapetime, owner)) - if((owner.stat || escapable) && (R in internal_contents)) //Can still escape? - release_specific_contents(R) - return - else if(!(R in internal_contents)) //Aren't even in the belly. Quietly fail. - return - else //Belly became inescapable or mob revived - R << "Your attempt to escape [name] has failed!" - owner << "The attempt to escape from your [name] has failed!" - return - return - var/struggle_outer_message = pick(struggle_messages_outside) - var/struggle_user_message = pick(struggle_messages_inside) - - struggle_outer_message = replacetext(struggle_outer_message,"%pred",owner) - struggle_outer_message = replacetext(struggle_outer_message,"%prey",R) - struggle_outer_message = replacetext(struggle_outer_message,"%belly",lowertext(name)) - - struggle_user_message = replacetext(struggle_user_message,"%pred",owner) - struggle_user_message = replacetext(struggle_user_message,"%prey",R) - struggle_user_message = replacetext(struggle_user_message,"%belly",lowertext(name)) - - struggle_outer_message = "" + struggle_outer_message + "" - struggle_user_message = "" + struggle_user_message + "" - -// for(var/mob/M in hearers(4, owner)) -// M.visible_message(struggle_outer_message) // hearable - R.visible_message( "[struggle_outer_message]", "[struggle_user_message]") - playsound(R.loc, "struggle_sounds", 50, 0, -5) - - if(escapable && R.a_intent != "help") //If the stomach has escapable enabled and the person is actually trying to kick out - R << "You attempt to climb out of \the [name]." - owner << "Someone is attempting to climb out of your [name]!" - if(prob(escapechance)) //Let's have it check to see if the prey escapes first. - if(do_after(R, escapetime)) - if((escapable) && (R in internal_contents)) //Does the owner still have escapable enabled? - release_specific_contents(R) - R << "You climb out of \the [name]." - owner << "[R] climbs out of your [name]!" - for(var/mob/M in hearers(4, owner)) - M.visible_message("[R] climbs out of [owner]'s [name]!", 2) - return - else if(!(R in internal_contents)) //Aren't even in the belly. Quietly fail. - return - else //Belly became inescapable. - R << "Your attempt to escape [name] has failed!" - owner << "The attempt to escape from your [name] has failed!" - return - - else //Nothing interesting happened. - R << "But make no progress in escaping [owner]'s [name]." - owner << "But appears to be unable to make any progress in escaping your [name]." - return - else - return - -// Belly copies and then returns the copy -// Needs to be updated for any var changes -/datum/belly/proc/copy(mob/new_owner) - var/datum/belly/dupe = new /datum/belly(new_owner) - - //// Non-object variables - dupe.name = name - dupe.inside_flavor = inside_flavor - dupe.vore_sound = vore_sound - dupe.vore_verb = vore_verb - dupe.human_prey_swallow_time = human_prey_swallow_time - dupe.nonhuman_prey_swallow_time = nonhuman_prey_swallow_time - dupe.emoteTime = emoteTime - dupe.digest_brute = digest_brute - dupe.digest_burn = digest_burn - dupe.digest_tickrate = digest_tickrate - dupe.immutable = immutable - dupe.escapable = escapable - dupe.escapetime = escapetime - - //// Object-holding variables - //struggle_messages_outside - strings - dupe.struggle_messages_outside.Cut() - for(var/I in struggle_messages_outside) - dupe.struggle_messages_outside += I - - //struggle_messages_inside - strings - dupe.struggle_messages_inside.Cut() - for(var/I in struggle_messages_inside) - dupe.struggle_messages_inside += I - - //digest_messages_owner - strings - dupe.digest_messages_owner.Cut() - for(var/I in digest_messages_owner) - dupe.digest_messages_owner += I - - //digest_messages_prey - strings - dupe.digest_messages_prey.Cut() - for(var/I in digest_messages_prey) - dupe.digest_messages_prey += I - - //examine_messages - strings - dupe.examine_messages.Cut() - for(var/I in examine_messages) - dupe.examine_messages += I - - //emote_lists - index: digest mode, key: list of strings - dupe.emote_lists.Cut() - for(var/K in emote_lists) - dupe.emote_lists[K] = list() - for(var/I in emote_lists[K]) - dupe.emote_lists[K] += I - - return dupe \ No newline at end of file diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm deleted file mode 100644 index dcd42d9377..0000000000 --- a/code/modules/vore/eating/bellymodes_vr.dm +++ /dev/null @@ -1,113 +0,0 @@ -// Process the predator's effects upon the contents of its belly (i.e digestion/transformation etc) -// Called from /mob/living/Life() proc. -/datum/belly/proc/process_Life() - -/////////////////////////// Auto-Emotes /////////////////////////// - if((digest_mode in emote_lists) && !emotePend) - emotePend = TRUE - - spawn(emoteTime) - var/list/EL = emote_lists[digest_mode] - for(var/mob/living/M in internal_contents) - M << "[pick(EL)]" - src.emotePend = FALSE - -///////////////////////////// DM_HOLD ///////////////////////////// - if(digest_mode == DM_HOLD) - return //Pretty boring, huh - -//////////////////////////// DM_DIGEST //////////////////////////// - if(digest_mode == DM_DIGEST) - - if(prob(50)) - playsound(owner.loc, "digestion_sounds", 50, 0, -5) - - for (var/mob/living/M in internal_contents) - //Pref protection! - if (!M.digestable) - continue - - //Person just died in guts! - if(M.stat == DEAD) - var/digest_alert_owner = pick(digest_messages_owner) - var/digest_alert_prey = pick(digest_messages_prey) - - //Replace placeholder vars - digest_alert_owner = replacetext(digest_alert_owner,"%pred",owner) - digest_alert_owner = replacetext(digest_alert_owner,"%prey",M) - digest_alert_owner = replacetext(digest_alert_owner,"%belly",lowertext(name)) - - digest_alert_prey = replacetext(digest_alert_prey,"%pred",owner) - digest_alert_prey = replacetext(digest_alert_prey,"%prey",M) - digest_alert_prey = replacetext(digest_alert_prey,"%belly",lowertext(name)) - - //Send messages - to_chat(owner, "[digest_alert_owner]") - M.visible_message("You watch as [owner]'s form loses its additions.", "[digest_alert_prey]") - - owner.nutrition += 400 // so eating dead mobs gives you *something*. - playsound(owner.loc, "death_gurgles", 50, 0, -5) - digestion_death(M) - owner.update_icons() - continue - - - // Deal digestion damage (and feed the pred) - if(!(M.status_flags & GODMODE)) - M.adjustFireLoss(1) - owner.nutrition += 1 - return - -//////////////////////////// DM_DIGESTF //////////////////////////// - if(digest_mode == DM_DIGESTF) - - if(prob(50)) - playsound(owner.loc, "digestion_sounds", 55, 0, -3) //slightly louder 'cuz heavier gurgles - - for (var/mob/living/M in internal_contents) - //Pref protection! - if (!M.digestable) - continue - - //Person just died in guts! - if(M.stat == DEAD) - var/digest_alert_owner = pick(digest_messages_owner) - var/digest_alert_prey = pick(digest_messages_prey) - - //Replace placeholder vars - digest_alert_owner = replacetext(digest_alert_owner,"%pred",owner) - digest_alert_owner = replacetext(digest_alert_owner,"%prey",M) - digest_alert_owner = replacetext(digest_alert_owner,"%belly",lowertext(name)) - - digest_alert_prey = replacetext(digest_alert_prey,"%pred",owner) - digest_alert_prey = replacetext(digest_alert_prey,"%prey",M) - digest_alert_prey = replacetext(digest_alert_prey,"%belly",lowertext(name)) - - //Send messages - to_chat(owner, "[digest_alert_owner]") - M.visible_message("You watch as [owner]'s form loses its additions.", "[digest_alert_prey]") - owner.nutrition += 400 // so eating dead mobs gives you *something*. - playsound(owner.loc, "death_gurgles", 50, 0, -5) - digestion_death(M) - owner.update_icons() - continue - - // Deal digestion damage (and feed the pred) - if(!(M.status_flags & GODMODE)) - M.adjustBruteLoss(2) - M.adjustFireLoss(3) - owner.nutrition += 1 - return - -///////////////////////////// DM_HEAL ///////////////////////////// - if(digest_mode == DM_HEAL) - if(prob(50)) - playsound(owner.loc, "digestion_sounds", 45, 0, -6) //very quiet gurgles, supposedly. - - for (var/mob/living/M in internal_contents) - if(M.stat != DEAD) - if(owner.nutrition >= NUTRITION_LEVEL_STARVING && (M.health < M.maxHealth)) - M.adjustBruteLoss(-1) - M.adjustFireLoss(-1) - owner.nutrition -= 10 - return diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm deleted file mode 100644 index 6b7d73e7d3..0000000000 --- a/code/modules/vore/eating/living_vr.dm +++ /dev/null @@ -1,326 +0,0 @@ -///////////////////// Mob Living ///////////////////// -/mob/living - var/digestable = 1 // Can the mob be digested inside a belly? - var/datum/belly/vore_selected // Default to no vore capability. - var/list/vore_organs = list() // List of vore containers inside a mob - var/devourable = 0 // Can the mob be vored at all? -// var/feeding = 0 // Are we going to feed someone else? - - -// -// Hook for generic creation of stuff on new creatures -// -/hook/living_new/proc/vore_setup(mob/living/M) - M.verbs += /mob/living/proc/insidePanel - M.verbs += /mob/living/proc/escapeOOC - - //Tries to load prefs if a client is present otherwise gives freebie stomach - if(!M.vore_organs || !M.vore_organs.len) - spawn(20) //Wait a couple of seconds to make sure copy_to or whatever has gone - if(!M) return - - if(M.client && M.client.prefs_vr) - if(!M.copy_from_prefs_vr()) - M << "ERROR: You seem to have saved VOREStation prefs, but they couldn't be loaded." - return FALSE - if(M.vore_organs && M.vore_organs.len) - M.vore_selected = M.vore_organs[1] - - if(!M.vore_organs || !M.vore_organs.len) - if(!M.vore_organs) - M.vore_organs = list() - var/datum/belly/B = new /datum/belly(M) - B.immutable = TRUE - B.name = "Stomach" - B.inside_flavor = "It appears to be rather warm and wet. Makes sense, considering it's inside \the [M.name]." - M.vore_organs[B.name] = B - M.vore_selected = B.name - - //Simple_animal gets emotes. move this to that hook instead? - if(istype(src,/mob/living/simple_animal)) - B.emote_lists[DM_HOLD] = list( - "The insides knead at you gently for a moment.", - "The guts glorp wetly around you as some air shifts.", - "Your predator takes a deep breath and sighs, shifting you somewhat.", - "The stomach squeezes you tight for a moment, then relaxes.", - "During a moment of quiet, breathing becomes the most audible thing.", - "The warm slickness surrounds and kneads on you.") - - B.emote_lists[DM_DIGEST] = list( - "The caustic acids eat away at your form.", - "The acrid air burns at your lungs.", - "Without a thought for you, the stomach grinds inwards painfully.", - "The guts treat you like food, squeezing to press more acids against you.", - "The onslaught against your body doesn't seem to be letting up; you're food now.", - "The insides work on you like they would any other food.") - - //Return 1 to hook-caller - return 1 - -// -// Handle being clicked, perhaps with something to devour -// - - // Refactored to use centralized vore code system - Leshana - - // Critical adjustments due to TG grab changes - Poojawa - -/mob/living/proc/vore_attack(var/mob/living/user, var/mob/living/prey) - if(!user || !prey) - return - - if(prey == src && user.zone_selected == "mouth") //you click your target -// if(!feeding(src)) -// return - if(!is_vore_predator(prey)) - user << "They aren't voracious enough." - return - feed_self_to_grabbed(user, src) - - if(user == src) //you click yourself - if(!is_vore_predator(src)) - user << "You aren't voracious enough." - return - user.feed_grabbed_to_self(src, prey) - - else // click someone other than you/prey -// if(!feeding(src)) -// return - if(!is_vore_predator(src)) - user << "They aren't voracious enough." - return - feed_grabbed_to_other(user, prey, src) -// -// Eating procs depending on who clicked what -// -/mob/living/proc/feed_grabbed_to_self(var/mob/living/user, var/mob/living/prey) - var/belly = user.vore_selected - return perform_the_nom(user, prey, user, belly) -/* -/mob/living/proc/eat_held_mob(var/mob/living/user, var/mob/living/prey, var/mob/living/pred) - var/belly - if(user != pred) - belly = input("Choose Belly") in pred.vore_organs - else - belly = pred.vore_selected - return perform_the_nom(user, prey, pred, belly)*/ - -/mob/living/proc/feed_self_to_grabbed(var/mob/living/user, var/mob/living/pred) - var/belly = input("Choose Belly") in pred.vore_organs - return perform_the_nom(user, user, pred, belly) - -/mob/living/proc/feed_grabbed_to_other(var/mob/living/user, var/mob/living/prey, var/mob/living/pred) - return//disabled until I can make that toggle work - var/belly = input("Choose Belly") in pred.vore_organs - return perform_the_nom(user, prey, pred, belly) - -// -// Master vore proc that actually does vore procedures -// - -/mob/living/proc/perform_the_nom(var/mob/living/user, var/mob/living/prey, var/mob/living/pred, var/belly, swallow_time = 100) - //Sanity - if(!user || !prey || !pred || !belly || !(belly in pred.vore_organs)) - return - if (!prey.devourable) - user << "This can't be eaten!" - return - // The belly selected at the time of noms - var/datum/belly/belly_target = pred.vore_organs[belly] - var/attempt_msg = "ERROR: Vore message couldn't be created. Notify a dev. (at)" - var/success_msg = "ERROR: Vore message couldn't be created. Notify a dev. (sc)" - - // Prepare messages - if(user == pred) //Feeding someone to yourself - attempt_msg = text("[] is attemping to [] [] into their []!",pred,lowertext(belly_target.vore_verb),prey,lowertext(belly_target.name)) - success_msg = text("[] manages to [] [] into their []!",pred,lowertext(belly_target.vore_verb),prey,lowertext(belly_target.name)) - else //Feeding someone to another person - attempt_msg = text("[] is attempting to make [] [] [] into their []!",user,pred,lowertext(belly_target.vore_verb),prey,lowertext(belly_target.name)) - success_msg = text("[] manages to make [] [] [] into their []!",user,pred,lowertext(belly_target.vore_verb),prey,lowertext(belly_target.name)) - - // Announce that we start the attempt! - user.visible_message(attempt_msg) - - // Now give the prey time to escape... return if they did - - if(!do_mob(src, user, swallow_time)) - return FALSE // Prey escaped (or user disabled) before timer expired. - - // If we got this far, nom successful! Announce it! - user.visible_message(success_msg) - playsound(user, belly_target.vore_sound, 100, 1) - - // Actually shove prey into the belly. - belly_target.nom_mob(prey, user) -// user.update_icons() - stop_pulling() - - // Inform Admins - var/prey_braindead - var/prey_stat - if(prey.ckey) - prey_stat = prey.stat//only return this if they're not an unmonkey or whatever - if(!prey.client)//if they disconnected, tell us - prey_braindead = 1 - if (pred == user) - message_admins("[ADMIN_LOOKUPFLW(pred)] ate [ADMIN_LOOKUPFLW(prey)][!prey_braindead ? "" : " (BRAINDEAD)"][prey_stat ? " (DEAD/UNCONSCIOUS)" : ""].") - log_attack("[key_name(pred)] ate [key_name(prey)]") - else - message_admins("[ADMIN_LOOKUPFLW(user)] forced [ADMIN_LOOKUPFLW(pred)] to eat [ADMIN_LOOKUPFLW(prey)].") - log_attack("[key_name(user)] forced [key_name(pred)] to eat [key_name(prey)].") - return TRUE - -// -//End vore code. -/* - //Handle case: /obj/item/weapon/holder - if(/obj/item/weapon/holder/micro) - var/obj/item/weapon/holder/H = I - - if(!isliving(user)) return 0 // Return 0 to continue upper procs - var/mob/living/attacker = user // Typecast to living - - if (is_vore_predator(src)) - for (var/mob/living/M in H.contents) - attacker.eat_held_mob(attacker, M, src) - return 1 //Return 1 to exit upper procs - else - log_attack("[attacker] attempted to feed [H.contents] to [src] ([src.type]) but it failed.") - - // I just can't imagine this not being complained about - //Handle case: /obj/item/device/radio/beacon - if(/obj/item/device/radio/beacon) - var/confirm = alert(user, "[src == user ? "Eat the beacon?" : "Feed the beacon to [src]?"]", "Confirmation", "Yes!", "Cancel") - if(confirm == "Yes!") - var/bellychoice = input("Which belly?","Select A Belly") in src.vore_organs - var/datum/belly/B = src.vore_organs[bellychoice] - src.visible_message("[user] is trying to stuff a beacon into [src]'s [bellychoice]!","[user] is trying to stuff a beacon into you!") - if(do_after(user,30,src)) - user.drop_item() - I.loc = src - B.internal_contents += I - src.visible_message("[src] is fed the beacon!","You're fed the beacon!") - playsound(src, B.vore_sound, 100, 1) - return 1 - else - return 1 //You don't get to hit someone 'later' - - return 0 -*/ -// -// Custom resist catches for /mob/living -// -/mob/living/proc/vore_process_resist() - - //Are we resisting from inside a belly? - var/datum/belly/B = check_belly(src) - if(B) - spawn() B.relay_resist(src) - return TRUE //resist() on living does this TRUE thing. - - //Other overridden resists go here - - - return FALSE - -// -// Proc for updating vore organs and digestion/healing/absorbing -// -/mob/living/proc/handle_internal_contents() - if(SSmob.times_fired%6==1) - return //The accursed timer - - for (var/I in vore_organs) - var/datum/belly/B = vore_organs[I] - if(B.internal_contents.len) - B.process_Life() //AKA 'do bellymodes_vr.dm' - - for (var/I in vore_organs) - var/datum/belly/B = vore_organs[I] - if(B.internal_contents.len) - listclearnulls(B.internal_contents) - for(var/atom/movable/M in B.internal_contents) - if(M.loc != src) - B.internal_contents.Remove(M) - -// OOC Escape code for pref-breaking or AFK preds -// -/mob/living/proc/escapeOOC() - set name = "Animal Escape" - set category = "Vore" - - //You're in an animal! - if(istype(src.loc,/mob/living/simple_animal)) - var/mob/living/simple_animal/pred = src.loc - var/confirm = alert(src, "You're in a mob. Use this as a trick to get out of hostile animals. If you are in more than one pred, use this more than once.", "Confirmation", "Okay", "Cancel") - if(confirm == "Okay") - for(var/I in pred.vore_organs) - var/datum/belly/B = pred.vore_organs[I] - B.release_specific_contents(src) - - for(var/mob/living/simple_animal/SA in range(10)) - SA.prey_excludes += src - spawn(18000) - if(src && SA) - SA.prey_excludes -= src - - pred.update_icons() - - else - src << "You aren't inside anything, you clod." - -// -// Verb for saving vore preferences to save file -// -/mob/living/proc/save_vore_prefs() - if(!(client || client.prefs_vr)) - return FALSE - if(!copy_to_prefs_vr()) - return FALSE - if(!client.prefs_vr.save_vore()) - return FALSE - - return TRUE - -/mob/living/proc/apply_vore_prefs() - if(!(client || client.prefs_vr)) - return FALSE - if(!client.prefs_vr.load_vore()) - return FALSE - if(!copy_from_prefs_vr()) - return FALSE - - return TRUE - -/mob/living/proc/copy_to_prefs_vr() - if(!client || !client.prefs_vr) - src << "You attempted to save your vore prefs but somehow you're in this character without a client.prefs_vr variable. Tell a dev." - return FALSE - - var/datum/vore_preferences/P = client.prefs_vr - - P.digestable = src.digestable - P.devourable = src.devourable - P.belly_prefs = src.vore_organs - - return TRUE - -// -// Proc for applying vore preferences, given bellies -// -/mob/living/proc/copy_from_prefs_vr() - if(!client || !client.prefs_vr) - src << "You attempted to apply your vore prefs but somehow you're in this character without a client.prefs_vr variable. Tell a dev." - return FALSE - - var/datum/vore_preferences/P = client.prefs_vr - - src.digestable = P.digestable - src.devourable = P.devourable - src.vore_organs = list() - - for(var/I in P.belly_prefs) - var/datum/belly/Bp = P.belly_prefs[I] - src.vore_organs[Bp.name] = Bp.copy(src) - - return TRUE \ No newline at end of file diff --git a/code/modules/vore/eating/simple_animal_vr.dm b/code/modules/vore/eating/simple_animal_vr.dm deleted file mode 100644 index 33417331f5..0000000000 --- a/code/modules/vore/eating/simple_animal_vr.dm +++ /dev/null @@ -1,39 +0,0 @@ -///////////////////// Simple Animal ///////////////////// -/mob/living/simple_animal - var/isPredator = 0 //Are they capable of performing and pre-defined vore actions for their species? - var/swallowTime = 30 //How long it takes to eat its prey in 1/10 of a second. The default is 3 seconds. - var/list/prey_excludes = list() //For excluding people from being eaten. - -// -// Simple nom proc for if you get ckey'd into a simple_animal mob! Avoids grabs. -/* -/mob/living/proc/animal_nom(var/mob/living/T in oview(1)) - set name = "Animal Nom" - set category = "Vore" - set desc = "Since you can't grab, you get a verb!" - - feed_grabbed_to_self(src,T) -*/ -// -// Simple proc for animals to have their digestion toggled on/off externally -// -/mob/living/simple_animal/verb/toggle_digestion() - set name = "Toggle Animal's Digestion" - set desc = "Enables digestion on this mob for 20 minutes." - set category = "Vore" - set src in oview(1) - - var/datum/belly/B = vore_organs[vore_selected] - if(faction != usr.faction) - usr << "This predator isn't friendly, and doesn't give a shit about your opinions of it digesting you." - return - if(B.digest_mode == "Hold") - var/confirm = alert(usr, "Enabling digestion on [name] will cause it to digest all stomach contents. Using this to break OOC prefs is against the rules. Digestion will disable itself after 20 minutes.", "Enabling [name]'s Digestion", "Enable", "Cancel") - if(confirm == "Enable") - B.digest_mode = "Digest" - spawn(12000) //12000=20 minutes - if(src) B.digest_mode = "Hold" - else - var/confirm = alert(usr, "This mob is currently set to digest all stomach contents. Do you want to disable this?", "Disabling [name]'s Digestion", "Disable", "Cancel") - if(confirm == "Disable") - B.digest_mode = "Hold" \ No newline at end of file diff --git a/code/modules/vore/eating/vore_vr.dm b/code/modules/vore/eating/vore_vr.dm deleted file mode 100644 index f647a78fb0..0000000000 --- a/code/modules/vore/eating/vore_vr.dm +++ /dev/null @@ -1,125 +0,0 @@ - -/* -VVVVVVVV VVVVVVVV OOOOOOOOO RRRRRRRRRRRRRRRRR EEEEEEEEEEEEEEEEEEEEEE -V::::::V V::::::V OO:::::::::OO R::::::::::::::::R E::::::::::::::::::::E -V::::::V V::::::V OO:::::::::::::OO R::::::RRRRRR:::::R E::::::::::::::::::::E -V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEEEEE::::E - V:::::V V:::::V O::::::O O::::::O R::::R R:::::R E:::::E EEEEEE - V:::::V V:::::V O:::::O O:::::O R::::R R:::::R E:::::E - V:::::V V:::::V O:::::O O:::::O R::::RRRRRR:::::R E::::::EEEEEEEEEE - V:::::V V:::::V O:::::O O:::::O R:::::::::::::RR E:::::::::::::::E - V:::::V V:::::V O:::::O O:::::O R::::RRRRRR:::::R E:::::::::::::::E - V:::::V V:::::V O:::::O O:::::O R::::R R:::::R E::::::EEEEEEEEEE - V:::::V:::::V O:::::O O:::::O R::::R R:::::R E:::::E - V:::::::::V O::::::O O::::::O R::::R R:::::R E:::::E EEEEEE - V:::::::V O:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEEEE:::::E - V:::::V OO:::::::::::::OO R::::::R R:::::RE::::::::::::::::::::E - V:::V OO:::::::::OO R::::::R R:::::RE::::::::::::::::::::E - VVV OOOOOOOOO RRRRRRRR RRRRRRREEEEEEEEEEEEEEEEEEEEEE - --Aro <3 */ - -// -// Overrides/additions to stock defines go here, as well as hooks. Sort them by -// the object they are overriding. So all /mob/living together, etc. -// -// -// The datum type bolted onto normal preferences datums for storing Vore stuff -// -/client - var/datum/vore_preferences/prefs_vr - -/hook/client_new/proc/add_prefs_vr(client/C) - C.prefs_vr = new/datum/vore_preferences(C) - if(C.prefs_vr) - return TRUE - - return FALSE - -/datum/vore_preferences - //Actual preferences - var/digestable = 1 - var/devourable = 0 - var/list/belly_prefs = list() - - //Mechanically required - var/path - var/slot - var/client/client - var/client_ckey - var/client/parent - -/datum/vore_preferences/New(client/C) - if(istype(C)) - client = C - client_ckey = C.ckey - load_vore(C) - -// -// Check if an object is capable of eating things, based on vore_organs -// -/proc/is_vore_predator(var/mob/living/O) - if(istype(O,/mob/living)) - if(O.vore_organs.len > 0) - return TRUE - - return FALSE - -// -// Belly searching for simplifying other procs -// -/proc/check_belly(atom/movable/A) - if(istype(A.loc,/mob/living)) - var/mob/living/M = A.loc - for(var/I in M.vore_organs) - var/datum/belly/B = M.vore_organs[I] - if(A in B.internal_contents) - return(B) - - return FALSE - -// -// Save/Load Vore Preferences -// -/datum/vore_preferences/proc/load_vore() - if(!client || !client_ckey) return 0 //No client, how can we save? - - slot = client.prefs.default_slot - - path = client.prefs.path - - if(!path) return 0 //Path couldn't be set? - if(!fexists(path)) //Never saved before - save_vore() //Make the file first - return TRUE - - var/savefile/S = new /savefile(path) - if(!S) return 0 //Savefile object couldn't be created? - - S.cd = "/character[slot]" - - S["digestable"] >> digestable - S["devourable"] >> devourable - S["belly_prefs"] >> belly_prefs - - if(isnull(digestable)) - digestable = 1 - if(isnull(devourable)) - devourable = 0 - if(isnull(belly_prefs)) - belly_prefs = list() - - return 1 - -/datum/vore_preferences/proc/save_vore() - if(!path) return 0 - if(!slot) return 0 - var/savefile/S = new /savefile(path) - if(!S) return 0 - S.cd = "/character[slot]" - - S["digestable"] << digestable - S["devourable"] << devourable - S["belly_prefs"] << belly_prefs - - return 1 \ No newline at end of file diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm deleted file mode 100644 index e6d00991c8..0000000000 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ /dev/null @@ -1,480 +0,0 @@ -// -// Vore management panel for players -// - -/mob/living/proc/insidePanel() - set name = "Vore Panel" - set category = "Vore" - - var/datum/vore_look/picker_holder = new() - picker_holder.loop = picker_holder - picker_holder.selected = vore_organs[vore_selected] - - var/dat = picker_holder.gen_vui(src) - - picker_holder.popup = new(src, "insidePanel","Vore Panel", 400, 600, picker_holder) - picker_holder.popup.set_content(dat) - picker_holder.popup.open() - -// -// Callback Handler for the Inside form -// -/datum/vore_look - var/datum/belly/selected - var/datum/browser/popup - var/loop = null; // Magic self-reference to stop the handler from being GC'd before user takes action. - -/datum/vore_look/Topic(href,href_list[]) - if (vp_interact(href, href_list)) - popup.set_content(gen_vui(usr)) - usr << output(popup.get_content(), "insidePanel.browser") - -/datum/vore_look/proc/gen_vui(var/mob/living/user) - var/dat - - if (is_vore_predator(user.loc)) - var/mob/living/eater = user.loc - var/datum/belly/inside_belly - - //This big block here figures out where the prey is - inside_belly = check_belly(user) - - if(inside_belly) - dat += "You are currently inside[eater]'s[inside_belly]!

    " - - if(inside_belly.inside_flavor) - dat += "[inside_belly.inside_flavor]

    " - - if (inside_belly.internal_contents.len > 1) - dat += "You can see the following around you:
    " - for (var/atom/movable/O in inside_belly.internal_contents) - if(istype(O,/mob/living)) - var/mob/living/M = O - //That's just you - if(M == user) - continue - //Anything else - dat += "[O]" - else - dat += "You aren't inside anyone." - - dat += "
    " - - dat += "
      " - for(var/K in user.vore_organs) //Fuggin can't iterate over values - var/datum/belly/B = user.vore_organs[K] - if(B == selected) - dat += "
    1. [B.name]" - else - dat += "
    2. [B.name]" - - var/spanstyle - switch(B.digest_mode) - if(DM_HOLD) - spanstyle = "" - if(DM_DIGEST) - spanstyle = "color:red;" - if(DM_DIGESTF) - spanstyle = "color:purple;" - if(DM_HEAL) - spanstyle = "color:green;" - - dat += " ([B.internal_contents.len])
    3. " - - if(user.vore_organs.len < 10) - dat += "
    4. New+
    5. " - dat += "
    " - dat += "
    " - - // Selected Belly (contents, configuration) - if(!selected) - dat += "No belly selected. Click one to select it." - else - if(selected.internal_contents.len > 0) - dat += "Contents: " - for(var/O in selected.internal_contents) - dat += "[O]" - - //If there's more than one thing, add an [All] button - if(selected.internal_contents.len > 1) - dat += "\[All\]" - - dat += "
    " - - //Belly Name Button - dat += "Name:" - dat += " '[selected.name]'" - - //Digest Mode Button - dat += "
    Belly Mode:" - dat += " [selected.digest_mode]" - - //Belly verb - dat += "
    Vore Verb:" - dat += " '[selected.vore_verb]'" - - //Inside flavortext - dat += "
    Flavor Text:" - dat += " '[selected.inside_flavor]'" - - //Belly sound - dat += "
    Set Vore Sound" - dat += "Test" - - //Belly messages - dat += "
    Belly Messages" - - //Delete button - dat += "
    Delete Belly" - - dat += "
    " - - //Under the last HR, save and stuff. - dat += "Save Prefs" - dat += "Refresh" - - switch(user.digestable) - if(1) - dat += "Toggle Digestable" - if(0) - dat += "Toggle Digestable" - - switch(user.devourable) - if(1) - dat += "Toggle Devourable" - if(0) - dat += "Toggle Devourable" - - //Returns the dat html to the vore_look - return dat - -/datum/vore_look/proc/vp_interact(href, href_list) - var/mob/living/user = usr - for(var/H in href_list) - - if(href_list["close"]) - del(src) // Cleanup - return - - if(href_list["outsidepick"]) - var/tgt = locate(href_list["outsidepick"]) - var/datum/belly/OB = locate(href_list["outsidebelly"]) - var/intent = "Examine" - - if(istype(tgt,/mob/living)) - var/mob/living/M = tgt - intent = alert("What do you want to do to them?","Query","Examine","Help Out","Devour") - switch(intent) - if("Examine") //Examine a mob inside another mob - M.examine(user) - - if("Help Out") //Help the inside-mob out - user << "You begin to push [M] to freedom!" - M << "[usr] begins to push you to freedom!" - M.loc << "Someone is trying to escape from inside you!" - sleep(50) - if(prob(33)) - OB.release_specific_contents(M) - usr << "You manage to help [M] to safety!" - M << "[user] pushes you free!" - M.loc << "[M] forces free of the confines of your body!" - else - user << "[M] slips back down inside despite your efforts." - M << " Even with [user]'s help, you slip back inside again." - M.loc << "Your body efficiently shoves [M] back where they belong." - - if("Devour") //Eat the inside mob - if(!user.vore_selected) - user << "Pick a belly on yourself first!" - return 1 - - var/datum/belly/TB = user.vore_organs[user.vore_selected] - user << "You begin to [lowertext(TB.vore_verb)] [M] into your [lowertext(TB.name)]!" - M << "[user] begins to [lowertext(TB.vore_verb)] you into their [lowertext(TB.name)]!" - M.loc << "Someone inside you is eating someone else!" - - sleep(TB.nonhuman_prey_swallow_time) - if((user in OB.internal_contents) && (M in OB.internal_contents)) - user << "You manage to [lowertext(TB.vore_verb)] [M] into your [lowertext(TB.name)]!" - M << "[user] manages to [lowertext(TB.vore_verb)] you into their [lowertext(TB.name)]!" - M.loc << "Someone inside you has eaten someone else!" - M.loc = user - TB.nom_mob(M) - OB.internal_contents -= M - - else if(istype(tgt,/obj/item)) - var/obj/item/T = tgt - intent = alert("What do you want to do to that?","Query","Examine","Use Hand") - switch(intent) - if("Examine") - T.examine(user) - - if("Use Hand") - if(user.stat) - user << "You can't do that in your state!" - return 1 - - user.ClickOn(T) - sleep(5) //Seems to exit too fast for the panel to update - - if(href_list["insidepick"]) - var/intent - - //Handle the [All] choice. Ugh inelegant. Someone make this pretty. - if(href_list["pickall"]) - intent = alert("Eject all, Move all?","Query","Eject all","Cancel","Move all") - switch(intent) - if("Cancel") - return 1 - - if("Eject all") - if(user.stat) - user << "You can't do that in your state!" - return 1 - - selected.release_all_contents() - playsound(user, 'sound/effects/splat.ogg', 50, 1) - user.loc << "Everything is released from [user]!" - - if("Move all") - if(user.stat) - user << "You can't do that in your state!" - return 1 - - var/choice = input("Move all where?","Select Belly") in user.vore_organs + "Cancel - Don't Move" - - if(choice == "Cancel - Don't Move") - return 1 - else - var/datum/belly/B = user.vore_organs[choice] - for(var/atom/movable/tgt in selected.internal_contents) - selected.internal_contents -= tgt - B.internal_contents += tgt - - tgt << "You're squished from [user]'s [selected] to their [B]!" - - for(var/mob/hearer in range(1,user)) - hearer << sound('sound/vore/squish2.ogg',volume=80) - return 1 - - - var/atom/movable/tgt = locate(href_list["insidepick"]) - intent = "Examine" - intent = alert("Examine, Eject, Move? Examine if you want to leave this box.","Query","Examine","Eject","Move") - switch(intent) - if("Examine") - tgt.examine(user) - - if("Eject") - if(user.stat) - user << "You can't do that in your state!" - return 1 - - selected.release_specific_contents(tgt) - playsound(user, 'sound/effects/splat.ogg', 50, 1) - user.loc << "[tgt] is released from [user]!" - - if("Move") - if(user.stat) - user << "You can't do that in your state!" - return 1 - - var/choice = input("Move [tgt] where?","Select Belly") in user.vore_organs + "Cancel - Don't Move" - - if(choice == "Cancel - Don't Move") - return 1 - else - var/datum/belly/B = user.vore_organs[choice] - selected.internal_contents -= tgt - B.internal_contents += tgt - - tgt << "You're squished from [user]'s [lowertext(selected.name)] to their [lowertext(B.name)]!" - for(var/mob/hearer in range(1,user)) - hearer << sound('sound/vore/squish2.ogg',volume=80) - - if(href_list["newbelly"]) - if(user.vore_organs.len >= 10) - return 1 - - var/new_name = html_encode(input(usr,"New belly's name:","New Belly") as text|null) - - if(length(new_name) > 12 || length(new_name) < 2) - usr << "Entered belly name is too long." - return 0 - if(new_name in user.vore_organs) - usr << "No duplicate belly names, please." - return 0 - - var/datum/belly/NB = new(user) - NB.name = new_name - NB.owner = user //might be the thing we all needed. - user.vore_organs[new_name] = NB - selected = NB - - if(href_list["bellypick"]) - selected = locate(href_list["bellypick"]) - user.vore_selected = selected.name - - if(href_list["b_name"]) - var/new_name = html_encode(input(usr,"Belly's new name:","New Name") as text|null) - - if(length(new_name) > 12 || length(new_name) < 2) - usr << "Entered belly name length invalid (must be longer than 2, shorter than 12)." - return 0 - if(new_name in user.vore_organs) - usr << "No duplicate belly names, please." - return 0 - - user.vore_organs[new_name] = selected - user.vore_organs -= selected.name - selected.name = new_name - - if(href_list["b_mode"]) - var/list/menu_list = selected.digest_modes - - if(selected.digest_modes.len == 1) // Don't do anything - return 1 - if(selected.digest_modes.len == 2) // Just toggle... there's probably a more elegant way to do this... - var/index = selected.digest_modes.Find(selected.digest_mode) - switch(index) - if(1) - selected.digest_mode = selected.digest_modes[2] - if(2) - selected.digest_mode = selected.digest_modes[1] - else - selected.digest_mode = input("Choose Mode (currently [selected.digest_mode])") in menu_list - - if(href_list["b_desc"]) - var/new_desc = html_encode(input(usr,"Belly Description (1024 char limit):","New Description",selected.inside_flavor) as message|null) - new_desc = readd_quotes(new_desc) - - if(length(new_desc) > 1024) - usr << "Entered belly desc too long. 1024 character limit." - return FALSE - - selected.inside_flavor = new_desc - - if(href_list["b_msgs"]) - var/list/messages = list( - "Digest Message (to prey)", - "Digest Message (to you)", - "Struggle Message (outside)", - "Struggle Message (inside)", - "Examine Message (when full)", - "Reset All To Default", - "Cancel - No Changes" - ) - - alert(user,"Setting abusive or deceptive messages will result in a ban. Consider this your warning. Max 150 characters per message, max 10 messages per topic.","Really, don't.") - var/choice = input(user,"Select a type to modify. Messages from each topic are pulled at random when needed.","Pick Type") in messages - var/help = " Press enter twice to separate messages. '%pred' will be replaced with your name. '%prey' will be replaced with the prey's name. '%belly' will be replaced with your belly's name." - - switch(choice) - if("Digest Message (to prey)") - var/new_message = input(user,"These are sent to prey when they expire. Write them in 2nd person ('you feel X'). Avoid using %prey in this type."+help,"Digest Message (to prey)",selected.get_messages("dmp")) as message - if(new_message) - selected.set_messages(new_message,"dmp") - - if("Digest Message (to you)") - var/new_message = input(user,"These are sent to you when prey expires in you. Write them in 2nd person ('you feel X'). Avoid using %pred in this type."+help,"Digest Message (to you)",selected.get_messages("dmo")) as message - if(new_message) - selected.set_messages(new_message,"dmo") - - if("Struggle Message (outside)") - var/new_message = input(user,"These are sent to those nearby when prey struggles. Write them in 3rd person ('X's Y bulges')."+help,"Struggle Message (outside)",selected.get_messages("smo")) as message - if(new_message) - selected.set_messages(new_message,"smo") - - if("Struggle Message (inside)") - var/new_message = input(user,"These are sent to prey when they struggle. Write them in 2nd person ('you feel X'). Avoid using %prey in this type."+help,"Struggle Message (inside)",selected.get_messages("smi")) as message - if(new_message) - selected.set_messages(new_message,"smi") - - if("Examine Message (when full)") - var/new_message = input(user,"These are sent to people who examine you when this belly has contents. Write them in 3rd person ('Their %belly is bulging'). Do not use %pred or %prey in this type."+help,"Examine Message (when full)",selected.get_messages("em")) as message - if(new_message) - selected.set_messages(new_message,"em") - - if("Reset All To Default") - var/confirm = alert(user,"This will delete any custom messages. Are you sure?","Confirmation","DELETE","Cancel") - if(confirm == "DELETE") - selected.digest_messages_prey = initial(selected.digest_messages_prey) - selected.digest_messages_owner = initial(selected.digest_messages_owner) - selected.struggle_messages_outside = initial(selected.struggle_messages_outside) - selected.struggle_messages_inside = initial(selected.struggle_messages_inside) - - if("Cancel - No Changes") - return 1 - - if(href_list["b_verb"]) - var/new_verb = html_encode(input(usr,"New verb when eating (infinitive tense, e.g. nom or swallow):","New Verb") as text|null) - - if(length(new_verb) > 12 || length(new_verb) < 2) - usr << "Entered verb length invalid (must be longer than 2, shorter than 12)." - return FALSE - - selected.vore_verb = new_verb - - if(href_list["b_sound"]) - var/choice = input(user,"Currently set to [selected.vore_sound]","Select Sound") in vore_sounds + "Cancel - No Changes" - - if(choice == "Cancel") - return 1 - - selected.vore_sound = vore_sounds[choice] - - if(href_list["b_soundtest"]) - user << selected.vore_sound - - if(href_list["b_del"]) - if(selected.internal_contents.len) - usr << "Can't delete bellies with contents!" - else if(selected.immutable) - usr << "This belly is marked as undeletable." - else if(user.vore_organs.len == 1) - usr << "You must have at least one belly." - else - var/alert = alert("Are you sure you want to delete [selected]?","Confirmation","Delete","Cancel") - if(alert == "Delete" && !selected.internal_contents.len) - user.vore_organs -= selected.name - user.vore_organs.Remove(selected) - selected = user.vore_organs[1] - user.vore_selected = user.vore_organs[1] - - if(href_list["saveprefs"]) - if(user.save_vore_prefs()) - user << "Belly Preferences saved!" - - else - user << "ERROR: Belly Preferences were not saved!" - log_admin("Could not save vore prefs on USER: [user].") - - - if(href_list["toggledg"]) - var/choice = alert(user, "This button is for those who don't like being digested. It can make you undigestable to all mobs. Digesting you is currently: [user.digestable ? "Allowed" : "Prevented"]", "", "Allow Digestion", "Cancel", "Prevent Digestion") - switch(choice) - if("Cancel") - return 1 - if("Allow Digestion") - user.digestable = 1 - if("Prevent Digestion") - user.digestable = 0 - - if(user.client.prefs_vr) - user.client.prefs_vr.digestable = user.digestable - - if(href_list["toggledvor"]) - var/choice = alert(user, "This button is for those who don't like vore at all. Devouring you is currently: [user.devourable ? "Allowed" : "Prevented"]", "", "Allow Devourment", "Cancel", "Prevent Devourment") - switch(choice) - if("Cancel") - return 1 - if("Allow Devourment") - user.devourable = 1 - if("Prevent Devourment") - user.devourable = 0 - - if(user.client.prefs_vr) - user.client.prefs_vr.devourable = user.devourable - - //Refresh when interacted with, returning 1 makes vore_look.Topic update - return 1 diff --git a/code/modules/vore/hook-defs_vr.dm b/code/modules/vore/hook-defs_vr.dm deleted file mode 100644 index 629b1ba8f3..0000000000 --- a/code/modules/vore/hook-defs_vr.dm +++ /dev/null @@ -1,37 +0,0 @@ -//The base hooks themselves - -//New() hooks -/hook/client_new - -/hook/mob_new - -/hook/living_new - -/hook/carbon_new - -/hook/human_new - -/hook/simple_animal_new - -//Hooks for interactions -/hook/living_attackby - -// -//Hook helpers to expand hooks to others -// -/hook/mob_new/proc/chain_hooks(mob/M) - var/result = 1 - if(isliving(M)) - if(!hook_vr("living_new",args)) - result = 0 - - if(iscarbon(M)) - if(!hook_vr("carbon_new",args)) - result = 0 - - if(ishuman(M)) - if(!hook_vr("human_new",args)) - result = 0 - - //Return 1 to superhook - return result \ No newline at end of file diff --git a/code/modules/vore/resizing/grav_pull_vr.dm b/code/modules/vore/resizing/grav_pull_vr.dm deleted file mode 100644 index 921d1ab2b9..0000000000 --- a/code/modules/vore/resizing/grav_pull_vr.dm +++ /dev/null @@ -1,63 +0,0 @@ -// -// Gravity Pull effect which draws in movable objects to its center. -// In this case, "number" refers to the range. directions is ignored. -// -/datum/effect/effect/system/grav_pull - var/pull_radius = 3 - var/pull_anchored = 0 - var/break_windows = 0 - -/datum/effect/effect/system/grav_pull/set_up(range, num, loca) - pull_radius = range - number = num - if(istype(loca, /turf/)) - location = loca - else - location = get_turf(loca) - -/datum/effect/effect/system/grav_pull/start() - spawn(0) - if(holder) - src.location = get_turf(holder) - for(var/i=0, i < number, i++) - do_pull() - sleep(25) - -/datum/effect/effect/system/grav_pull/proc/do_pull() - //following is adapted from supermatter and singulo code - if(defer_powernet_rebuild != 2) - defer_powernet_rebuild = 1 - - // Let's just make this one loop. - for(var/atom/X in orange(pull_radius, location)) - // Movable atoms only - if(istype(X, /atom/movable)) - if(istype(X, /obj/effect/overlay)) continue - if(X && !istype(X, /mob/living/carbon/human)) - if(break_windows && istype(X, /obj/structure/window)) //shatter windows - var/obj/structure/window/W = X - W.ex_act(2.0) - - if(istype(X, /obj)) - var/obj/O = X - if(O.anchored) - if (!pull_anchored) continue // Don't pull anchored stuff unless configured - step_towards(X, location) // step just once if anchored - continue - - step_towards(X, location) // Step twice - step_towards(X, location) - - else if(istype(X,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = X - if(istype(H.shoes,/obj/item/clothing/shoes/magboots)) - var/obj/item/clothing/shoes/magboots/M = H.shoes - if(M.magpulse) - step_towards(H, location) //step just once with magboots - continue - step_towards(H, location) //step twice - step_towards(H, location) - - if(defer_powernet_rebuild != 2) - defer_powernet_rebuild = 0 - return diff --git a/code/modules/vore/resizing/holder_micro_vr.dm b/code/modules/vore/resizing/holder_micro_vr.dm deleted file mode 100644 index 5cdecd9039..0000000000 --- a/code/modules/vore/resizing/holder_micro_vr.dm +++ /dev/null @@ -1,33 +0,0 @@ -// Micro Holders - Extends /obj/item/weapon/holder - -/obj/item/weapon/holder/micro - name = "micro" - desc = "Another crewmember, small enough to fit in your hand." - icon_state = "micro" - slot_flags = SLOT_FEET | SLOT_HEAD | SLOT_ID - w_class = 2 - item_icons = null // Override value from parent. We don't have magic sprites. - pixel_y = 0 // Override value from parent. - -/obj/item/weapon/holder/micro/examine(var/mob/user) - for(var/mob/living/M in contents) - M.examine(user) - -/obj/item/weapon/holder/MouseDrop(mob/M as mob) - ..() - if(M != usr) return - if(usr == src) return - if(!Adjacent(usr)) return - if(istype(M,/mob/living/silicon/ai)) return - for(var/mob/living/carbon/human/O in contents) - O.show_inv(usr) - -/obj/item/weapon/holder/micro/attack_self(var/mob/living/user) - for(var/mob/living/carbon/human/M in contents) - M.help_shake_act(user) - -/obj/item/weapon/holder/micro/update_state() - // If any items have been dropped by contained mob, drop them to floor. - for(var/obj/O in contents) - O.forceMove(get_turf(src)) - ..() diff --git a/code/modules/vore/resizing/resize_vr.dm b/code/modules/vore/resizing/resize_vr.dm deleted file mode 100644 index 06b3b1b2e8..0000000000 --- a/code/modules/vore/resizing/resize_vr.dm +++ /dev/null @@ -1,208 +0,0 @@ - -//these aren't defines so they can stay in this file -var/const/SIZESCALE_HUGE = 2 -var/const/SIZESCALE_BIG = 1.5 -var/const/SIZESCALE_NORMAL = 1 -var/const/SIZESCALE_SMALL = 0.85 -var/const/SIZESCALE_TINY = 0.60 - -//average -var/const/SIZESCALE_A_HUGEBIG = (SIZESCALE_HUGE + SIZESCALE_BIG) / 2 -var/const/SIZESCALE_A_BIGNORMAL = (SIZESCALE_BIG + SIZESCALE_NORMAL) / 2 -var/const/SIZESCALE_A_NORMALSMALL = (SIZESCALE_NORMAL + SIZESCALE_SMALL) / 2 -var/const/SIZESCALE_A_SMALLTINY = (SIZESCALE_SMALL + SIZESCALE_TINY) / 2 - -// Adding needed defines to /mob/living -// Note: Polaris had this on /mob/living/carbon/human We need it higher up for animals and stuff. -/mob/living - var/size_multiplier = 1 //multiplier for the mob's icon size - -// Define holder_type on types we want to be scoop-able -//mob/living/carbon/human -// holder_type = /obj/item/weapon/holder/micro - -/** - * Scale up the size of a mob's icon by the size_multiplier. - * NOTE: mob/living/carbon/human/update_transform() has a more complicated system and - * is already applying this transform. BUT, it does not call ..() - * as long as that is true, we should be fine. If that changes we need to - * re-evaluate. - */ -/mob/living/update_transform() - ASSERT(!iscarbon(src)) - var/matrix/M = matrix() - M.Scale(size_multiplier) - M.Translate(0, 16*(size_multiplier-1)) - src.transform = M - -/** - * Get the effective size of a mob. - * Currently this is based only on size_multiplier for micro/macro stuff, - * but in the future we may also incorporate the "mob_size", so that - * a macro mouse is still only effectively "normal" or a micro dragon is still large etc. - */ -/mob/living/proc/get_effective_size() - return src.size_multiplier - -/** - * Resizes the mob immediately to the desired mod, animating it growing/shrinking. - * It can be used by anything that calls it. - */ -/mob/living/proc/sizescale(var/new_size) - var/matrix/sizescale = matrix() // Defines the matrix to change the player's size - sizescale.Scale(new_size) //Change the size of the matrix - - if(new_size >= SIZESCALE_NORMAL) - sizescale.Translate(0, -1 * (1 - new_size) * 16) //Move the player up in the tile so their feet align with the bottom - - animate(src, transform = sizescale, time = 5) //Animate the player resizing - size_multiplier = new_size //Change size_multiplier so that other items can interact with them - -/* - * Verb proc for a command that lets players change their size OOCly. - * Ace was here! Redid this a little so we'd use math for shrinking characters. This is the old code. - -/mob/living/proc/set_size() - set name = "Set Character Size" - set category = "Vore" - var/nagmessage = "DO NOT ABUSE THESE COMMANDS. They are not here for you to play with. \ - We were originally going to remove them but kept them for popular demand. \ - Do not abuse their existence outside of ERP scenes where they apply, \ - or reverting OOCly unwanted changes like someone lolshooting the crew with a shrink ray. -Ace" - - var/size_name = input(nagmessage, "Pick a Size") in player_sizes_list - if (size_name && player_sizes_list[size_name]) - src.sizescale(player_sizes_list[size_name]) - message_admins("[key_name(src)] used the sizescale command in-game to be [size_name]. \ - ([src ? "JMP" : "null"])") - -/** Add the set_size() proc to usable verbs. */ -/hook/living_new/proc/sizescale_setup(mob/living/M) - M.verbs += /mob/living/proc/set_size - return 1 - - - * Attempt to scoop up this mob up into M's hands, if the size difference is large enough. - * @return false if normal code should continue, 1 to prevent normal code. - -/mob/living/proc/attempt_to_scoop(var/mob/living/carbon/human/M) - if(!istype(M)) - return 0; - if(M.buckled) - usr << "You have to unbuckle \the [M] before you pick them up." - return 0 - if(M.get_effective_size() - src.get_effective_size() >= 0.75) - var/obj/item/weapon/holder/m_holder = get_scooped(M) - if (m_holder) - return 1 - else - return 0; // Unable to scoop, let other code run -*/ -/* - * Handle bumping into someone with helping intent. - * Called from /mob/living/Bump() in the 'brohugs all around' section. - * @return false if normal code should continue, 1 to prevent normal code. - * // TODO - can the now_pushing = 0 be moved up? What does it do anyway? - */ -/mob/living/proc/handle_micro_bump_helping(var/mob/living/tmob) - if(src.get_effective_size() <= SIZESCALE_A_SMALLTINY && tmob.get_effective_size() <= SIZESCALE_A_SMALLTINY) - // Both small! Go ahead and - now_pushing = 0 - src.forceMove(tmob.loc) - return 1 - if(abs(src.get_effective_size() - tmob.get_effective_size()) >= 0.20) - now_pushing = 0 - src.forceMove(tmob.loc) - - if(src.get_effective_size() > tmob.get_effective_size()) -/* var/mob/living/carbon/human/tmob = src - if(istype(tmob) && istype(tmob.tail_style, /datum/sprite_accessory/tail/taur/naga)) - src << "You carefully slither around [tmob]." - M << "[src]'s huge tail slithers past beside you!" - else -*/ - src.forceMove(tmob.loc) - src << "You carefully step over [tmob]." - tmob << "[src] steps over you carefully!" - if(tmob.get_effective_size() > src.get_effective_size()) -/* var/mob/living/carbon/human/M = M - if(istype(M) && istype(M.tail_style, /datum/sprite_accessory/tail/taur/naga)) - src << "You jump over [M]'s thick tail." - M << "[src] bounds over your tail." - else -*/ - src.forceMove(tmob.loc) - src << "You run between [tmob]'s legs." - tmob << "[src] runs between your legs." - return 1 - -/** - * Handle bumping into someone without mutual help intent. - * Called from /mob/living/Bump() - * NW was here, adding even more options for stomping! - * - * @return false if normal code should continue, 1 to prevent normal code. - */ -/mob/living/proc/handle_micro_bump_other(var/mob/living/tmob) - ASSERT(isliving(tmob)) // Baby don't hurt me - - if(src.a_intent == "disarm" && src.canmove && !src.buckled) - // If bigger than them by at least 0.75, move onto them and print message. - if((src.get_effective_size() - tmob.get_effective_size()) >= 0.20) - now_pushing = 0 - src.forceMove(tmob.loc) - tmob.Stun(4) -/* - var/mob/living/carbon/human/H = src - if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga)) - src << "You carefully squish [tmob] under your tail!" - tmob << "[src] pins you under their tail!" - else -*/ - src << "You pin [tmob] beneath your foot!" - tmob << "[src] pins you beneath their foot!" - return 1 - - if(src.a_intent == "harm" && src.canmove && !src.buckled) - if((src.get_effective_size() - tmob.get_effective_size()) >= 0.20) - now_pushing = 0 - src.forceMove(tmob.loc) - tmob.adjustStaminaLoss(35) - tmob.adjustBruteLoss(5) -/* var/mob/living/carbon/human/M = src - if(istype(M) && istype(M.tail_style, /datum/sprite_accessory/tail/taur/naga)) - src << "You steamroller over [tmob] with your heavy tail!" - tmob << "[src] ploughs you down mercilessly with their heavy tail!" - else -*/ - src << "You bring your foot down heavily upon [tmob]!" - tmob << "[src] steps carelessly on your body!" - return 1 - - // until I figure out grabbing micros with the godawful pull code... - if(src.a_intent == "grab" && src.canmove && !src.buckled) - if((src.get_effective_size() - tmob.get_effective_size()) >= 0.20) - now_pushing = 0 - tmob.adjustStaminaLoss(15) - src.forceMove(tmob.loc) - src << "You press [tmob] beneath your foot!" - tmob << "[src] presses you beneath their foot!" -/* - var/mob/living/carbon/human/M = src - if(istype(M) && !M.shoes) - // User is a human (capable of scooping) and not wearing shoes! Scoop into foot slot! - equip_to_slot_if_possible(tmob.get_scooped(M), slot_shoes, 0, 1) - if(istype(M.tail_style, /datum/sprite_accessory/tail/taur/naga)) - src << "You wrap up [tmob] with your powerful tail!" - tmob << "[src] binds you with their powerful tail!" - else - src << "You clench your toes around [tmob]'s body!" - tmob << "[src] grabs your body with their toes!" - else if(istype(M) && istype(M.tail_style, /datum/sprite_accessory/tail/taur/naga)) - src << "You carefully squish [tmob] under your tail!" - tmob << "[src] pins you under their tail!" - else - src << "You pin [tmob] beneath your foot!" - tmob << "[src] pins you beneath their foot!" - return 1 -*/ \ No newline at end of file diff --git a/code/modules/vore/resizing/sizechemicals.dm b/code/modules/vore/resizing/sizechemicals.dm deleted file mode 100644 index 78b4bd71ca..0000000000 --- a/code/modules/vore/resizing/sizechemicals.dm +++ /dev/null @@ -1,115 +0,0 @@ - -//////////////////////////// -/// shrinking serum /// -//////////////////////////// - -/datum/reagent/medicine/macrocillin - name = "Macrocillin" - id = "macrocillin" - description = "Glowing yellow liquid." - reagent_state = LIQUID - color = "#FFFF00" // rgb: 255, 255, 0 - overdose_threshold = 20 - -/datum/reagent/medicine/macrocillin/on_mob_life(mob/living/M, method=INGEST) - for(var/size in list(SIZESCALE_SMALL, SIZESCALE_NORMAL, SIZESCALE_BIG, SIZESCALE_HUGE)) - if(M.size_multiplier < size) - M.sizescale(size) - M << "You grow!" - break - if(M.reagents.has_reagent("macrocillin")) - M.reagents.remove_reagent("macrocillin", 20) - ..() - -/datum/reagent/medicine/microcillin - name = "Microcillin" - id = "microcillin" - description = "Murky purple liquid." - reagent_state = LIQUID - color = "#800080" - overdose_threshold = 20 - -/datum/reagent/microcillin/on_mob_life(mob/living/M, method=INGEST) - for(var/size in list(SIZESCALE_BIG, SIZESCALE_NORMAL, SIZESCALE_SMALL, SIZESCALE_TINY)) - if(M.size_multiplier > size) - M.sizescale(size) - M << "You shrink!" - break; - if(M.reagents.has_reagent("microcillin")) - M.reagents.remove_reagent("microcillin", 20) - - ..() - -/datum/reagent/medicine/normalcillin - name = "Normalcillin" - id = "normalcillin" - description = "Translucent cyan liquid." - reagent_state = LIQUID - color = "#00FFFF" - overdose_threshold = 20 - -/datum/reagent/medicine/normalcillin/on_mob_life(mob/living/M, method=INGEST) - if(M.size_multiplier > SIZESCALE_BIG) - M.sizescale(SIZESCALE_BIG) - M << "You shrink!" - else if(M.size_multiplier > SIZESCALE_NORMAL) - M.sizescale(SIZESCALE_NORMAL) - M << "You shrink!" - else if(M.size_multiplier < SIZESCALE_NORMAL) - M.sizescale(SIZESCALE_NORMAL) - M << "You grow!" - else if(M.size_multiplier < SIZESCALE_SMALL) - M.sizescale(SIZESCALE_SMALL) - M << "You grow!" - - if(M.reagents.has_reagent("normalcillin")) - M.reagents.remove_reagent("normalcillin", 20) - ..() - - -/datum/reagent/medicine/sizeoxadone - name = "Sizeoxadone" - id = "sizeoxadone" - description = "A volatile liquid used as a precursor to size-altering chemicals. Causes dizziness if taken unprocessed." - reagent_state = LIQUID - color = "#1E90FF" - overdose_threshold = 30 - metabolization_rate = 0.8 * REAGENTS_METABOLISM - -/datum/reagent/sizeoxadone/on_mob_life(var/mob/living/carbon/M, var/removed) - if(M.hallucination < volume && prob(20)) - M.hallucination += 5 - if(!M.confused) M.confused = 1 - M.confused = max(M.confused, 20) - return - -/datum/reagent/medicine/sizeoxadone/overdose_process(mob/living/M) - M.adjustBrainLoss(1) - M.adjustToxLoss(1) - ..() - . = 1 - -////////////////////////// Anti-Noms Drugs ////////////////////////// - -/datum/reagent/medicine/ickypak - name = "Ickypak" - id = "ickypak" - description = "A foul-smelling green liquid, for inducing muscle contractions to expel accidentally ingested things." - reagent_state = LIQUID - color = "#0E900E" - metabolization_rate = 0.25 * REAGENTS_METABOLISM - -/datum/reagent/medicine/ickypak/on_mob_life(var/mob/living/M, method=INGEST) - ..() - if(M.hallucination < volume && prob(20)) - M.hallucination += 5 - M.adjustToxLoss(-5) - - for(var/I in M.vore_organs) - var/datum/belly/B = M.vore_organs[I] - for(var/atom/movable/A in B.internal_contents) - if(prob(55)) - playsound(M, 'sound/effects/splat.ogg', 50, 1) - B.release_specific_contents(A) - ..() - . = 1 \ No newline at end of file diff --git a/code/modules/vore/resizing/sizegun_vr.dm b/code/modules/vore/resizing/sizegun_vr.dm deleted file mode 100644 index ace5793336..0000000000 --- a/code/modules/vore/resizing/sizegun_vr.dm +++ /dev/null @@ -1,172 +0,0 @@ -// -// Size Gun -// -/* -/obj/item/weapon/gun/energy/sizegun - name = "shrink ray" - desc = "A highly advanced ray gun with two settings: Shrink and Grow. Warning: Do not insert into mouth." - icon = 'icons/obj/gun_vr.dmi' - icon_state = "sizegun-shrink100" // Someone can probably do better. -Ace - item_state = null //so the human update icon uses the icon_state instead - fire_sound = 'sound/weapons/wave.ogg' - charge_cost = 100 - projectile_type = /obj/item/projectile/beam/shrinklaser - origin_tech = "redspace=1;bluespace=4" - modifystate = "sizegun-shrink" - selfcharge = 1 - firemodes = list( - list(mode_name = "grow", - projectile_type = /obj/item/projectile/beam/growlaser, - modifystate = "sizegun-grow", - fire_sound = 'sound/weapons/pulse3.ogg' - ), - list(mode_name = "shrink", - projectile_type = /obj/item/projectile/beam/shrinklaser, - modifystate = "sizegun-shrink", - fire_sound = 'sound/weapons/wave.ogg' - )) - -// -// Beams for size gun -// -// tracers TBD - -/obj/item/projectile/beam/shrinklaser - name = "shrink beam" - icon_state = "xray" - nodamage = 1 - damage = 0 - check_armour = "laser" - - muzzle_type = /obj/effect/projectile/xray/muzzle - tracer_type = /obj/effect/projectile/xray/tracer - impact_type = /obj/effect/projectile/xray/impact - -/obj/item/projectile/beam/shrinklaser/on_hit(var/atom/target, var/blocked = 0) - if(istype(target, /mob/living)) - var/mob/living/M = target - switch(M.size_multiplier) - if(SIZESCALE_HUGE to INFINITY) - M.sizescale(SIZESCALE_BIG) - if(SIZESCALE_BIG to SIZESCALE_HUGE) - M.sizescale(SIZESCALE_NORMAL) - if(SIZESCALE_NORMAL to SIZESCALE_BIG) - M.sizescale(SIZESCALE_SMALL) - if((0 - INFINITY) to SIZESCALE_NORMAL) - M.sizescale(SIZESCALE_TINY) - M.update_transform() - return 1 - -/obj/item/projectile/beam/growlaser - name = "growth beam" - icon_state = "bluelaser" - nodamage = 1 - damage = 0 - check_armour = "laser" - - muzzle_type = /obj/effect/projectile/laser_blue/muzzle - tracer_type = /obj/effect/projectile/laser_blue/tracer - impact_type = /obj/effect/projectile/laser_blue/impact - -/obj/item/projectile/beam/growlaser/on_hit(var/atom/target, var/blocked = 0) - if(istype(target, /mob/living)) - var/mob/living/M = target - switch(M.size_multiplier) - if(SIZESCALE_BIG to SIZESCALE_HUGE) - M.sizescale(SIZESCALE_HUGE) - if(SIZESCALE_NORMAL to SIZESCALE_BIG) - M.sizescale(SIZESCALE_BIG) - if(SIZESCALE_SMALL to SIZESCALE_NORMAL) - M.sizescale(SIZESCALE_NORMAL) - if((0 - INFINITY) to SIZESCALE_TINY) - M.sizescale(SIZESCALE_SMALL) - M.update_transform() - return 1 -*/ - -datum/design/sizeray - name = "Size Ray" - desc = "Abuse bluespace tech to alter living matter scale." - id = "sizeray" - req_tech = list("combat" = 5, "materials" = 4, "engineering" = 5, "bluespace" = 4) - build_type = PROTOLATHE - materials = list(MAT_METAL = 1000, MAT_GLASS = 1000, MAT_DIAMOND = 2500, MAT_URANIUM = 2500, MAT_TITANIUM = 1000) - build_path = /obj/item/weapon/gun/energy/laser/sizeray - category = list("Weapons") - -/obj/item/projectile/sizeray - name = "sizeray beam" - icon_state = "omnilaser" - hitsound = null - damage = 0 - damage_type = STAMINA - flag = "laser" - pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE - -/obj/item/projectile/sizeray/shrinkray - icon_state="bluelaser" - -/obj/item/projectile/sizeray/growthray - icon_state="laser" - -/obj/item/projectile/sizeray/shrinkray/on_hit(var/atom/target, var/blocked = 0) - if(istype(target, /mob/living)) - var/mob/living/M = target - switch(M.size_multiplier) - if(SIZESCALE_HUGE to INFINITY) - M.sizescale(SIZESCALE_BIG) - if(SIZESCALE_BIG to SIZESCALE_HUGE) - M.sizescale(SIZESCALE_NORMAL) - if(SIZESCALE_NORMAL to SIZESCALE_BIG) - M.sizescale(SIZESCALE_SMALL) - if((0 - INFINITY) to SIZESCALE_NORMAL) - M.sizescale(SIZESCALE_TINY) - M.update_transform() - return 1 - -/obj/item/projectile/sizeray/growthray/on_hit(var/atom/target, var/blocked = 0) - if(istype(target, /mob/living)) - var/mob/living/M = target - switch(M.size_multiplier) - if(SIZESCALE_BIG to SIZESCALE_HUGE) - M.sizescale(SIZESCALE_HUGE) - if(SIZESCALE_NORMAL to SIZESCALE_BIG) - M.sizescale(SIZESCALE_BIG) - if(SIZESCALE_SMALL to SIZESCALE_NORMAL) - M.sizescale(SIZESCALE_NORMAL) - if((0 - INFINITY) to SIZESCALE_TINY) - M.sizescale(SIZESCALE_SMALL) - M.update_transform() - return 1 - -/obj/item/ammo_casing/energy/laser/growthray - projectile_type = /obj/item/projectile/sizeray/growthray - select_name = "Growth" - -/obj/item/ammo_casing/energy/laser/shrinkray - projectile_type = /obj/item/projectile/sizeray/shrinkray - select_name = "Shrink" - - -//Gun here -/obj/item/weapon/gun/energy/laser/sizeray - name = "size ray" - icon_state = "bluetag" - desc = "Size manipulator using bluespace breakthroughs." - item_state = null //so the human update icon uses the icon_state instead. - ammo_type = list(/obj/item/ammo_casing/energy/laser/shrinkray, /obj/item/ammo_casing/energy/laser/growthray) - origin_tech = "combat=1;magnets=2" - selfcharge = 1 - charge_delay = 5 - ammo_x_offset = 2 - clumsy_check = 1 - - attackby(obj/item/W, mob/user) - if(W==src) - if(icon_state=="bluetag") - icon_state="redtag" - ammo_type = list(/obj/item/ammo_casing/energy/laser/growthray) - else - icon_state="bluetag" - ammo_type = list(/obj/item/ammo_casing/energy/laser/shrinkray) - return ..() \ No newline at end of file diff --git a/code/modules/vore/trycatch_vr.dm b/code/modules/vore/trycatch_vr.dm deleted file mode 100644 index 1ae5c3bc0c..0000000000 --- a/code/modules/vore/trycatch_vr.dm +++ /dev/null @@ -1,62 +0,0 @@ -/* -This file is for jamming single-line procs into Polaris procs. -It will prevent runtimes and allow their code to run if VOREStation's fails. -It will also log when we mess up our code rather than making it vague. - -Call it at the top of a stock proc with... - -if(attempt_vr(object,proc to call,args)) return - -...if you are replacing an entire proc. - -The proc you're attemping should return nonzero values on success. -*/ - -/proc/attempt_vr(callon, procname, list/args=null) - try - if(!callon || !procname) - CRASH("attempt_vr: Invalid obj/proc: [callon]/[procname]") - return 0 - - var/result = call(callon,procname)(arglist(args)) - - return result - - catch(var/exception/e) - CRASH("attempt_vr runtimed when calling [procname] on [callon].") - CRASH("attempt_vr catch: [e] on [e.file]:[e.line]") - return 0 - -/* -This is the _vr version of calling hooks. -It's meant to have different messages, and also the try/catch block. -For when you want hooks and want to know when you ruin everything, -vs when Polaris ruins everything. - -Call it at the top of a stock proc with... - -if(hook_vr(proc,args)) return - -...if you are replacing an entire proc. - -The hooks you're calling should return nonzero values on success. -*/ -/proc/hook_vr(hook, list/args=null) - try - var/hook_path = text2path("/hook/[hook]") - if(!hook_path) - CRASH("hook_vr: Invalid hook '/hook/[hook]' called.") - return 0 - - var/caller = new hook_path - var/status = 1 - for(var/P in typesof("[hook_path]/proc")) - if(!call(caller, P)(arglist(args))) - CRASH("hook_vr: Hook '[P]' failed or runtimed.") - status = 0 - - return status - - catch(var/exception/e) - CRASH("hook_vr itself failed or runtimed. Exception below.") - CRASH("hook_vr catch: [e] on [e.file]:[e.line]") \ No newline at end of file diff --git a/code/modules/zombie/organs.dm b/code/modules/zombie/organs.dm index 51e5e201f8..295d774595 100644 --- a/code/modules/zombie/organs.dm +++ b/code/modules/zombie/organs.dm @@ -3,6 +3,7 @@ desc = "A black web of pus and vicera." zone = "head" slot = "zombie_infection" + icon_state = "blacktumor" origin_tech = "biotech=5" var/datum/species/old_species var/living_transformation_time = 3 @@ -16,10 +17,10 @@ . = ..() if(iscarbon(loc)) Insert(loc) - zombie_infection_list += src + GLOB.zombie_infection_list += src /obj/item/organ/zombie_infection/Destroy() - zombie_infection_list -= src + GLOB.zombie_infection_list -= src . = ..() /obj/item/organ/zombie_infection/Insert(var/mob/living/carbon/M, special = 0) diff --git a/code/orphaned_procs/AStar.dm b/code/orphaned_procs/AStar.dm index 7775d0ffd0..8a538cf6b8 100644 --- a/code/orphaned_procs/AStar.dm +++ b/code/orphaned_procs/AStar.dm @@ -155,7 +155,7 @@ Actual Adjacent procs : var/list/L = new() var/turf/T - for(var/dir in cardinal) + for(var/dir in GLOB.cardinal) T = get_step(src,dir) if(simulated_only && !istype(T)) continue diff --git a/code/orphaned_procs/dbcore.dm b/code/orphaned_procs/dbcore.dm index 1f4b1ef0d3..a073780ea0 100644 --- a/code/orphaned_procs/dbcore.dm +++ b/code/orphaned_procs/dbcore.dm @@ -34,8 +34,8 @@ // Deprecated! See global.dm for new configuration vars /* -var/DB_SERVER = "" // This is the location of your MySQL server (localhost is USUALLY fine) -var/DB_PORT = 3306 // This is the port your MySQL server is running on (3306 is the default) + var/DB_SERVER = "" // This is the location of your MySQL server (localhost is USUALLY fine) + var/DB_PORT = 3306 // This is the port your MySQL server is running on (3306 is the default) */ DBConnection @@ -63,11 +63,11 @@ DBConnection/proc/Connect() if(failed_connections > FAILED_DB_CONNECTION_CUTOFF) //If it failed to establish a connection more than 5 times in a row, don't bother attempting to connect anymore. return FALSE - var/user = sqlfdbklogin - var/pass = sqlfdbkpass - var/db = sqlfdbkdb - var/address = sqladdress - var/port = sqlport + var/user = GLOB.sqlfdbklogin + var/pass = GLOB.sqlfdbkpass + var/db = GLOB.sqlfdbkdb + var/address = GLOB.sqladdress + var/port = GLOB.sqlport doConnect("dbi:mysql:[db]:[address]:[port]","[user]","[pass]") . = IsConnected() @@ -98,7 +98,7 @@ DBConnection/proc/ErrorMsg() return _dm_db_error_msg(_db_con) DBConnection/proc/SelectDB(database_name,dbi) if(IsConnected()) Disconnect() //return Connect("[dbi?"[dbi]":"dbi:mysql:[database_name]:[DB_SERVER]:[DB_PORT]"]",user,password) - return Connect("[dbi?"[dbi]":"dbi:mysql:[database_name]:[sqladdress]:[sqlport]"]",user,password) + return Connect("[dbi?"[dbi]":"dbi:mysql:[database_name]:[GLOB.sqladdress]:[GLOB.sqlport]"]",user,password) DBConnection/proc/NewQuery(sql_query,cursor_handler=src.default_cursor) return new/DBQuery(sql_query,src,cursor_handler) diff --git a/code/orphaned_procs/priority_announce.dm b/code/orphaned_procs/priority_announce.dm index 26b3548e3e..46d71dc0e2 100644 --- a/code/orphaned_procs/priority_announce.dm +++ b/code/orphaned_procs/priority_announce.dm @@ -10,21 +10,21 @@ announcement += "

    [html_encode(title)]

    " else if(type == "Captain") announcement += "

    Captain Announces

    " - news_network.SubmitArticle(text, "Captain's Announcement", "Station Announcements", null) + GLOB.news_network.SubmitArticle(text, "Captain's Announcement", "Station Announcements", null) else announcement += "

    [command_name()] Update

    " if (title && length(title) > 0) announcement += "

    [html_encode(title)]

    " if(title == "") - news_network.SubmitArticle(text, "Central Command Update", "Station Announcements", null) + GLOB.news_network.SubmitArticle(text, "Central Command Update", "Station Announcements", null) else - news_network.SubmitArticle(title + "

    " + text, "Central Command", "Station Announcements", null) + GLOB.news_network.SubmitArticle(title + "

    " + text, "Central Command", "Station Announcements", null) announcement += "
    [html_encode(text)]
    " announcement += "
    " - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) if(!isnewplayer(M) && !M.ear_deaf) to_chat(M, announcement) if(M.client.prefs.toggles & SOUND_ANNOUNCEMENTS) @@ -37,7 +37,7 @@ if(announce) priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/AI/commandreport.ogg') - for(var/obj/machinery/computer/communications/C in machines) + for(var/obj/machinery/computer/communications/C in GLOB.machines) if(!(C.stat & (BROKEN|NOPOWER)) && C.z == ZLEVEL_STATION) var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(C.loc) P.name = "paper - '[title]'" @@ -50,7 +50,7 @@ if(!message) return - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) if(!isnewplayer(M) && !M.ear_deaf) to_chat(M, "[title]
    [message]

    ") if(M.client.prefs.toggles & SOUND_ANNOUNCEMENTS) diff --git a/code/orphaned_procs/statistics.dm b/code/orphaned_procs/statistics.dm index a29986f9e3..b429e78004 100644 --- a/code/orphaned_procs/statistics.dm +++ b/code/orphaned_procs/statistics.dm @@ -1,4 +1,4 @@ -var/datum/feedback/blackbox = new() +GLOBAL_DATUM_INIT(blackbox, /datum/feedback, new) //the feedback datum; stores all feedback /datum/feedback @@ -33,7 +33,7 @@ var/datum/feedback/blackbox = new() var/pda_msg_amt = 0 var/rc_msg_amt = 0 - for (var/obj/machinery/message_server/MS in message_servers) + for (var/obj/machinery/message_server/MS in GLOB.message_servers) if (MS.pda_msgs.len > pda_msg_amt) pda_msg_amt = MS.pda_msgs.len if (MS.rc_msgs.len > rc_msg_amt) @@ -62,10 +62,10 @@ var/datum/feedback/blackbox = new() if (!feedback) return round_end_data_gathering() //round_end time logging and some other data processing - if (!dbcon.Connect()) return + if (!GLOB.dbcon.Connect()) return var/round_id - var/DBQuery/query_feedback_max_id = dbcon.NewQuery("SELECT MAX(round_id) AS round_id FROM [format_table_name("feedback")]") + var/DBQuery/query_feedback_max_id = GLOB.dbcon.NewQuery("SELECT MAX(round_id) AS round_id FROM [format_table_name("feedback")]") if(!query_feedback_max_id.Execute()) return while (query_feedback_max_id.NextRow()) @@ -86,15 +86,15 @@ var/datum/feedback/blackbox = new() if (sqlrowlist == "") return - var/DBQuery/query_feedback_save = dbcon.NewQuery("INSERT DELAYED IGNORE INTO [format_table_name("feedback")] VALUES " + sqlrowlist) + var/DBQuery/query_feedback_save = GLOB.dbcon.NewQuery("INSERT DELAYED IGNORE INTO [format_table_name("feedback")] VALUES " + sqlrowlist) query_feedback_save.Execute() /proc/feedback_set(variable,value) - if(!blackbox) + if(!GLOB.blackbox) return - var/datum/feedback_variable/FV = blackbox.find_feedback_datum(variable) + var/datum/feedback_variable/FV = GLOB.blackbox.find_feedback_datum(variable) if(!FV) return @@ -102,10 +102,10 @@ var/datum/feedback/blackbox = new() FV.set_value(value) /proc/feedback_inc(variable,value) - if(!blackbox) + if(!GLOB.blackbox) return - var/datum/feedback_variable/FV = blackbox.find_feedback_datum(variable) + var/datum/feedback_variable/FV = GLOB.blackbox.find_feedback_datum(variable) if(!FV) return @@ -113,10 +113,10 @@ var/datum/feedback/blackbox = new() FV.inc(value) /proc/feedback_dec(variable,value) - if(!blackbox) + if(!GLOB.blackbox) return - var/datum/feedback_variable/FV = blackbox.find_feedback_datum(variable) + var/datum/feedback_variable/FV = GLOB.blackbox.find_feedback_datum(variable) if(!FV) return @@ -124,10 +124,10 @@ var/datum/feedback/blackbox = new() FV.dec(value) /proc/feedback_set_details(variable,details) - if(!blackbox) + if(!GLOB.blackbox) return - var/datum/feedback_variable/FV = blackbox.find_feedback_datum(variable) + var/datum/feedback_variable/FV = GLOB.blackbox.find_feedback_datum(variable) if(!FV) return @@ -135,10 +135,10 @@ var/datum/feedback/blackbox = new() FV.set_details(details) /proc/feedback_add_details(variable,details) - if(!blackbox) + if(!GLOB.blackbox) return - var/datum/feedback_variable/FV = blackbox.find_feedback_datum(variable) + var/datum/feedback_variable/FV = GLOB.blackbox.find_feedback_datum(variable) if(!FV) return @@ -209,20 +209,20 @@ var/datum/feedback/blackbox = new() /proc/sql_poll_population() if(!config.sql_enabled) return - if(!dbcon.Connect()) + if(!GLOB.dbcon.Connect()) return var/playercount = 0 - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) if(M.client) playercount += 1 - var/admincount = admins.len - var/DBQuery/query_record_playercount = dbcon.NewQuery("INSERT INTO [format_table_name("legacy_population")] (playercount, admincount, time, server_ip, server_port) VALUES ([playercount], [admincount], '[SQLtime()], INET_ATON('[world.internet_address]'), '[world.port]')") + var/admincount = GLOB.admins.len + var/DBQuery/query_record_playercount = GLOB.dbcon.NewQuery("INSERT INTO [format_table_name("legacy_population")] (playercount, admincount, time, server_ip, server_port) VALUES ([playercount], [admincount], '[SQLtime()]', INET_ATON('[world.internet_address]'), '[world.port]')") query_record_playercount.Execute() /proc/sql_report_death(mob/living/L) if(!config.sql_enabled) return - if(!dbcon.Connect()) + if(!GLOB.dbcon.Connect()) return if(!L || !L.key || !L.mind) return @@ -249,5 +249,5 @@ var/datum/feedback/blackbox = new() var/sqlstamina = sanitizeSQL(L.getStaminaLoss()) var/coord = sanitizeSQL("[L.x], [L.y], [L.z]") var/map = sanitizeSQL(SSmapping.config.map_name) - var/DBQuery/query_report_death = dbcon.NewQuery("INSERT INTO [format_table_name("death")] (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, toxloss, cloneloss, staminaloss, coord, mapname, server_ip, server_port) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[SQLtime()]', '[laname]', '[lakey]', '[sqlgender]', [sqlbrute], [sqlfire], [sqlbrain], [sqloxy], [sqltox], [sqlclone], [sqlstamina], '[coord]', '[map]', INET_ATON('[world.internet_address]'), '[world.port]')") + var/DBQuery/query_report_death = GLOB.dbcon.NewQuery("INSERT INTO [format_table_name("death")] (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, toxloss, cloneloss, staminaloss, coord, mapname, server_ip, server_port) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[SQLtime()]', '[laname]', '[lakey]', '[sqlgender]', [sqlbrute], [sqlfire], [sqlbrain], [sqloxy], [sqltox], [sqlclone], [sqlstamina], '[coord]', '[map]', INET_ATON('[world.internet_address]'), '[world.port]')") query_report_death.Execute() diff --git a/code/world.dm b/code/world.dm index 50a1317a5f..1b42af425c 100644 --- a/code/world.dm +++ b/code/world.dm @@ -27,16 +27,16 @@ #endif //logs var/date_string = time2text(world.realtime, "YYYY/MM-Month/DD-Day") - href_logfile = file("data/logs/[date_string] hrefs.htm") - diary = file("data/logs/[date_string].log") - diaryofmeanpeople = file("data/logs/[date_string] Attack.log") - diary << "\n\nStarting up. [time_stamp()]\n---------------------" - diaryofmeanpeople << "\n\nStarting up. [time_stamp()]\n---------------------" - changelog_hash = md5('html/changelog.html') //used for telling if the changelog has changed recently + GLOB.href_logfile = file("data/logs/[date_string] hrefs.htm") + GLOB.diary = file("data/logs/[date_string].log") + GLOB.diaryofmeanpeople = file("data/logs/[date_string] Attack.log") + GLOB.diary << "\n\nStarting up. [time_stamp()]\n---------------------" + GLOB.diaryofmeanpeople << "\n\nStarting up. [time_stamp()]\n---------------------" + GLOB.changelog_hash = md5('html/changelog.html') //used for telling if the changelog has changed recently make_datum_references_lists() //initialises global lists for referencing frequently used datums (so that we only ever do it once) load_configuration() - revdata.DownloadPRDetails() + GLOB.revdata.DownloadPRDetails() load_mode() load_motd() load_admins() @@ -46,37 +46,37 @@ LoadBans() investigate_reset() - timezoneOffset = text2num(time2text(0,"hh")) * 36000 + GLOB.timezoneOffset = text2num(time2text(0,"hh")) * 36000 if(config.sql_enabled) - if(!dbcon.Connect()) + if(!GLOB.dbcon.Connect()) log_world("Your server failed to establish a connection with the database.") else log_world("Database connection established.") - data_core = new /datum/datacore() + GLOB.data_core = new /datum/datacore() Master.Initialize(10, FALSE) #define IRC_STATUS_THROTTLE 50 /world/Topic(T, addr, master, key) if(config && config.log_world_topic) - diary << "TOPIC: \"[T]\", from:[addr], master:[master], key:[key]" + GLOB.diary << "TOPIC: \"[T]\", from:[addr], master:[master], key:[key]" var/list/input = params2list(T) - var/key_valid = (global.comms_allowed && input["key"] == global.comms_key) + var/key_valid = (GLOB.comms_allowed && input["key"] == GLOB.comms_key) var/static/last_irc_status = 0 if("ping" in input) var/x = 1 - for (var/client/C in clients) + for (var/client/C in GLOB.clients) x++ return x else if("players" in input) var/n = 0 - for(var/mob/M in player_list) + for(var/mob/M in GLOB.player_list) if(M.client) n++ return n @@ -87,40 +87,40 @@ var/list/adm = get_admin_counts() var/list/allmins = adm["total"] var/status = "Admins: [allmins.len] (Active: [english_list(adm["present"])] AFK: [english_list(adm["afk"])] Stealth: [english_list(adm["stealth"])] Skipped: [english_list(adm["noflags"])]). " - status += "Players: [clients.len] (Active: [get_active_player_count(0,1,0)]). Mode: [ticker.mode.name]." + status += "Players: [GLOB.clients.len] (Active: [get_active_player_count(0,1,0)]). Mode: [SSticker.mode.name]." send2irc("Status", status) last_irc_status = world.time else if("status" in input) var/list/s = list() - s["version"] = game_version - s["mode"] = master_mode - s["respawn"] = config ? abandon_allowed : 0 - s["enter"] = enter_allowed + s["version"] = GLOB.game_version + s["mode"] = GLOB.master_mode + s["respawn"] = config ? GLOB.abandon_allowed : 0 + s["enter"] = GLOB.enter_allowed s["vote"] = config.allow_vote_mode s["ai"] = config.allow_ai s["host"] = host ? host : null s["active_players"] = get_active_player_count() - s["players"] = clients.len - s["revision"] = revdata.commit - s["revision_date"] = revdata.date + s["players"] = GLOB.clients.len + s["revision"] = GLOB.revdata.commit + s["revision_date"] = GLOB.revdata.date var/list/adm = get_admin_counts() var/list/presentmins = adm["present"] var/list/afkmins = adm["afk"] s["admins"] = presentmins.len + afkmins.len //equivalent to the info gotten from adminwho s["gamestate"] = 1 - if(ticker) - s["gamestate"] = ticker.current_state + if(SSticker) + s["gamestate"] = SSticker.current_state s["map_name"] = SSmapping.config.map_name - if(key_valid && ticker && ticker.mode) - s["real_mode"] = ticker.mode.name + if(key_valid && SSticker && SSticker.mode) + s["real_mode"] = SSticker.mode.name // Key-authed callers may know the truth behind the "secret" s["security_level"] = get_security_level() - s["round_duration"] = round((world.time-round_start_time)/10) + s["round_duration"] = SSticker ? round((world.time-SSticker.round_start_time)/10) : 0 // Amount of world's ticks in seconds, useful for calculating round duration if(SSshuttle && SSshuttle.emergency) @@ -136,7 +136,7 @@ return "Bad Key" else #define CHAT_PULLR 64 //defined in preferences.dm, but not available here at compilation time - for(var/client/C in clients) + for(var/client/C in GLOB.clients) if(C.prefs && (C.prefs.chat_toggles & CHAT_PULLR)) to_chat(C, "PR: [input["announce"]]") #undef CHAT_PULLR @@ -149,7 +149,7 @@ relay_msg_admins("HELP: [input["source"]] [input["message_sender"]]: [input["message"]]") if(input["crossmessage"] == "Comms_Console") minor_announce(input["message"], "Incoming message from [input["message_sender"]]") - for(var/obj/machinery/computer/communications/CM in machines) + for(var/obj/machinery/computer/communications/CM in GLOB.machines) CM.overrideCooldown() if(input["crossmessage"] == "News_Report") minor_announce(input["message"], "Breaking Update From [input["message_sender"]]") @@ -188,20 +188,20 @@ delay = time else delay = config.round_end_countdown * 10 - if(ticker.delay_end) + if(SSticker.delay_end) to_chat(world, "An admin has delayed the round end.") return to_chat(world, "Rebooting World in [delay/10] [(delay >= 10 && delay < 20) ? "second" : "seconds"]. [reason]") var/round_end_sound_sent = FALSE - if(ticker.round_end_sound) + if(SSticker.round_end_sound) round_end_sound_sent = TRUE - for(var/thing in clients) + for(var/thing in GLOB.clients) var/client/C = thing if (!C) continue - C.Export("##action=load_rsc", ticker.round_end_sound) + C.Export("##action=load_rsc", SSticker.round_end_sound) sleep(delay) - if(ticker.delay_end) + if(SSticker.delay_end) to_chat(world, "Reboot was cancelled by an admin.") return OnReboot(reason, feedback_c, feedback_r, round_end_sound_sent) @@ -219,13 +219,13 @@ if(count > 10) log << "#[count]\t[index]" #endif - if(blackbox) - blackbox.save_all_data_to_sql() + if(GLOB.blackbox) + GLOB.blackbox.save_all_data_to_sql() Master.Shutdown() //run SS shutdowns RoundEndAnimation(round_end_sound_sent) kick_clients_in_lobby("The round came to an end with you in the lobby.", 1) //second parameter ensures only afk clients are kicked to_chat(world, "Rebooting world...") - for(var/thing in clients) + for(var/thing in GLOB.clients) var/client/C = thing if(C && config.server) //if you set a server location in config.txt, it sends you there instead of trying to reconnect to the same world address. -- NeoFite C << link("byond://[config.server]") @@ -233,10 +233,10 @@ /world/proc/RoundEndAnimation(round_end_sound_sent) set waitfor = FALSE var/round_end_sound - if(!ticker && ticker.round_end_sound) - round_end_sound = ticker.round_end_sound + if(!SSticker && SSticker.round_end_sound) + round_end_sound = SSticker.round_end_sound if (!round_end_sound_sent) - for(var/thing in clients) + for(var/thing in GLOB.clients) var/client/C = thing if (!C) continue @@ -252,7 +252,7 @@ 'sound/roundend/disappointed.ogg'\ ) - for(var/thing in clients) + for(var/thing in GLOB.clients) var/obj/screen/splash/S = new(thing, FALSE) S.Fade(FALSE,FALSE) @@ -262,8 +262,8 @@ var/list/Lines = file2list("data/mode.txt") if(Lines.len) if(Lines[1]) - master_mode = Lines[1] - diary << "Saved mode is '[master_mode]'" + GLOB.master_mode = Lines[1] + GLOB.diary << "Saved mode is '[GLOB.master_mode]'" /world/proc/save_mode(the_mode) var/F = file("data/mode.txt") @@ -271,7 +271,7 @@ F << the_mode /world/proc/load_motd() - join_motd = file2text("config/motd.txt") + "
    " + revdata.GetTestMergeInfo() + GLOB.join_motd = file2text("config/motd.txt") + "
    " + GLOB.revdata.GetTestMergeInfo() /world/proc/load_configuration() config = new /datum/configuration() @@ -282,7 +282,7 @@ config.loadmaplist("config/maps.txt") // apply some settings from config.. - abandon_allowed = config.respawn + GLOB.abandon_allowed = config.respawn /world/proc/update_status() @@ -301,16 +301,16 @@ var/list/features = list() - if(ticker) - if(master_mode) - features += master_mode + if(SSticker) + if(GLOB.master_mode) + features += GLOB.master_mode else features += "STARTING" - if (!enter_allowed) + if (!GLOB.enter_allowed) features += "closed" - features += abandon_allowed ? "respawn" : "no respawn" + features += GLOB.abandon_allowed ? "respawn" : "no respawn" if (config && config.allow_vote_mode) features += "vote" @@ -319,7 +319,7 @@ features += "AI allowed" var/n = 0 - for (var/mob/M in player_list) + for (var/mob/M in GLOB.player_list) if (M.client) n++ @@ -334,4 +334,4 @@ if (features) s += ": [jointext(features, ", ")]" - status = s + status = s \ No newline at end of file diff --git a/config/lavaRuinBlacklist.txt b/config/lavaRuinBlacklist.txt index 9747d5a1c6..aec26764a5 100644 --- a/config/lavaRuinBlacklist.txt +++ b/config/lavaRuinBlacklist.txt @@ -10,7 +10,6 @@ #_maps/RandomRuins/LavaRuins/lavaland_surface_cube.dmm ##RESPAWN -#_maps/RandomRuins/LavaRuins/lavaland_surface_prisoner_crash.dmm #_maps/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm #_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm #_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm @@ -30,7 +29,6 @@ #_maps/RandomRuins/LavaRuins/lavaland_surface_automated_trade_outpost.dmm #_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm #_maps/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm -#_maps/RandomRuins/LavaRuins/lavaland_gym.dmm #_maps/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm #_maps/RandomRuins/LavaRuins/lavaland_surface_wwiioutpost.dmm #_maps/RandomRuins/LavaRuins/lavaland_surface_tomb.dmm @@ -39,4 +37,4 @@ #_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm #_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm #_maps/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm -#_maps/RandomRuins/LavaRuins/lavaland_surface_swarmer_crash.dmm \ No newline at end of file +#_maps/RandomRuins/LavaRuins/lavaland_surface_swarmer_crash.dmm diff --git a/config/maps.txt b/config/maps.txt index 94101536d9..8bf54ba4a8 100644 --- a/config/maps.txt +++ b/config/maps.txt @@ -18,18 +18,21 @@ map tgstation2 endmap map metastation - minplayers 10 + minplayers 25 + #voteweight 0.5 endmap map pubbystation - minplayers 10 endmap -map CitadelStation - #default - #voteweight 1.5 +map omegastation + maxplayers 35 endmap map deltastation - minplayers 10 + minplayers 50 +endmap + +map cerestation + minplayers 45 endmap \ No newline at end of file diff --git a/config/title_screens/images/blank.png b/config/title_screens/images/blank.png new file mode 100644 index 0000000000..c3167a923b Binary files /dev/null and b/config/title_screens/images/blank.png differ diff --git a/config/title_screens/images/default.dmi b/config/title_screens/images/default.dmi new file mode 100644 index 0000000000..633bd434b8 Binary files /dev/null and b/config/title_screens/images/default.dmi differ diff --git a/config/unbuyableshuttles.txt b/config/unbuyableshuttles.txt index e8e287987d..30c887b39b 100644 --- a/config/unbuyableshuttles.txt +++ b/config/unbuyableshuttles.txt @@ -1,20 +1,29 @@ -#Listing maps here will make the shuttle not available to buy in comms console. -#Maps must be the full path to them -#Only shuttles with a price in the code will work with this! -#SPECIFYING AN INVALID MAP WILL RESULT IN RUNTIMES ON GAME START +##Listing maps here will make the shuttle not available to buy in comms console. +##Maps must be the full path to them +##Only shuttles with a price in the code will work with this! +##SPECIFYING AN INVALID MAP WILL RESULT IN RUNTIMES ON GAME START -#_maps/shuttles/emergency_asteroid.dmm -#_maps/shuttles/emergency_bar.dmm -#_maps/shuttles/emergency_meteor.dmm -#_maps/shuttles/emergency_luxury.dmm +##Station shuttles #_maps/shuttles/emergency_birdboat.dmm #_maps/shuttles/emergency_box.dmm -#_maps/shuttles/emergency_clown.dmm -#_maps/shuttles/emergency_cramped.dmm +#_maps/shuttles/emergency_delta.dmm #_maps/shuttles/emergency_meta.dmm #_maps/shuttles/emergency_mini.dmm +#_maps/shuttles/emergency_pubby.dmm + +##Others +#_maps/shuttles/emergency_asteroid.dmm +#_maps/shuttles/emergency_airless.dmm +#_maps/shuttles/emergency_arena.dmm +#_maps/shuttles/emergency_bar.dmm +#_maps/shuttles/emergency_clown.dmm +#_maps/shuttles/emergency_cramped.dmm #_maps/shuttles/emergency_imfedupwiththisworld.dmm #_maps/shuttles/emergency_goon.dmm -#_maps/shuttles/emergency_wabbajack.dmm -#_maps/shuttles/emergency_arena.dmm +#_maps/shuttles/emergency_luxury.dmm +#_maps/shuttles/emergency_meteor.dmm #_maps/shuttles/emergency_raven.dmm +#_maps/shuttles/emergency_russiafightpit.dmm +#_maps/shuttles/emergency_scrapheap.dmm +#_maps/shuttles/emergency_supermatter.dmm +#_maps/shuttles/emergency_wabbajack.dmm diff --git a/html/changelog.css b/html/changelog.css index a287f98c57..b83a8d4f56 100644 --- a/html/changelog.css +++ b/html/changelog.css @@ -20,6 +20,7 @@ a img {border:none;} .imagedel {background-image:url(image-minus.png)} .spellcheck {background-image:url(spell-check.png)} .experiment {background-image:url(burn-exclamation.png)} +.balance {background-image:url(scales.png)} .sansserif {font-family:Tahoma,sans-serif;font-size:12px;} .commit {margin-bottom:20px;font-size:100%;font-weight:normal;} .changes {list-style:none;margin:5px 0;padding:0 0 0 25px;font-size:0.8em;} diff --git a/html/changelog.html b/html/changelog.html index 270dd0e880..d5207ba9cf 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,1503 @@ -->
    +

    07 April 2017

    +

    Qbopper updated:

    +
      +
    • Secure lockers will no longer have multiple lines about being broken.
    • +
    + +

    05 April 2017

    +

    Cyberboss updated:

    +
      +
    • Cardboard boxes and bodybags can no longer be anchored
    • +
    +

    Penguaro updated:

    +
      +
    • [Box] A fire alarm has been added to the Lawyer's office.
    • +
    • [Box] Adds access for Scientists to Starboard Maintenance Areas outside of Toxins.
    • +
    • [Box] Adjusted Science doors to more logical access codes.
    • +
    +

    QV updated:

    +
      +
    • Fixed taking max suffocation damage whenever oxygen was slightly low
    • +
    +

    RemieRichards updated:

    +
      +
    • Using TK on the supermatter will burn your head off violently, don't do this.
    • +
    • Examining clothing with pockets will now give information about the pockets: number of slots, how it is interacted with (backpack, etc.), if it has quickdraw (Alt-Click) support and whether or not it is silent to interact with.
    • +
    +

    coiax updated:

    +
      +
    • Emergency shuttles will now forget early launch authorizations if they cannot launch due to a hostile environment.
    • +
    + +

    02 April 2017

    +

    BeeSting12 updated:

    +
      +
    • Metastation's northeast radiation collector is now connected to the grid. Nanotrasen would like to apologize for any inconvenience caused to engineers, but copper is expensive.
    • +
    • Boxstation's HoP office now has a PDA tech.
    • +
    +

    Cyberboss updated:

    +
      +
    • Firedoors no longer operate automatically without power
    • +
    • Blood and other decals will no longer remain on turfs they shouldn't
    • +
    • The splashscreen is working again
    • +
    • False alarms are now guaranteed to actually announce something
    • +
    +

    Incoming5643 updated:

    +
      +
    • Lighting visuals have been changed slightly to reduce it's cost to the client. If you had trouble running the new lighting, it might run a little better now.
    • +
    +

    MMMiracles (CereStation) updated:

    +
      +
    • Added a patrol path for bots, includes 2 round-start securitrons placed on opposite sites of station.
    • +
    • Due to map size, mulebots are still somewhat unreliable on longer distances. Disposals are still advised, but mule bots are now technically an option for delivery.
    • +
    • Added multiple status displays, extinguishers, and appropriate newscasters to hallways.
    • +
    • A drone dispenser is now located underneath Engineering in maintenance.
    • +
    • Each security checkpoint now has a disposal chute that directs to a waiting cell in the Brig for rapid processing of criminals. Why run half-way across the station with some petty thief when you can just shove him in the criminal chute and have the warden deal with him?
    • +
    • Security's mail chute no longer leads into the armory. This was probably not the best idea in hindsight.
    • +
    • Virology has a bathroom now.
    • +
    • Genetics monkey pen is a bit more green now.
    • +
    • Lawyer now has access the brig cells so he can complain more effectively.
    • +
    • Xenobio kill chamber is now in range of a camera.
    • +
    • Removed rogue bits of Vault area.
    • +
    • Medbay escape pod no longer juts out far enough to block the disposal's path.
    • +
    • Captain's spare ID is now real and not just a gold ID card.
    • +
    +

    Penguaro updated:

    +
      +
    • [Meta] The Chapel Security Hatches were very intimidating. They have been changed to more inviting glass doors.
    • +
    • [Meta] The maintenance tunnels in the Xeno Lab now have radiation shielding. The Slime Euthanization Chamber will not have radiation shielding at this time as dead slimes will not mind radiation.
    • +
    +

    coiax updated:

    +
      +
    • Adds seperate languages to the game. Now Ratvarian, Drone, Machine, Swarmer, Human (now called Galactic Common), Slime and Monkey are separate languages. Each languages has its own comma prefix, for example, Galcom has the ,0 prefix, while Ratvarian has the ,r prefix. If you don't understand a language when it is spoken to you, you will hear a scrambled version that will vary depending on the language that you're not understanding.
    • +
    • This does not change who can understand what.
    • +
    • Removed the talk wheel feature.
    • +
    • Clicking the speech bubble icon now opens the Language Menu, allowing you to review which languages you speak, their keys, and letting you set which language you speak by default. Admins have additional abilities to add and remove languages from mobs using this menu.
    • +
    +

    ktccd updated:

    +
      +
    • Ninja suits have received a new software update, making them able to **actually steal tech levels** from R&D consoles and servers, thus avoid being forced to honourably kill themselves for failing their objective.
    • +
    + +

    01 April 2017

    +

    Cyberboss updated:

    +
      +
    • The contents of the shelterpod smart fridge work again
    • +
    +

    XDTM updated:

    +
      +
    • Facehuggers no longer rip masks from people protected by helmets.
    • +
    + +

    31 March 2017

    +

    Cobby updated:

    +
      +
    • Shot glasses are now more ambiguous [EASIER TO MAINTAIN]
    • +
    +

    Cyberboss updated:

    +
      +
    • Temperature changes will now properly cause atmospherics simulation to activate
    • +
    • The command report for random xeno eggs will now be delivered along with the rest of the roundstart reports
    • +
    • Drones can no longer be irradiated
    • +
    + +

    30 March 2017

    +

    coiax updated:

    +
      +
    • Autoimplanters have been renamed to autosurgeons. Currently only the CMO and nuclear operatives have access to autosurgeons. What is the CMO hiding?
    • +
    • All upgraded organs for purchase by nuclear operatives now actually come in an autosurgeon, for speed of surgery.
    • +
    + +

    29 March 2017

    +

    BeeSting12 updated:

    +
      +
    • Adds emergency launch console to the backup emergency shuttle.
    • +
    +

    Joan updated:

    +
      +
    • Putting sec armour and a helmet on a corgi no longer makes the corgi immune to item attacks.
    • +
    • All items with armour will now grant corgis actual armour.
    • +
    +

    Kevinz000 updated:

    +
      +
    • High-powered floodlights may be constructed with 5 sheets of metal, a wrench, a screwdriver, 5 cable coils, and a light tube. They require a powernet connection via direct wire node.
    • +
    +

    coiax updated:

    +
      +
    • All tophats, rather than just the ones in maintenance, hurt a tiny bit if you throw them at people.
    • +
    • Supermatter anomalies are more shortlived than regular anomalies, as intended.
    • +
    + +

    28 March 2017

    +

    Supermichael777 updated:

    +
      +
    • Backup operatives now get the nukes code.
    • +
    +

    XDTM updated:

    +
      +
    • Wooden tiles can now be quick-replaced with a screwdriver instead of a crowbar, preserving the floor tile.
    • +
    +

    octareenroon91 updated:

    +
      +
    • Bonfires that have a metal rod added should buckle instead of runtiming.
    • +
    + +

    26 March 2017

    +

    BeeSting12 updated:

    +
      +
    • The bar shuttle's buckable bar stools are now buckleable bar stools.
    • +
    +

    Gun Hog and Shadowlight213 updated:

    +
      +
    • The AI may now deploy to cyborgs prepared as AI shells. The module to do this may be research in the exosuit fabricator. Simply slot the module into a completed cyborg frame as with an MMI, or into a playerless (with no ckey) cyborg.
    • +
    • AI shells and AIs controlling a shell can be determined through the Diagnostic HUD.
    • +
    • AIs can deploy to a shell using the new action buttons or by simply clicking on it.
    • +
    • An AI shell will always have the laws of its controlling AI.
    • +
    +

    Penguaro updated:

    +
      +
    • Brig - Added Air Alarm
    • +
    • Engineering - Removed Brig Shutter
    • +
    • Omega, Meta, & Delta Stations - The Vents and Scrubbers for the Supermatter Air Alarm are now isolated from the rest of the Air Alarms in Engineering.
    • +
    +

    Qbopper updated:

    +
      +
    • Drones are now given OOC guidelines to follow as well as their IC lawset.
    • +
    +

    Robustin updated:

    +
      +
    • Added the prototype canister with expanded volume, valve pressure, and access/timer features
    • +
    +

    TrustyGun updated:

    +
      +
    • Deconstructing display cases and coffins now drop the correct amount of wood.
    • +
    +

    XDTM updated:

    +
      +
    • Some golems now spawn with more thematic names.
    • +
    • Adamantine Golems are no longer numbered, but receive a random golem name.
    • +
    • Airlocks properly remove the shock overlay when a temporary shock runs out.
    • +
    +

    coiax updated:

    +
      +
    • Teams playing CTF have their own radio channels, rather than using the Centcom and Syndicate channels.
    • +
    • Actually actually makes CTF barricades repair between rounds.
    • +
    • Blue CTF lasers have little blue effects when they hit things, rather than red effects.
    • +
    + +

    24 March 2017

    +

    BeeSting12 updated:

    +
      +
    • Auxiliary base maintenance airlock now requires the proper access. Sorry greyshirts, no loot for you!
    • +
    +

    Cyberboss updated:

    +
      +
    • The recycler's base reclaim rate has been buffed from 1% to 50%. Manipulator upgrades now give +12.5% per level instead of +25%
    • +
    • You can now successfully remove a pen from a PDA while it's in a container
    • +
    +

    Fox McCloud updated:

    +
      +
    • Modular receiver removed from the protolathe to autolathe
    • +
    • Modular receiver cost is now 15,000 metal
    • +
    +

    Joan updated:

    +
      +
    • Fixes structures being unable to go through spatial gateways.
    • +
    • Blazing Oil blobs take 33% less damage from water.
    • +
    +

    Penguaro updated:

    +
      +
    • [Meta] Replaced Power Monitoring Console in Engineering with Modular Engineering Console
    • +
    • [Pubby] Replaced Power Monitoring Console in Engineering with Modular Engineering Console
    • +
    • [Omega] Replaced Power Monitoring Console in Engineering with Modular Engineering Console
    • +
    • [Omega] Added RD and Command Modular Consoles to Bridge
    • +
    • [Delta] Replaced Power Monitoring Console in Engineering with Modular Engineering Console
    • +
    • [Delta] Replaced duplicate Atmospherics Monitoring Console in Atmo with Modular Engineering Console
    • +
    +

    coiax updated:

    +
      +
    • Destroying a lich's body does not destroy the lich permanently, provided the phylactery is intact.
    • +
    • A lich will respawn three minutes after its death, provided the phylactery is intact.
    • +
    • The Soul Bind spell is forgotten after cast, respawn is now automatic.
    • +
    • Stationloving objects like the nuke disk are not valid objects for a phylactery.
    • +
    • Explosive implants can always be triggered via action button, even if unconscious.
    • +
    +

    rock updated:

    +
      +
    • lizards are hurt slightly more by cold but less by heat. this does not mean they are more resistant to being lasered, fortunately.
    • +
    + +

    23 March 2017

    +

    Joan updated:

    +
      +
    • Clock cults always have to summon Ratvar, but that always involves a proselytization burst.
    • +
    • The proselytization burst will no longer convert heretics, leaving Ratvar free to chase them down.
    • +
    • Places that referred to the Ark of the Clockwork Justicar as the "Gateway to the Celestial Derelict" have been corrected to always refer to the Ark.
    • +
    +

    Penguaro updated:

    +
      +
    • Wizard Ship - Bolts that floating light to the wall.
    • +
    +

    XDTM updated:

    +
      +
    • Medical Gauze now stacks up to 12
    • +
    • Pressure plates are now craftable.
    • +
    +

    bgobandit updated:

    +
      +
    • Alt-clicking a command headset toggles HIGH VOLUME mode.
    • +
    +

    coiax updated:

    +
      +
    • A dead AI no longer counts as an "unconverted AI" for clockcult.
    • +
    + +

    22 March 2017

    +

    BeeSting12 updated:

    +
      +
    • Added an autolathe circuit board to deltastation's tech storage.
    • +
    • Added 49 sheets of metal to deltastation's auxiliary tool storage.
    • +
    +

    Iamgoofball updated:

    +
      +
    • Freon no longer bypasses atmos hardsuits.
    • +
    +

    Penguaro updated:

    +
      +
    • Meta - Added Tool Belts to Engineering and Engineering Foyer
    • +
    • Meta - Removed Coffee Machine from Permabrig
    • +
    • Added Cameras for Supermatter Chamber (to view rad collectors and crystal)
    • +
    • Adjusted Engine Camera Names for Station Consistency
    • +
    • Adjusted Monitor Names / Networks to view the Engine Cameras
    • +
    +

    coiax updated:

    +
      +
    • APCs now glow faintly with their charging lights. So red is not charging, blue is charging, green is full. Emagged APCs are also blue. Broken APCs do not emit light.
    • +
    • Alien glowing resin now glows.
    • +
    + +

    21 March 2017

    +

    ExcessiveUseOfCobblestone updated:

    +
      +
    • All core traits [Hydroponics] scale with the parts in the gene machine. Time to beg Duke's Guide Read.... I mean RND!
    • +
    • Data disks with genes on them will have just the name of the gene instead of the prefix "plant data disk".
    • +
    • If you were unaware, you can rename these disks with a pen. Now, you can also change the description if you felt inclined to.
    • +
    +

    Joan updated:

    +
      +
    • Caches produce components every 70 seconds, from every 90, but each other linked, component-producing cache slows down cache generation by 10 seconds.
    • +
    +

    Lombardo2 updated:

    +
      +
    • The tentacle changeling mutation now changes the arm appearance when activated.
    • +
    +

    MrPerson updated:

    +
      +
    • Everyone's eyes aren't white anymore.
    • +
    +

    Penguaro updated:

    +
      +
    • Box Station - The Vents and Scrubbers for the Supermatter Air Alarm are now isolated from the rest of the Air Alarms in Engineering.
    • +
    +

    Supermichael777 updated:

    +
      +
    • Chasms now smooth properly.
    • +
    +

    Tokiko1 updated:

    +
      +
    • Minor supermatter balancing changes.
    • +
    • Supermatter now announces its damage half as frequently.
    • +
    • Badly unstable supermatter now occasionally zaps nearby engineers and causes anomalies to appear nearby, similar to overcharged supermatter.
    • +
    +

    XDTM updated:

    +
      +
    • Golem Shells can now be completed with medical gauze or cloth to form cloth golems, which are weaker and extremely flammable. However, if they die, they turn into a pile of cloth that will eventually re-animate back into full health. That is, unless someone lights it on fire.
    • +
    + +

    19 March 2017

    +

    BeeSting12 updated:

    +
      +
    • Nanotrasen has decided to better equip the box-class emergency shuttles with a recharger on a table in the cockpit.
    • +
    +

    Cheridan updated:

    +
      +
    • The slime created by a pyroclastic anomaly detonating is now adult and player-controlled! Reminder that if you see an anomaly alert, you should grab an analyzer and head to the announced location to scan it, and then signal the given frequency on a signaller!
    • +
    +

    Penguaro updated:

    +
      +
    • change access variables for turrets and shield gens
    • +
    • Box Station - Replaces the smiling table grilles with their more serious counterparts.
    • +
    +

    coiax updated:

    +
      +
    • The Syndicate lavaland base now has a single self destruct bomb located next to the Communications Room. Guaranteed destruction of the base is guaranteed by payloads embedded in the walls.
    • +
    +

    octareenroon91 updated:

    +
      +
    • Fixes infinite vaping bug.
    • +
    +

    uraniummeltdown updated:

    +
      +
    • Plant data disks have new sprites.
    • +
    • Fixed Monkey Recycler board not showing in Circuit Imprinter
    • +
    • Kinetic Accelerator Range Mod now takes up 25% space instead of 24%
    • +
    + +

    18 March 2017

    +

    Supermichael777 updated:

    +
      +
    • Free golems can now buy new ids for 250 points.
    • +
    +

    XDTM updated:

    +
      +
    • You can now complete a golem shell with runed metal, if you somehow manage to get both.
    • +
    • Runic golems don't have passive bonuses over golems, but they have some special abilities.
    • +
    +

    coiax updated:

    +
      +
    • The alert level is no longer lowered by a nuke's detonation.
    • +
    + +

    17 March 2017

    +

    BeeSting12 updated:

    +
      +
    • Moved Metastation's deep fryer so that the chef can walk all the way around the table.
    • +
    +

    Cobby updated:

    +
      +
    • The gulag mineral ratio has been tweaked so there are PLENTY of iron ore, nice bits of silver/plasma, with the negative of having less really high valued ores. If you need minerals, it may be a good time to ask the warden now!
    • +
    +

    Joan updated:

    +
      +
    • You can now place lights and most wall objects on shuttles.
    • +
    +

    Xhuis updated:

    +
      +
    • Added the power flow control console, which allows remote manipulation of most APCs on the z-level. You can find them in the Chief Engineer's office on all maps.
    • +
    + +

    16 March 2017

    +

    BASILMAN YOUR MAIN MAN updated:

    +
      +
    • The BM Speedwagon has been improved both in terms of aesthetics and performance!
    • +
    +

    Cyberboss updated:

    +
      +
    • The shield generators in Boxstation Xenobiology now have the correct access
    • +
    +

    Joan updated:

    +
      +
    • Cult structures that emitted light now have colored light.
    • +
    +

    MrPerson updated:

    +
      +
    • Humans can see in darkness slightly again. This is only so you can see where you are when the lights go out.
    • +
    +

    MrStonedOne updated:

    +
      +
    • Fixed lighting not updating when a opaque object was deleted
    • +
    +

    Penguaro updated:

    +
      +
    • Increased Synchronization Range on Exosuit Fabricator
    • +
    +

    Tofa01 updated:

    +
      +
    • [Delta] Fixes telecoms temperature and gas mixing / being contaminated.
    • +
    • [Delta] Fixes some doubled up turfs causing items and objects to get stuck to stuff
    • +
    • [Omega] Makes telecoms room cool down and be cold.
    • +
    +

    Tokiko1 updated:

    +
      +
    • Most gases now have unique effects when surrounding the supermatter crystal.
    • +
    • The supermatter crystal can now take damage from too much energy and too much gas.
    • +
    • Added a dangerous overcharged state to the supermatter crystal.
    • +
    • Readded explosion delaminations, a new tesla delamination and allowed the singulo delamination to absorb the supermatter.
    • +
    • The type of delamination now depends on the state of the supermatter crystal.
    • +
    • Various supermatter engine rebalancing and fixes.
    • +
    +

    kevinz000 updated:

    +
      +
    • SDQL2 now supports outputting proccalls to variables, and associative lists
    • +
    +

    peoplearestrange updated:

    +
      +
    • Fixed buildmodes full tile window to be correct path
    • +
    +

    rock updated:

    +
      +
    • if we can have glowsticks in toolvends why not flashlights amirite guys
    • +
    + +

    15 March 2017

    +

    Cyberboss updated:

    +
      +
    • You can no longer depart on the arrivals shuttle by hiding inside things
    • +
    +

    Joan updated:

    +
      +
    • Proselytizers converting clockwork floors to walls now always take 10 seconds, regardless of how fast the proselytizer is.
    • +
    • Clockwork grilles no longer provide CV.
    • +
    +

    Penguaro updated:

    +
      +
    • **Engineering** - Changed Access Level from **24** (_Atmo_) to **10** (_Engine_) on **Radiation Shutter Control**
    • +
    +

    TrustyGun updated:

    +
      +
    • Traitor Mimes with the finger guns spell now fire 3 bullets at a time, as opposed to just 1.
    • +
    +

    octareenroon91 updated:

    +
      +
    • Allow new reflector frames to be built from metal sheets.
    • +
    +

    oranges updated:

    +
      +
    • Removed patting
    • +
    + +

    14 March 2017

    +

    Joan updated:

    +
      +
    • Shuttles now have dynamic lighting; you can remove the lights on them and use your own lights.
    • +
    • All maps now use Deltastation's fancy syndicate shuttle.
    • +
    • Shadowshrooms of lower potency are much less able to blanket the station in darkness.
    • +
    +

    PKPenguin321 updated:

    +
      +
    • Lattices now require wirecutters to deconstruct, rather than welding tools.
    • +
    + +

    13 March 2017

    +

    Cyberboss updated:

    +
      +
    • You must now be on any intent EXCEPT help to weld an airlock shut
    • +
    • You can now repair airlocks with welding tools on help intent (broken airlocks still need their wires mended though)
    • +
    +

    Cyberboss, Bgobandit, and Yogstation updated:

    +
      +
    • The HoP can now prioritze roles for late-joiners
    • +
    +

    Every coder, player, and admin in Space Station 13 updated:

    +
      +
    • Adds the Tomb Of The Unknown Employee to Central Command,
    • +
    • Rest in peace, those who died after contributing to Space Station 13.
    • +
    +

    Hyena updated:

    +
      +
    • Surplus leg r/l name fixed
    • +
    • You can now carry honey in plant bags
    • +
    +

    Lordpidey updated:

    +
      +
    • Devils can no longer break into areas with sheer force of disco funk
    • +
    • The pitchfork of an ascended devil can now break down walls.
    • +
    • Hell has decided to at least clothe it's devils when sending them a brand new body.
    • +
    • Pitchforks glow red now.
    • +
    +

    Penguaro updated:

    +
      +
    • **Engineering** - Removed Tables, paper bin, and pen
    • +
    • **Engineering** - Replaced with Welder and Electrical Lockers
    • +
    • **Engineering** - Moved First-Aid Burn kit to Engineering Foyer
    • +
    • **Chapel** - Replaced one Window with Win-Door for Coffin Storage
    • +
    +

    Space Bicycle Consortium updated:

    +
      +
    • Bicycles now only cost 10,000 yen, down from 1,000,000 yen.
    • +
    +

    coiax updated:

    +
      +
    • The egg spawner on Metastation will generate a station message and inform the admins if an egg is spawned. (It's only a two percent chance, but live in hope.)
    • +
    • Glowsticks can now be found in "Swarmer Cyan" colors.
    • +
    + +

    12 March 2017

    +

    JStheguy updated:

    +
      +
    • Changed Desert Eagle sprites, changed .50 AE magazine sprites, added Desert Eagle magazine overlay to icons/obj/guns/projectile.dmi.
    • +
    • The empty Desert Eagle sprite now only displays on an empty chamber. The existence or lack thereof of the magazine is rendered using an overlay instead.
    • +
    +

    Lzimann updated:

    +
      +
    • Braindead has a more intuitive message
    • +
    +

    coiax updated:

    +
      +
    • A cloner that is EMP'd will merely eject the clone early, rather than gibbing it. Emagging the cloner will still gib the clone.
    • +
    + +

    11 March 2017

    +

    AnturK updated:

    +
      +
    • Traitors now have access to radio jammers for 10 TC
    • +
    +

    Hyena updated:

    +
      +
    • fixes anti toxin pill naming
    • +
    +

    Joan updated:

    +
      +
    • Window construction steps are slightly faster; normal windows now take 6 seconds with standard tools, from 7 and reinforced windows now take 12 seconds with standard tools, from 14.
    • +
    • Brass windows take 8 seconds with standard tools, from 7.
    • +
    • Added Shadowshrooms as a glowshroom mutation. They do exactly what you'd expect.
    • +
    • Removed His Grace ascension.
    • +
    +

    PKPenguin321 updated:

    +
      +
    • Cryoxadone's ability to heal cloneloss has been greatly reduced.
    • +
    • Clonexadone has been readded. It functions exactly like cryoxadone, but only heals cloneloss, and at a decent rate. Brew it with 1 part cryoxadone, 1 part sodium, and 5 units of plasma for a catalyst.
    • +
    +

    Penguaro updated:

    +
      +
    • Adjusted table locations
    • +
    • Moved chair and Cargo Tech start location
    • +
    • Moved filing cabinet
    • +
    • Removed Stock Computer
    • +
    +

    Tofa01 updated:

    +
      +
    • [Meta] Fixes Supermatter Shutters Not Working
    • +
    +

    coiax updated:

    +
      +
    • Swarmer lights are coloured cyan.
    • +
    +

    kevinz000 updated:

    +
      +
    • Deadchat no longer has huge amount of F's.
    • +
    + +

    10 March 2017

    +

    Cyberboss updated:

    +
      +
    • You should no longer be seeing entities with `\improper` in front of their name
    • +
    • The arrivals shuttle will now ferry new arrivals to the station. It will not depart if any intelligent living being is on board. It will remain docked if it is depressurized.
    • +
    • You now late-join spawn buckled to arrivals shuttle chairs
    • +
    • Ghost spawn points have been moved to the center of the station
    • +
    • Departing shuttles will now try and shut their docking airlocks
    • +
    • The arrivals shuttle airlocks are now properly cycle-linked
    • +
    • You can now hear hyperspace sounds outside of shuttles
    • +
    • The map loader is faster
    • +
    • Lavaland will now load instantly when the game starts
    • +
    +

    Jordie0608 updated:

    +
      +
    • The Banning Panel now organises search results into pages of 15 each.
    • +
    +

    XDTM updated:

    +
      +
    • Slimes can now properly latch onto humans.
    • +
    • Slimes won't aggro neutral mobs anymore. This includes blood-spawned gold slime mobs.
    • +
    • Clicking on a tile with another tile and a crowbar in hand directly replaces the tile.
    • +
    +

    Xhuis updated:

    +
      +
    • Ratvar and Nar-Sie now have fancy colored lighting!
    • +
    +

    coiax updated:

    +
      +
    • Wizards can now use their magic to make ghosts visible to haunt the crew, and possibly attempt to betray the wizard.
    • +
    • When someone dies, if their body is no longer present, the (F) link will instead jump to the turf they previously occupied.
    • +
    • Stacks of materials will automatically merge together when created. You may notice differences when ejecting metal, glass or using the cash machine in the vault.
    • +
    • You can find green and red glowsticks in YouTool vending machines.
    • +
    +

    fludd12 updated:

    +
      +
    • Modifying/deconstructing skateboards while riding them no longer nails you to the sky.
    • +
    +

    lordpidey updated:

    +
      +
    • Glitter bombs have been added to arcade prizes.
    • +
    + +

    08 March 2017

    +

    Cyberboss updated:

    +
      +
    • Added roundstart animation
    • +
    • Roundstart should now be a smoother experience... again
    • +
    • You can now scan storage items with the forensic scanner
    • +
    • Unfolding paper planes no longer deletes them
    • +
    • Plastic no longer conducts electricity
    • +
    • The map rotation message will only show if the map is actually changing
    • +
    +

    Francinum updated:

    +
      +
    • Holopads now require power.
    • +
    +

    Fun Police updated:

    +
      +
    • Reject Adminhelp and IC Issue buttons have a cooldown.
    • +
    +

    Joan updated:

    +
      +
    • Circuit tiles now glow faintly.
    • +
    • Glowshrooms now have colored light.
    • +
    • Tweaked the potency scaling for glowshroom/glowberry light; high-potency plantss no longer light up a huge area, but are slightly brighter.
    • +
    +

    Kor updated:

    +
      +
    • People with mutant parts (cat ears) are no longer outright barred from selecting command roles in their preferences, but will have their mutant parts removed on spawning if they are selected for that role.
    • +
    +

    LanCartwright updated:

    +
      +
    • Adds scaling damage to buckshot.
    • +
    +

    Robustin updated:

    +
      +
    • The DNA Vault has 2 new powers
    • +
    • The DNA Vault requires super capacitors instead of quadratic
    • +
    • Cargo's Vault Pack now includes DNA probes
    • +
    +

    Supermichael777 updated:

    +
      +
    • Robust Soft Drinks LLC is proud to announce Premium canned air for select markets. There is not an air shortage. Robust Soft Drinks has never engaged in any form of profiteering.
    • +
    +

    TalkingCactus updated:

    +
      +
    • Energy swords (and other energy melee weapons) now have a colored light effect when active.
    • +
    +

    Tofa01 updated:

    +
      +
    • [All Maps] Fixes syndicate shuttles spawning too close to stations by moving their spawn further from the station
    • +
    • [Omegastation] This station now has a syndicate shuttle and syndicate shuttle spawn.
    • +
    +

    coiax updated:

    +
      +
    • Wizards now have a new spell "The Traps" in their spellbook. Summon an array of temporary and permanent hazards for your foes, but don't fall into your own trap(s)!
    • +
    • Permanent wizard traps can be triggered relatively safely by throwing objects across the trap, or examining it at close range. The trap will then be on cooldown for a minute.
    • +
    • Toy magic eightballs can now be found around the station in maintenance and arcade machines. Ask your question aloud, and then shake for guidance.
    • +
    • Adds new Librarian traitor item, the Haunted Magic Eightball. Although identical in appearance to the harmless toys, this occult device reaches into the spirit world to find its answers. Be warned, that spirits are often capricious or just little assholes.
    • +
    • You only have a headache looking at the supermatter if you're a human without mesons.
    • +
    • The supermatter now speaks in a robotic fashion.
    • +
    • Admins have a "Rename Station Name" option, under Secrets.
    • +
    • A special admin station charter exists, that has unlimited uses and can be used at any time.
    • +
    • Added glowsticks. Found in maintenance, emergency toolboxes and Party Crates.
    • +
    +

    kevinz000 updated:

    +
      +
    • The Syndicate reports a breakthrough in chameleon laser gun technology that will disguise its projectiles to be just like the real thing!
    • +
    + +

    07 March 2017

    +

    Supermichael777 updated:

    +
      +
    • Wannabe ninjas have been found carrying an experimental chameleon belt. The Spider clan has disavowed any involvement.
    • +
    + +

    06 March 2017

    +

    Cyberboss updated:

    +
      +
    • Map rotation has been made smoother
    • +
    +

    Gun Hog updated:

    +
      +
    • The Aux Base Construction Console now directs to the correct Base Management Console.
    • +
    • The missing Science Department access has been added to the Auxiliary Base Management Console.
    • +
    +

    Hyena updated:

    +
      +
    • Space bar is out of bussiness
    • +
    +

    MrStonedOne updated:

    +
      +
    • patched a hacky workaround for /vg/lights memory leaking crashing the server
    • +
    +

    Penguaro updated:

    +
      +
    • Changed DIR of Gas Filter for O2 in Waste Loop from 1 to 4
    • +
    +

    Sligneris updated:

    +
      +
    • 'xeno queen' AI hologram now actually uses the xeno queen sprite as a reference
    • +
    +

    Tofa01 updated:

    +
      +
    • [Omega] Fixes missing walls and wires new dock to the powergrid
    • +
    +

    XDTM updated:

    +
      +
    • Changelings can now click their fake clothing to remove it, without needing to drop the full disguise.
    • +
    +

    coiax updated:

    +
      +
    • The Bardrone and Barmaid are neutral, even in the face of reality altering elder gods.
    • +
    + +

    04 March 2017

    +

    Cyberboss updated:

    +
      +
    • You can build lattice in space again
    • +
    +

    Hyena updated:

    +
      +
    • Detective revolver/ammo now starts in their shoulder holster
    • +
    +

    Joan updated:

    +
      +
    • Weaker cult talismans take less time to imbue.
    • +
    +

    PJB3005 updated:

    +
      +
    • Rebased to /vg/station lighting code.
    • +
    +

    Supermichael777 updated:

    +
      +
    • Grey security uniforms have unique names and descriptions
    • +
    +

    Tofa01 updated:

    +
      +
    • Adds the new Centcomm Raven Battlecruiser to the purchasable shuttle list buy now get one free!
    • +
    +

    coiax updated:

    +
      +
    • CTF players start with their helmet toggled off, better to see the whites of their opponents eyes. Very briefly.
    • +
    • Existing CTF barricades are repaired between rounds, and deploy instantly when replaced.
    • +
    • Healing non-critical CTF damage is faster. Remember though, if you drop into crit, YOU DIE.
    • +
    • Admin ghosts can just click directly on the CTF controller to enable them, in addition to using the Secrets panel.
    • +
    • Cyborg radios can no longer have their inaccessible wires pulsed by EMPs.
    • +
    + +

    03 March 2017

    +

    Cyberboss updated:

    +
      +
    • You can now repair shuttles in transit space
    • +
    +

    Incoming5643 updated:

    +
      +
    • Server Owners: There is a new system for title screens accessible from config/title_screen folder.
    • +
    • This system allows for multiple rotating title screens as well as map specific title screens.
    • +
    • It also allows for hosting title screens in formats other than DMI.
    • +
    • See the readme.txt in config/title_screen for full details. remove: The previous method of title screen selection, the define TITLESCREEN, has been depreciated by this change.
    • +
    +

    Sligneris updated:

    +
      +
    • Updated sprites for the small xeno queen mode
    • +
    + +

    02 March 2017

    +

    Gun Hog updated:

    +
      +
    • Advanced camera, Slime Management, and Base Construction consoles may now be operated by drones and cyborgs.
    • +
    +

    Robustin updated:

    +
      +
    • The syndicate power beacon will now announce the distance and direction of any engines every 10 seconds.
    • +
    +

    Steelpoint updated:

    +
      +
    • Robotics and Mech Bay have seen a mapping overhaul on Boxstation.
    • +
    • A cautery surgical tool has been added to the Robotics surgical area on Boxstation.
    • +
    +

    XDTM updated:

    +
      +
    • Hallucinations have been modified to increase the creepiness factor and reduce the boring factor.
    • +
    • Added some new hallucinations.
    • +
    • Fixed a bug where the singularity hallucination was stunning for longer than intended and leaving the fake HUD crit icon permanently.
    • +
    +

    coiax updated:

    +
      +
    • Ghosts are polled if they want to play an alien larva that is about to chestburst. They are also told who is the (un)lucky victim.
    • +
    • Clones no longer gasp for air while in cloning pods.
    • +
    • Adds a new reagent, "Mime's Bane", that prevents all emoting while it is in a victim's system. Currently admin only.
    • +
    • Mappers now have an easier time adding posters, and specifying whether they're random, random official, random contraband or a specific poster.
    • +
    • Posters no longer have serial numbers when rolled up; their names are visible instead.
    • +
    +

    kevinz000 updated:

    +
      +
    • You can now craft pressure plates.
    • +
    • Pressure plates are hidden under the floor like smuggler satchels are, but you can attach a signaller to them to have it signal when a mob passes over them!
    • +
    • Bomb armor is now effective in lessening the chance of being knocked out by bombs.
    • +
    + +

    01 March 2017

    +

    Cyberboss updated:

    +
      +
    • Lobby music is no longer delayed
    • +
    + +

    28 February 2017

    +

    Cyberboss updated:

    +
      +
    • You will no longer be shown empty memories when the game starts
    • +
    • Built APCs now work again
    • +
    • Borg AI cameras now work again
    • +
    +

    Joan updated:

    +
      +
    • Anima Fragments now slam into non-Servants when bumping. This will ONLY happen if the fragment is not slowed, and slamming into someone will slightly damage the fragment and slow it severely.
    • +
    +

    Lzimann updated:

    +
      +
    • Communications console can also check the ID the user is wearing.
    • +
    +

    Supermichael777 updated:

    +
      +
    • The button now has a five second delay when detonating bombs
    • +
    +

    XDTM updated:

    +
      +
    • You can now change the input/output directons for Ore Redemption Machines by using a multitool on them with the panel open.
    • +
    • Diagnostic HUDs can now see if airlocks are shocked.
    • +
    + +

    27 February 2017

    +

    Kor, Jordie0608 and Tokiko1 updated:

    +
      +
    • Singularity containment has been replaced on box, meta, and delta with a supermatter room. The supermatter gives ample warning when melting down, so hopefully we'll see fewer 15 minute rounds ended by a loose singularity.
    • +
    • Supermatter crystals now collapse into singularities when they fail, rather than explode.
    • +
    +

    Tofa01 updated:

    +
      +
    • Stops AI And Borgs From Interfacing With Ferry Console
    • +
    +

    TrustyGun updated:

    +
      +
    • Box sprites are improved.
    • +
    +

    WJohnston updated:

    +
      +
    • New and improved BRPED beam. The old one was hideous.
    • +
    +

    coiax updated:

    +
      +
    • Drone shells are now points of interest in the orbit list.
    • +
    • Derelict drone shells now spawn with appropriate headgear.
    • +
    + +

    26 February 2017

    +

    Ausops updated:

    +
      +
    • New sprites for water, fuel and hydroponics tanks.
    • +
    +

    Joan updated:

    +
      +
    • Clockwork objects are overall easier to deconstruct:
    • +
    • Clockwork Walls now take 33% less time to slice through, Brass Windows now work like non-reinforced windows, and Pinion Airlocks now have less health and only two steps to decon(wrench, then crowbar).
    • +
    • EMPing Pinion Airlocks and Brass Windoors now has a high chance to open them and will not shock or bolt them.
    • +
    • Anima fragments will very gradually self-repair.
    • +
    +

    Tofa01 updated:

    +
      +
    • [Omega] Fixes ORM input and output directions
    • +
    • Fixes space bar kitchen freezer access level
    • +
    • Fixes giving IDs proper access for players who spawn on a ruin via a player sleeper/spawners
    • +
    • [Delta] Fixes varedited tiles causing tiles to appear as if they have no texture
    • +
    • Fixes robotic limb repair grammar issue
    • +
    + +

    25 February 2017

    +

    AnonymousNow updated:

    +
      +
    • Nerd Co. has sent pairs of thicker prescription glasses out to Nanotrasen stations, for your local geek to wear.
    • +
    +

    Basilman updated:

    +
      +
    • New box sprites
    • +
    +

    Robustin updated:

    +
      +
    • Hulks can no longer use pneumatic cannons or flamethrowers
    • +
    +

    Tofa01 updated:

    +
      +
    • [All Maps] The new and improved Centcom transportation ferry version 2.0 is out now!
    • +
    +

    coiax updated:

    +
      +
    • Cargo can now order plastic sheets to make plastic flaps. No doubt other uses for plastic will be discovered in the future.
    • +
    • To deconstruct plastic flaps, unscrew from the floor, then cut apart with wirecutters. Plastic flaps have examine tips like reinforced walls.
    • +
    +

    uraniummeltdown updated:

    +
      +
    • Science crates now have new sprites
    • +
    + +

    24 February 2017

    +

    MrStonedOne updated:

    +
      +
    • Limit on Mining Satchel of Holding Removed
    • +
    • Dumping/mass pickup/mass transfer of items is now lag checked
    • +
    • Dumping/mass pickup/mass transfer of items has a progress bar
    • +
    + +

    23 February 2017

    +

    Cyberboss updated:

    +
      +
    • Fixed a bug where the fire overlay wasn't getting removed from objects
    • +
    • The graphical delays with characters at roundstart are gone
    • +
    • The crew manifest is working again
    • +
    • Admins can now asay with ":p" and dsay with ":d"
    • +
    +

    Dannno updated:

    +
      +
    • Robust Softdrinks LLC. has sent out new vendies to the stendy.
    • +
    +

    Joan updated:

    +
      +
    • Off-station and carded AIs no longer prevent Judgement scripture from unlocking.
    • +
    +

    Nienhaus updated:

    +
      +
    • Updates ammo sprites to the new perspective.
    • +
    +

    Tofa01 updated:

    +
      +
    • Disables sound/frequency variance on cryo tube alert sound
    • +
    +

    coiax updated:

    +
      +
    • Nanotrasen reminds its employees that they have ALWAYS been able to taste. Anyone claiming that they've recently only just gained the ability to taste are probably Syndicate agents.
    • +
    + +

    22 February 2017

    +

    AnonymousNow updated:

    +
      +
    • Added Medical HUD Sunglasses. Not currently available on-station, unless you can convince Centcom to send you a pair.
    • +
    +

    Cyberboss updated:

    +
      +
    • Spawning to the station should now be a less hitchy experience
    • +
    +

    MrPerson updated:

    +
      +
    • Ion storms have several new additions:
    • +
    • 25% chance to flatly replace the AI's core lawset with something random in the config. Suddenly the AI is Corporate, deal w/ it.
    • +
    • 10% chance to delete one of the AI's core or supplied laws. Hope you treated the AI well without its precious law 1 to protect your sorry ass.
    • +
    • 10% chance that, instead of adding a random law, it will instead replace one of the AI's existing core or supplied laws with the ion law. Otherwise, it adds the generated law as normal. There's still a 100% chance of getting a generated ion law.
    • +
    • 10% chance afterwards to shuffle all the AI's laws.
    • +
    +

    TalkingCactus updated:

    +
      +
    • New characters will now have their backpack preference correctly set to "Department Backpack".
    • +
    +

    Tofa01 updated:

    +
      +
    • [Delta] Fixes missing R&D shutter near public autolathe
    • +
    +

    Xhuis updated:

    +
      +
    • Highlanders can no longer hide behind chairs and plants.
    • +
    • Highlanders no longer bleed and are no longer slowed down by damage.
    • +
    + +

    21 February 2017

    +

    Cyberboss updated:

    +
      +
    • You can now unshunt as a malfunctioning AI again
    • +
    +

    Kor updated:

    +
      +
    • You will now retain your facing when getting pushed by another mob.
    • +
    +

    Tofa01 updated:

    +
      +
    • [Z2] Fixed Centcomm shutters to have proper access levels for inspectors and other Admin given roles
    • +
    +

    coiax updated:

    +
      +
    • Refactors heart attack code, a cardiac arrest will knock someone unconscious and kill them very quickly.
    • +
    • Adds corazone, an anti-heart attack drug, made by mixing 2 parts Phenol, 1 part Lithium. A person with corazone in their system will not suffer any negative effects from missing a heart. Use it during surgery.
    • +
    • Abductor glands are now hearts, the abductor operation table now automatically injects corazone to prevent deaths during surgery. The gland will restart if it stops beating.
    • +
    • Cloning pods always know the name of the person they are cloning.
    • +
    • You can swipe a medical ID card to eject someone from the cloning pod early. The cloning pod will announce this over the radio.
    • +
    • Fresh clones have no organs or limbs, they gain them during the cloning process. Ejecting a clone too early is not recommended. Power loss will also eject a clone as before.
    • +
    • An ejected clone will take damage from being at critical health very quickly upon ejection, rather than before, where a clone could be stable in critical for up to two minutes.
    • +
    • Occupants of cloning pods do not interact with the air outside the pod.
    • +
    +

    uraniummeltdown updated:

    +
      +
    • All shuttle engines should now be facing the right way
    • +
    + +

    20 February 2017

    +

    Cyberboss updated:

    +
      +
    • The frequncy fire alarms play at is now consistent
    • +
    +

    MrStonedOne updated:

    +
      +
    • bluespace ore cap changed from 100 ores to 500
    • +
    +

    Tofa01 updated:

    +
      +
    • [Meta] Replaces orange jumpsuit in holding cell with prisoner jumpsuits
    • +
    +

    XDTM updated:

    +
      +
    • Repairing someone else's robotic limb is instant. Repairing your own robotic limbs will still take time.
    • +
    • Repairing limbs with cable or welding will now heal more.
    • +
    +

    Xhuis updated:

    +
      +
    • Medipens are no longer reusable.
    • +
    + +

    19 February 2017

    +

    Basilman updated:

    +
      +
    • some toolboxes, very rarely, have more than one latch
    • +
    +

    Joan updated:

    +
      +
    • You can now put components, and deposit components from slabs, directly into the Ark of the Clockwork Justicar provided it actually requires components.
    • +
    • Taunting Tirade now leaves a confusing and weakening trail instead of confusing and weakening everyone in view.
    • +
    • Invoking Inath-neq/Nzcrentr is now 33% cheaper and has a 33% lower cooldown.
    • +
    +

    Tofa01 updated:

    +
      +
    • [Delta] Removes SSU From Mining Equipment Room
    • +
    • Changes centcomm ferry to require centcomm general access instead of admin permission.
    • +
    +

    coiax updated:

    +
      +
    • Nuke ops syndicate cyborgs have been split into two seperate uplink items. Medical cyborgs now cost 35 TC, assault cyborgs now cost 65 TC.
    • +
    +

    grimreaperx15 updated:

    +
      +
    • Blood Cult Pylons will now rapidly regenerate any nearby cultists blood, in addition to the normal healing they do.
    • +
    +

    ma44 updated:

    +
      +
    • Intercepted messages from a lavaland syndicate base reveals they have additional grenade and other miscellaneous equipment.
    • +
    +

    uraniummeltdown updated:

    +
      +
    • Shuttle engines have new sprites.
    • +
    + +

    18 February 2017

    +

    Cyberboss updated:

    +
      +
    • New round end animation. Inspired by @Iamgoofball
    • +
    +

    Gun Hog updated:

    +
      +
    • The Aux Base console now controls turrets made by the construction console.
    • +
    • The Aux Base may now be dropped at a random location if miners fail to use the landing remote.
    • +
    • The mining shuttle may now dock at the Aux Base's spot once the base is dropped.
    • +
    • Removed access levels on the mining shuttle so it can be used at the public dock.
    • +
    • The Aux Base's turrets now fire through glass. Reminder that the turrets need to be installed outside the base for full damage.
    • +
    • Added a base construction console to Delta Station.
    • +
    +

    Mysterious Basilman updated:

    +
      +
    • More powerful toolboxes are active in this world...
    • +
    +

    Scoop updated:

    +
      +
    • Condimasters now correctly drop their items in front of their sprite.
    • +
    +

    Tofa01 updated:

    +
      +
    • Re-Arranges And Extends Pubby Escape Hallway To Allow Larger Shuttle To Dock
    • +
    • [Meta] Fixes top left grounding rod from being destroyed by the Tesla engine.
    • +
    +

    TrustyGun updated:

    +
      +
    • Traitor mimes can now learn two new spells for 15 tc.
    • +
    • The first, Invisible Blockade, creates a 3x1 invisible wall.
    • +
    • The second, Finger Guns, allows them to shoot bullets out of their fingers.
    • +
    +

    kevinz000 updated:

    +
      +
    • You can now ride piggyback on other human beings, as a human being! To do so they must grab you aggressively and you must climb on without outside assistance without being restrained or incapacitated in any manner. They must also not be restrained or incapacitated in any manner.
    • +
    • If someone is riding on you and you want them to get off, disarm them to instantly floor them for a few seconds! It's pretty rude, though.
    • +
    +

    rock updated:

    +
      +
    • you can now harmlessly slap somebody by aiming for the mouth on disarm intent.
    • +
    • you can only slap somebody who is unarmed on help intent, restrained, or ready to slap you.
    • +
    + +

    17 February 2017

    +

    Arianya updated:

    +
      +
    • The Labour Camp rivet wall has been removed!
    • +
    • Fixed some typos in Prison Ofitser's description.
    • +
    +

    Cobby updated:

    +
      +
    • Flashes have been rebalanced to be more powerful
    • +
    +

    Cyberboss updated:

    +
      +
    • Rack construction progress bars will no longer be spammed
    • +
    • The round start timer will count down during subsystem initialization
    • +
    • Total subsystem initialization time will now be displayed
    • +
    +

    Joan updated:

    +
      +
    • His Grace no longer globally announces when He is awakened or falls to sleep.
    • +
    • His Grace is not a toolbox, even if He looks like one.
    • +
    • His Grace no longer requires organs to awaken.
    • +
    • His Grace now gains 4 force for each victim consumed, always provides stun immunity, and will, generally, take longer to consume His owner.
    • +
    • His Grace must be destroyed to free the bodies within Him.
    • +
    • Dropping His Grace while He is awake will cause you to suffer His Wrath until you hold Him again.
    • +
    • His Grace becomes highly aggressive after consuming His owner, and will hunt His own prey.
    • +
    • The Ark of the Clockwork Justicar now only costs 3 of each component to summon, but must consume an additional 7 of each component before it will activate and start counting down.
    • +
    • The presence of the Ark will be immediately announced, though the location will still only be announced after it has been active and counting down for 2 minutes.
    • +
    • The Ark also requires an additional invoker to invoke.
    • +
    +

    Lobachevskiy updated:

    +
      +
    • Fixed glass shards affecting buckled and flying mobs
    • +
    +

    MrStonedOne updated:

    +
      +
    • The game will now force hardware rendering on for all clients.
    • +
    +

    Nienhaus updated:

    +
      +
    • Drying racks have new sprites.
    • +
    +

    Swindly updated:

    +
      +
    • Trays can now be used to insert food into food processors
    • +
    +

    Thunder12345 updated:

    +
      +
    • It's ACTUALLY possible to pat people on the head now
    • +
    +

    WJohn updated:

    +
      +
    • Improved blueshift sprites, courtesy of Nienhaus.
    • +
    +

    XDTM updated:

    +
      +
    • Bluespace Crystals are now a material that can be inserted in Protolathes and Circuit Printers. Some items now require Bluespace Mesh.
    • +
    • Bluespace Crystal can now be ground in a reagent grinder to gain bluespace dust. It has no uses, but it teleports people if splashed on them, and if ingested it will occasionally cause teleportation.
    • +
    +

    coiax updated:

    +
      +
    • Engraved messages now have a UI, which any player, living or dead can access. See when the message was engraved, and upvote or downvote accordingly.
    • +
    • Admins have additional options with the UI, seeing the player ckey, original character name, and the ability to outright delete messages at the press of a button.
    • +
    +

    kevinz000 updated:

    +
      +
    • Flightsuits actually fly over people
    • +
    • Flightsuits don't interrupt pulls when you pass through doors
    • +
    + +

    16 February 2017

    +

    Cyberboss updated:

    +
      +
    • Test merged PRs are now more detailed
    • +
    +

    Steelpoint updated:

    +
      +
    • The Head of Security's Hardsuit is now equipped with a inbuilt Jetpack.
    • +
    +

    coiax updated:

    +
      +
    • The Hyperfractal Gigashuttle is now purchasable for 100,000 credits. Help Centcom by testing this very safe and efficient shuttle design. (Terms and conditions apply.)
    • +
    • The changeling power "Anatomic Panacea" now causes the changeling to vomit out zombie infections, along with headslugs and xeno infections, as before.
    • +
    • The main CTF laser gun disappears when dropped on the floor.
    • +
    + +

    14 February 2017

    +

    Cyberboss updated:

    +
      +
    • Fixed unequipping items while stunned
    • +
    • Fixed various things deleting when unequipped
    • +
    • Fixed tablet ID slots deleting cards
    • +
    • Fixed water mister nozzle getting stuck in hands
    • +
    • Title music now starts immediately upon login
    • +
    • You can no longer sharpen energy weapons
    • +
    +

    Joan updated:

    +
      +
    • Mania Motors are overall less effective and only affect people who can see the motor.
    • +
    • Mania Motors have slightly more health; 100, from 80.
    • +
    +

    MrStonedOne updated:

    +
      +
    • Station time is now always visible in the status tab.
    • +
    • Both server time and station time now displays seconds so you can actively see how game time (ByondTime[tm]) is progressing along side real time.
    • +
    • Added a time dilation tracker, this allows you to better understand how time will progress in game. It shows the time dilation percent for the last minute as well as some rolling averages.
    • +
    +

    RandomMarine updated:

    +
      +
    • Pre-made charcoal pills now contain 10 units instead of 50. The amount of pills inside of toxin first aid kits and the smartfridge have been increased to compensate. Keep in mind that each ten unit pill recovers 100 points of toxin damage and purges 50 units of other reagents.
    • +
    +

    Steelpoint updated:

    +
      +
    • All Drones now have a walking animation.
    • +
    +

    Tofa01 updated:

    +
      +
    • [Delta] Fixes space cleaner being empty in brig medbay
    • +
    • [Delta] Fixes some areas that are not radiation proof
    • +
    • [Meta] Fixes Atmospherics Freezer Spawning As A Heater
    • +
    +

    uraniummeltdown updated:

    +
      +
    • Window Flashing is now a preference
    • +
    • Your game window will flash when alerted as a ghost. This includes being revived by defibs/cloning and events such as borers, swarmers, revenant, etc.
    • +
    + +

    13 February 2017

    +

    ChemicalRascal updated:

    +
      +
    • Delta station brig cell chairs have been replaced with beds. One bed per cell, no funny business.
    • +
    +

    Cyberboss updated:

    +
      +
    • Simple animals that are deleted when killed will now deathrattle
    • +
    • Fixed Alt-click stack duplication
    • +
    +

    Joan updated:

    +
      +
    • Updated the back and belt sprites for airtanks to match the new sprites.
    • +
    +

    Kor updated:

    +
      +
    • Mobile pAIs are now slower than humans.
    • +
    +

    Swindly updated:

    +
      +
    • Added Nuka Cola as a premium item in Robust Softdrinks
    • +
    +

    Tofa01 updated:

    +
      +
    • [Delta] Fixes double windoor on chemistry windows.
    • +
    • Lowered volume of fire alarm sound also makes it more quiet.
    • +
    +

    coiax updated:

    +
      +
    • Added an admin only tool, the life candle. Touch the candle, and when you die, you'll respawn shortly afterwards. Touch it again to stop. Used for testing, thunderdome brawls and good old fashioned memery.
    • +
    • Fried foods no longer shrink to miniature size.
    • +
    + +

    12 February 2017

    +

    AnturK updated:

    +
      +
    • Added Poison Pen to uplink.
    • +
    +

    Drunk Musicians updated:

    +
      +
    • Drunk music
    • +
    +

    Gun Hog updated:

    +
      +
    • Nanotrasen Engineering has devised a construction console to assist with building the Auxiliary Mining Base, usually located near a station's Arrivals hallway. A breakthrough in bluespace technology, this console employs an advanced internal Rapid Construction Device linked to a camera-assisted holocrane for rapid, remote construction!
    • +
    +

    Lzimann updated:

    +
      +
    • MMIs/posibrains works with mechas again
    • +
    +

    RandomMarine updated:

    +
      +
    • The Russians have expanded to the shuttle business. A new escape shuttle is available for purchase.
    • +
    +

    Sweaterkittens updated:

    +
      +
    • Plasmamen burn damage multiplier reduced to 1.5x from 2x
    • +
    +

    coiax updated:

    +
      +
    • Removes the STV5 shuttle from purchase.
    • +
    • Swarmers no longer consume the deep fryer, since they have too much respect for the potential fried foods it can produce.
    • +
    • The clown's survival/internals box is now a box of hugs. Dawww.
    • +
    + +

    11 February 2017

    +

    Dannno updated:

    +
      +
    • hahaha I switched your toolboxes you MORONS
    • +
    +

    Kor updated:

    +
      +
    • Killing bubblegum now unlocks a new shuttle for purchase.
    • +
    +

    Lzimann updated:

    +
      +
    • Hardsuit built-in jetpacks no longer have a speed boost.
    • +
    +

    Pyko updated:

    +
      +
    • Fixed legit posters and map editing official/serial number for poster decals.
    • +
    +

    Tofa01 updated:

    +
      +
    • [Delta] Fixes doors walls and windows being incorrectly placed due to mapmerge issues.
    • +
    • [Box] Fixes access levels for HOP shutters.
    • +
    + +

    10 February 2017

    +

    Ausops updated:

    +
      +
    • Air tanks and plasma tanks have been resprited.
    • +
    +

    ChemicalRascal updated:

    +
      +
    • Pen is able to wind up ruined tapes.
    • +
    +

    CoreOverload updated:

    +
      +
    • You can now emag the escape pods to launch them under any alert code.
    • +
    • Shuttle name is no longer displayed on "Status" panel. Instead, you can now examine a status screen to see it.
    • +
    +

    Cyberboss updated:

    +
      +
    • Simple animals now deathgasp properly again
    • +
    • Testmerged PRs will no longer duplicate in the list
    • +
    • Pods and shuttles now have air again
    • +
    +

    Joan updated:

    +
      +
    • Clockwork Cults must always construct and activate the Ark.
    • +
    • Updates air tank inhands to match Ausops' new sprites.
    • +
    +

    Mekhi Anderson updated:

    +
      +
    • All mobs can now *spin!
    • +
    • Cyborgs now have handholds. This means you can ride around on them, but if you get stunned or hit, you fall off! The cyborg can also throw you off by spinning.
    • +
    +

    Tofa01 updated:

    +
      +
    • Changes fire alarm to make new sound FireAlarm.ogg
    • +
    +

    Xhuis updated:

    +
      +
    • The Syndicate will no longer prank their operatives by including reverse revolvers in surplus crates.
    • +
    +

    coiax updated:

    +
      +
    • A reverse revolver now comes in a box of hugs.
    • +
    • Added a new admin only event: Station-wide Human-level Intelligence. Like the random animal intelligence event, but affecting as many animals as there are ghosties.
    • +
    • The Luxury Shuttle grabs cash in your wallet and backpack, and shares approval between the entrance gates.
    • +
    • The NES Port shuttle now costs 500 credits.
    • +
    + +

    09 February 2017

    +

    Cyberboss updated:

    +
      +
    • Certain firedoors that should have closed during an alarm now actually close
    • +
    • You can now knock on firedoors
    • +
    • Supermatter in a closet/crate will now properly fee the singulo
    • +
    • Paper planes can be unfolded again
    • +
    • Paper planes can be stamped properly
    • +
    +

    Joan updated:

    +
      +
    • Impaling someone with a sharp item by pulling them with a changeling Tentacle now does significantly less damage and stuns for less time.
    • +
    +

    Jordie0608 updated:

    +
      +
    • Admins can now filter watchlist entries to only users who are connected.
    • +
    • Messages no longer delete themselves when sent.
    • +
    +

    Kor updated:

    +
      +
    • The limb grower has been replaced with a box of surplus limbs. Visit robotics or harvest limbs from another person if you want quality.
    • +
    +

    Reeeeimstupid updated:

    +
      +
    • Silly Abductee objectives. Try not to go crazy trading life stories with Lord Singulo.
    • +
    +

    Tofa01 updated:

    +
      +
    • Removes virology access to jobs including Medical Doctor, Geneticist and Chemist.
    • +
    • [Delta] Changes NW supermatter filter to filter O2 instead of N2
    • +
    • [Delta] Adds wardrobes to Dorms & Arrivals Shuttle
    • +
    • [Delta] Adds access buttons to virology doors for extra security
    • +
    • [Delta] Adds bolt door button to all dorms
    • +
    • [Delta] Adds three pairs of optical meson scanners to supermatter room
    • +
    • [Delta] Adds a disk fridge to botany
    • +
    • [Delta] Adds a cake hat to the bar
    • +
    • [Delta] Fixes misplaced station intercom in Supermatter SMES room
    • +
    +

    XDTM updated:

    +
      +
    • A Law Removal module can be build in RnD. It can remove a specified core or freeform law.
    • +
    • When stating laws, silicons won't skip a number when hiding laws. (example: 1. Law 1; 2. Law 2; 3. Law 4 if you choose not to state Law 3)
    • +
    +

    Xhuis updated:

    +
      +
    • Artistic toolboxes now spawn in maintenance and possess various supplies for wire art and crayon art.
    • +
    • Traitors can now obtain His Grace. Chaplains can buy it for 20 TC, or it can be found in a surplus crate.
    • +
    • Soapstone messages can now be rated! Attack the message with your hand to rate it positive or negative. Anyone can see the rating, and you cannot rate a message more than once, even across rounds.
    • +
    • Soapstones no longer have a write time.
    • +
    • Soapstones now have a fixed vocabulary to write messages with.
    • +
    +

    chanoc1 updated:

    +
      +
    • The salt and pepper shakers have new sprites.
    • +
    +

    coiax updated:

    +
      +
    • Added metal rods and floor tiles to Standard cyborgs.
    • +
    • Added a remote signaling device to Engineering cyborg.
    • +
    • Adds a 'Guardian of Balance' lawset and AI module, currently admin spawn only.
    • +
    +

    uraniummeltdown updated:

    +
      +
    • Kinetic Accelerator Cosmetic and Tracer Modkits now don't use mod capacity. Cosmetic kits change the name of the KA.
    • +
    + +

    07 February 2017

    +

    Cyberboss updated:

    +
      +
    • Wire, atmos, and disposal networks no longer work across hyperspace when on the border of a shuttle
    • +
    • Implants that work on death will now work for simple_animals
    • +
    • The target moving while being implanted will no longer continue the implant
    • +
    • Implanters now show progress bars as they were intended to
    • +
    • Pipe painters are no longer aggressive
    • +
    • Carding the AI will now stop a doomsday device
    • +
    • The job subsystem now loads instantly. No more waiting to set your occupation prefs!
    • +
    • The rare case of duping your inventory at roundstart has been fixed
    • +
    • Self deleting stackable items are fixed
    • +
    +

    Dannno updated:

    +
      +
    • We've switched to a new brand of colored jumpsuit.
    • +
    +

    JJRcop updated:

    +
      +
    • Adds 4% chance when assigning a valentines day date to also assign someone else to the same date, but your date will still have you as their only date.
    • +
    +

    Poojawa updated:

    +
      +
    • [Delta] Active turfs down from 300+
    • +
    • [Delta] Janitor closet isn't 2.7K anymore
    • +
    • [Delta] Various pipe fixes
    • +
    +

    RemieRichards updated:

    +
      +
    • Added a new checmial, Skewium, it's produced by mixing rotatium, plasma and sulphuric acid in the ratio 2:2:1, which results in 5 Skewium.
    • +
    +

    Swindly updated:

    +
      +
    • Robotic eyes can no longer be eaten
    • +
    +

    Tofa01 updated:

    +
      +
    • Fixes grammar issue when changing someones appearance via plastic surgery.
    • +
    • [OmegaStation] Allows Chaplain job to be selectable.
    • +
    • [Omega] Fixes Overpressurization In Mass Driver Room
    • +
    +

    Xhuis updated:

    +
      +
    • Traitor clowns can now buy a reverse revolver. I'll leave it up to you to guess what it does. Honk.
    • +
    +

    iamthedigitalme updated:

    +
      +
    • Legion has a new, animated sprite.
    • +
    +

    kevinz000 updated:

    +
      +
    • ADMINS: SDQL2 has been given some new features!
    • +
    • SDQL2 now gives you an exception on runtime instead of flooding server runtime logs.
    • +
    • SDQL2 now supports usr, which makes that variable reference to whatever mob you are in, src, which targets the object it is being called on itself, and marked, which targets the datum marked by the admin calling it. Also, it supports hex references (the hex number at the top of a VV panel) in {}s, so you can target nearly anything! Also, global procs are supported by global.[procname](args), for CALL queries.
    • +
    • SDQL2 can no longer edit /datum/admins or /datum/admin_rank, and is protected from changing x/y/z of a turf and anything that would cause broken movement for movable atoms.
    • +
    • SDQL2 can now get list input with [arg1, arg2]!
    • +
    • Do '""' to put strings inside of SDQL2 or it won't work.
    • +
    +

    06 February 2017

    Xhuis updated:

      @@ -107,1265 +1604,6 @@
      • The tesla engine no longer destroys energy ball generators.
      - -

      04 February 2017

      -

      Cyberboss updated:

      -
        -
      • Modular computers now explode properly
      • -
      • Emagged holograms can no longer be exported for credits
      • -
      • Abstract entities no longer feed the singularity
      • -
      • Machine frames will no longer be anchored when created
      • -
      -

      Joan updated:

      -
        -
      • Vanguard now shows you how long you have until it deactivates.
      • -
      -

      Kor updated:

      -
        -
      • By combing two flashlights and cable coil, you can create a new eye implant: flashlight eyes. People with flashlights for eyes can not see, but they will provide an enormous amount of light to their friends.
      • -
      • Valentines day will now randomly pair up crew members on dates. The paired crewmembers will get an objective to protect each other at all costs.
      • -
      -

      Steelpoint updated:

      -
        -
      • Addition of two security DragNETs to Deltastations, Omegastations and Metastations armouries.
      • -
      -

      Tofa01 updated:

      -
        -
      • [Delta] Removes space money from gold crate replaces with 3 Gold Bars Gold Wrestling belt is still there.
      • -
      • [Delta] Removes space money from silver crate replaces with 5 Silver Coins.
      • -
      • Fixes incorrect placement of RD modular computer on Metastation.
      • -
      -

      WhiteHusky updated:

      -
        -
      • Fields are supported when printing with a modular computer
      • -
      • PRINTER_FONT is now a variable
      • -
      • Removed the [logo] tag on Modular computers as the logo no longer exists
      • -
      • New lines on paper are parsed properly
      • -
      • [tab] is now four non-breaking spaces on papers
      • -
      • Papers have an additional proc, reload_fields, to allow fields made programmatically to be used
      • -
      • stripped_input stripped_multiline_input has a new argument: no_trim
      • -
      • Modular computers no longer spew HTML when looking at a file, rather it is unescaped like it should
      • -
      • Modular computers no longer show escaped HTML entities when editing
      • -
      • Modular computers can now propperly read and write from external media
      • -
      • Modular computers' file browser lists files correctly
      • -
      • NTOS File Manager had a spelling mistake; Manage instead of Manager
      • -
      -

      coiax updated:

      -
        -
      • Engraved messages can no longer be moved by a gravitational singularity.
      • -
      • The deadchat notification of randomly triggered events now uses the deadsay span.
      • -
      • The wizard spell "Rod Form" does not produce a message in deadchat everytime it is used.
      • -
      - -

      03 February 2017

      -

      Cobby updated:

      -
        -
      • Ghosts will now be informed when an event has been triggered by our lovely RNG system.
      • -
      -

      Cyberboss updated:

      -
        -
      • Firedoors will eventually reseal themselves if left open during a fire alarm
      • -
      -

      Joan updated:

      -
        -
      • Clockwork Marauders have 25% less health, 300 health from 400.
      • -
      • The Vitality Matrix scripture is now a Script, from an Application. Its cost has been accordingly adjusted.
      • -
      • Vitality Matrices will be consumed upon successfully reviving a Servant. They also drain and heal conscious targets slightly slower.
      • -
      • The Fellowship Armory scripture is now an Application, from a Script. Its cost has been accordingly adjusted.
      • -
      • Fellowship Armory now affects all Servants in view of the invoker, and will replace weaker gear and armor with its Ratvarian armor. Also, clockwork treads now allow you to move in no gravity like magboots.
      • -
      • Mania Motors no longer instantly convert people next to them.
      • -
      • Instead, you have to remain next to them for several seconds, after which you will be knocked out, then converted if possible.
      • -
      • Mania Motors now cost slightly less power to run.
      • -
      -

      Jordie0608 updated:

      -
        -
      • Admin notes, memos and watchlist entries now use a generalized system, they can all be accessed from the former notes browser.
      • -
      • Added to this are messages, which allow admins to leave a message for players that is delivered to them when they next connect.
      • -
      -

      Lexorion updated:

      -
        -
      • Laser projectiles have a new sprite! They also have a new effect when they hit a wall.
      • -
      -

      Sweaterkittens and Joan updated:

      -
        -
      • Ocular Wardens will now provide auditory feedback when they acquire targets and deal damage.
      • -
      • adds ocularwarden-target.ogg, ocularwarden-dot1.ogg and ocularwarden-dot2.ogg to the game sound files.
      • -
      -

      Tofa01 updated:

      -
        -
      • [Delta] Allows Station Engineers to access Delta Atmospherics Solar Panel Array Room.
      • -
      • [Omega] Adds a Massdriver room to chapel on Omegastation.
      • -
      -

      bgobandit updated:

      -
        -
      • All art storage facilities offer construction paper now!
      • -
      -

      coiax updated:

      -
        -
      • A victim of a transformation disease will retain their name.
      • -
      • The slime transformation disease can turn you into any colour or age of slime.
      • -
      • The Abductor event can now happen at any time, rather than thirty (30) minute plus rounds.
      • -
      - -

      01 February 2017

      -

      Cyberboss updated:

      -
        -
      • AI integrity restorer computer now respects power usage
      • -
      • Progress bars will now stack vertically instead of on top of each other
      • -
      • Progress bars will no longer be affected by lighting
      • -
      -

      Xhuis updated:

      -
        -
      • You can now fold up bluespace body bags with creatures or objects inside. You can't fold them up if too many things are inside, but anything you fold up in can be carried around in the object and redeployed at any time.
      • -
      - -

      31 January 2017

      -

      Cyberboss updated:

      -
        -
      • The cyborg hugging module can no longer self target
      • -
      -

      Joan updated:

      -
        -
      • Changed what scriptures and tools Servant cyborgs get; a full list can be found on the clockwork cult wiki page.
      • -
      -

      RemieRichards updated:

      -
        -
      • Added the ability to choose where your uplink spawns, choose between the classic PDA, the "woops you don't actually have a PDA" fallback Radio uplink and the brand new Pen uplink!
      • -
      - -

      30 January 2017

      -

      BASILMAN YOUR MAIN MAN updated:

      -
        -
      • Added BM SPEEDWAGON THE BEST (AND ONLY) SPACE CAR ON THE MARKET.
      • -
      -

      CoreOverload updated:

      -
        -
      • Clicking item slot now clicks the item in it.
      • -
      -

      Cyberboss updated:

      -
        -
      • Judicial visors now recharge properly
      • -
      • Gluon grenades now properly freeze turfs
      • -
      • Revs are now properly jobbanned
      • -
      -

      Fox McCloud updated:

      -
        -
      • Plant analyzers will now display plant traits
      • -
      • Plant analyzers will now display all of a grown's genetic reagents
      • -
      -

      Joan updated:

      -
        -
      • Cutting off legs no longer stuns.
      • -
      • Volt Void now only allows you to fire 4 volt rays instead of 5, and the damage of each ray has been reduced to 20, from 25.
      • -
      • Cyborgs using Volt Void now take damage if they fail to fire.
      • -
      • Clockwork scripture can no longer require more components than it consumes: This means that most scriptures ""cost"" one less component.
      • -
      -

      MrStonedOne updated:

      -
        -
      • Because of abuse, actions on interfaces are throttled. Some bursting is allowed. You will get a message if an action is ignored. Server operators can configure this in config.dm
      • -
      -

      Tofa01 updated:

      -
        -
      • [Delta] Fixes area names for Deltastation
      • -
      • [Delta] Fixes custodial closet being cold all the time on Deltastation
      • -
      -

      bgobandit updated:

      -
        -
      • Nanotrasen supports the arts. We now offer picture frames!
      • -
      -

      coiax updated:

      -
        -
      • The Syndicate "Uplink Implant" now has no TC precharged. You can charge it with the use of physical telecrystals. The price has been reduced from 14TC to 4TC accordingly. (The uplink implant in the implant bundle still has 10TC).
      • -
      • Syndicate bombs and nuclear devices now have a minimum timer of 90 seconds.
      • -
      • Camoflaged HUDs given to head revolutionaries now function the same as chameleon glasses in the chameleon kit bundle, giving them an action button and far more disguise options.
      • -
      • Syndicate thermals are also now more like chameleon glasses as well.
      • -
      • You can regain a use of a soapstone by erasing one of your own messages. (This means you can remove a message if you don't like the colour and want to try rephrasing it to get a better colour). Erasing someone else's message still uses a charge.
      • -
      • Fixes bugs where you'd spend a charge without engraving anything.
      • -
      • Fixes a bug where the wrong ckey was entered in the engraving, you won't be able to take advantage of the "recharging" on messages made before this change.
      • -
      - -

      29 January 2017

      -

      BASILMAN YOUR MAIN MAN updated:

      -
        -
      • Added a new sailor outfit to the autodrobe, now you can play sailors vs pirates.
      • -
      -

      BlakHoleSun updated:

      -
        -
      • Added new reaction with the rainbow slime extract. Injecting a rainbow slime extract with 5u of holy water and 5u of uranium gives you a flight potion.
      • -
      -

      Cobby updated:

      -
        -
      • AI's can now be your banker by manipulating the stock machine.
      • -
      -

      Cyberboss updated:

      -
        -
      • Nuclear bombs now detonate
      • -
      • You can now link additional cloning pods in the same powered area to a single computer using a multitool.
      • -
      -

      Fox McCloud updated:

      -
        -
      • Fixes Kudzu seed gene stats not being properly altered by certain reagents
      • -
      • Fixes Kudzu vine dropped seeds not properly having gene stats set
      • -
      • Fixes glowshrooms having an invalidly high lifespan
      • -
      • Fixes explosive vines not properly chaining
      • -
      -

      Joan updated:

      -
        -
      • Clockwork Marauders now grant their host action buttons to force them to emerge/recall and communicate with them, instead of requiring the host to type their name or use a verb, respectively.
      • -
      • Clockwork Marauders no longer see their block and counter chances; this was mostly useless info, as knowing the chance didn't matter as to what you'd do.
      • -
      • Clockwork Marauders can no longer change their name.
      • -
      • Clockwork Marauders have a slightly lower chance to block, and take slightly more damage when far from their host.
      • -
      • Fixes a bug where Clockwork Marauders never suffered reduced damage and speed at low health and never got the damage bonus at high health.
      • -
      -

      Kor updated:

      -
        -
      • Stimpacks are no longer available in the mining vendor.
      • -
      -

      Lzimann updated:

      -
        -
      • You can now change your view range as ghost. To do so, either use the View Range verb in the ghost tab, the mouse scroll up/down or control + "+"/"-". The verb also works as a reset if you changed your view.
      • -
      -

      Sogui updated:

      -
        -
      • There are now 2 less traitors in the double agent mode
      • -
      • All security (and captain) suit sensors are set to max by default
      • -
      -

      Supermichael777 updated:

      -
        -
      • The wooden chair with wings is now craft-able. -1 non reconstruct-able map object
      • -
      • Added the Tiki mask, you can make it in wood's crafting menu.
      • -
      • Ported Tiki mask's sprites from Hippie station. It is under the same Creative Commons 3.0 BY-SA as the rest of our sprites. They are from Nienhaus.
      • -
      -

      Tofa01 updated:

      -
        -
      • Adds a camera network onto the Omega Station.
      • -
      • Added new sprite for the AI Slipper.
      • -
      -

      XDTM updated:

      -
        -
      • Implanting chainsaws is now a prosthetic replacement instead of its own surgery.
      • -
      • You can now implant synthetic armblades (from an emagged limb grower) into people's arms to use it at its full potential.
      • -
      • Chainsaw removal surgery has been removed as well; you'll have to sever the limb and get a new one.
      • -
      -

      Xhuis updated:

      -
        -
      • AI control beacons are a new item created from the exosuit fabricator. When installed into a mech, it allows AIs to jump to and from that mech freely. Note that malfunctioning AIs with the domination power unlocked will instead be forced to dominate the mech.
      • -
      • Some timed actions are no longer interrupted while drifting through space.
      • -
      • Riot foam darts can now be constructed from a hacked autolathe.
      • -
      -

      bgobandit updated:

      -
        -
      • The library computer can now upload scanned books to the newscaster. Remember, seditious or unsavory news channels should receive a Nanotrasen D-Notice!
      • -
      • The library computer can now print corporate posters as well as Bibles.
      • -
      • Cargo no longer offers a corporate poster crate. Nobody ever bought it anyway.
      • -
      -

      coiax updated:

      -
        -
      • The Librarian now starts with a chisel/soapstone/chalk/magic marker capable of engraving messages for subsequent shifts, and permanently erasing messages that the Librarian is unhappy with. It has limited uses, so order more at Cargo.
      • -
      • The contraband cream pie crate is now locked, and requires Theatre access.
      • -
      • Any silicons created by bolts of change have no laws.
      • -
      • Cyborgs are immune to polymorph while changing module.
      • -
      • Adds Romerol to the traitor uplink for 25 TC. (This means you need a discount, or to work with another traitor to afford it). Romerol is a highly experimental bioterror agent which silently create dormant nodules to be etched into the grey matter of the brain. On death, these nodules take control of the dead body, causing limited revivification, along with slurred speech, aggression, and the ability to infect others with this agent.
      • -
      • Zombie infections are no longer visible on MediHUD.
      • -
      • Zombies no longer tear open airlocks, since they can just smash them open just as fast.
      • -
      • Zombies are no longer TOXINLOVING.
      • -
      • EMPs may cause random wires to be pulsed. Please ensure that sensitive equipment avoids exposure to heavy electromagnetic pulses.
      • -
      -

      jughu updated:

      -
        -
      • Changes some cargo export prices
      • -
      -

      ma44 updated:

      -
        -
      • Nanotrasen has improved training of the crew, teaching crewmembers like you to unscrew the top off the bottle and pour it into containers like beakers.
      • -
      -

      vcordie updated:

      -
        -
      • Loads the HADES carbine with the correct bullet.
      • -
      • The SRM-8 Rocket Pods have been loaded with new explosives designed to do maximum damage to terrain. These explosives are less effective on people, however.
      • -
      - -

      28 January 2017

      -

      Joan updated:

      -
        -
      • Brass windows no longer start off anchored, but are constructed instantly.
      • -
      • You can no longer stack multiple windows of the same direction on a tile.
      • -
      • Vitality Matrices now share vitality globally, allowing you to use vitality gained from any Matrix.
      • -
      • Geis now mutes human targets if there are less than 6 Servants.
      • -
      • Geis no longer produces resist messages below 6 Servants; this isn't a change, as Geis cannot be successfully resisted below 6 Servants.
      • -
      • Applying Geis to an already bound target will also mute them, in addition to preventing resistance.
      • -
      -

      RemieRichards updated:

      -
        -
      • A New weapon for clown mechs, the Oingo Boingo Punch-face! it's a giant boxing glove that extends out on a spring and sends atoms flying (including anchored ones and things that make no sense to move because -clowns-)
      • -
      -

      Tofa01 updated:

      -
        -
      • Mop will no longer try and clean tile under janitorial cart when wetting the mop.
      • -
      • Adds modular computers to Metastation.
      • -
      • Fixes no air in Deltastation maintenance kitchen.
      • -
      • Adds a modular computer to the CE office on Pubbystation.
      • -
      -

      Xhuis updated:

      -
        -
      • Energy-based weapons can now light cigarettes.
      • -
      -

      coiax updated:

      -
        -
      • Communication consoles now share cooldowns on announcements.
      • -
      • Cyborgs can now alter the messages of the announcement system.
      • -
      • Deadchat is now notified of any deaths on the shuttle or on Centcom. The CTF arena does not generate death messages, due to the high levels of death.
      • -
      • The Human-level Intelligence event now occurs slightly more often, and produces a classified message.
      • -
      -

      kevinz000 updated:

      -
        -
      • Emitters and Tesla Coils now have activation wires!
      • -
      • Emitters will shoot out an emitter bolt when pulsed, regardless of it is on.
      • -
      • Tesla coils will shoot lightning when pulsed, if it is connected to a cable that has power.
      • -
      • Bolas no longer restrain your hands for 10 seconds when you try to remove them and fail.
      • -
      - -

      27 January 2017

      -

      Joan updated:

      -
        -
      • Buckshot now does a maximum of 75 damage, from 90.
      • -
      • The unique cyborg scriptures(Linked Vanguard, Judicial Marker) take 3 seconds to invoke, from 4.
      • -
      • Invoking Inath-neq and Invoking Nzcrentr now both take 10 seconds to invoke, from 15.
      • -
      -

      Lzimann updated:

      -
        -
      • Now you can choose what department you want to be as security! (This may not be completly reliable).
      • -
      -

      RemieRichards updated:

      -
        -
      • Emagging a sleeper now randomises the buttons, the buttons remain the same until randomised again so you can "learn" the new button config if you're a masochist, Inject omnizine but realise far too late that it's all morphine, woops! (Note: Epinephrine can always be injected, regardless of chem levels, this means if something !!FUN!! ends up on the Epinephrine button, it will always be injectable!)
      • -
      -

      Sweaterkittens updated:

      -
        -
      • There are now updated names and descriptions for the items that your plasma-based crewmembers start with and use frequently.
      • -
      - -

      26 January 2017

      -

      Robustin updated:

      -
        -
      • Unholy Water can now be thrown or vaporized to deliver a powerful poison unto the cult's enemies - or healing and stun resistance to its acolytes.
      • -
      -

      Tofa01 updated:

      -
        -
      • Moved Meta station AI MiniSat tracking beacon to AI MiniSat entrance. Should prevent being regular teleported into space.
      • -
      • Added missing row of pixels to Flypeople torso so head connects to body properly.
      • -
      -

      Tofa01 & XDTM updated:

      -
        -
      • Adds radio alert messages going to medical channel to the cryo tube when a patient is fully restored.
      • -
      • Adds new alert sound for cryo tube. (cryo_warning.ogg)
      • -
      -

      XDTM updated:

      -
        -
      • Voice of God has received a few more commands.
      • -
      • You can now use job abbreviations (ex. hos > head of security) and first names (ex. Duke > Duke Hayka) to focus targets.
      • -
      -

      coiax updated:

      -
        -
      • The nuclear operative cybernetic implant bundle now actually contains implants.
      • -
      • The cybernetic implant bundle is no longer eligible for discounts (bundles are, in general, not eligible).
      • -
      • Telecrystals can be purchased in stacks of five and twenty.
      • -
      • The entire stack of telecrystals are added to the uplink when charging them.
      • -
      - -

      24 January 2017

      -

      CoreOverload updated:

      -
        -
      • You can now buckle handcuffed people to singularity/tesla generators, RTGs, tesla coils and grounding rods.
      • -
      -

      Cyberboss updated:

      -
        -
      • Firealarms now go off if it's too cold
      • -
      • World start will no longer lag
      • -
      • Dismembered heads will now use a mob's real name
      • -
      -

      Joan updated:

      -
        -
      • Clockwork Slabs can now focus on a specific component type to produce.
      • -
      • Redesigned: Volt Void now allows you to fire up to 5 energy rays at targets in view; each ray does 25 laser damage to non-Servants in the target tile. The ray will consume power to do up to double damage, however.
      • -
      • Failing to fire a Volt Void ray will damage you, though you won't die from it unless you have access to a lot of power and are either low on health or fail all five rays in a row.
      • -
      • The Ark of the Clockwork Justicar will gradually convert objects near it with increasing range as it gets closer to activating.
      • -
      • Brass windows have 20% less health, and are accordingly easier to destroy. Fun fact: Lasers do more damage to brass windows!
      • -
      • Wall gears have 33% less health and are slightly faster to deconstruct. Fun fact: You can climb over wall gears!
      • -
      • Marauders will heal more of their host's damage, on average, per life tick.
      • -
      • Clockwork Proselytizers can now repair Servant silicons and clockwork mobs. This works in the same manner as repairing clockwork structures.
      • -
      • Cogscarabs work slightly differently, and act as though the proselytizer is a screwdriver.
      • -
      -

      Kor updated:

      -
        -
      • Megafauna will not heal while on the station. Do not be afraid to throw your life away to get in a few toolbox hits.
      • -
      -

      Shadowlight213 updated:

      -
        -
      • PAIs can no longer ventcrawl
      • -
      -

      Tofa01 updated:

      -
        -
      • [Delta Station] Adds a tracking beacon to AI MiniSat Exterior Hallway
      • -
      -

      coiax updated:

      -
        -
      • Statues are now just incredibly tough mobs, rather than GODMODE. As a side effect, they are no longer immune to bolts of change.
      • -
      • Fixed some issues with X (as Y) names on polymorphed mobs.
      • -
      - -

      22 January 2017

      -

      ChemicalRascal updated:

      -
        -
      • Voice analyzers in "inclusive" mode (the default mode) are now case-insensitive.
      • -
      -

      Cyberboss updated:

      -
        -
      • You can no longer meatspike bots and silicons
      • -
      • Secbots will now drop the baton type they were constructed with
      • -
      -

      Dannno updated:

      -
        -
      • yeehaw.ogg is now a round end sound
      • -
      -

      Fox McCloud updated:

      -
        -
      • drying meat slabs and grapes now yields a healthy non-junkfood snack
      • -
      -

      Hyena updated:

      -
        -
      • Adds paint remover to the janitors closet
      • -
      -

      Joan updated:

      -
        -
      • Clockwork Proselytizers can now convert lattices and catwalks. This has negative gameplay benefit, but looks cool.
      • -
      • Sigils of Transmission can be accessed by clockwork structures in a larger range.
      • -
      • You can see, when examining a clockwork structure, how many sigils are in range of it.
      • -
      • Clockwork constructs will toggle clockwork structures instead of attacking them.
      • -
      -

      Shadowlight213 updated:

      -
        -
      • Zombies will now get their claws upon zombification
      • -
      -

      Thunder12345 updated:

      -
        -
      • The indestructible walls on CentComm will now smooth.
      • -
      -

      Tofa01 updated:

      -
        -
      • Changed alert message on early launch Authorization shuttle repeal message.
      • -
      • Makes the repeal message work and push a alert to the crew properly, also reports every Authorization repeal now.
      • -
      • Auto Capitalisation will now work with all types of MMI chat
      • -
      -

      Ultimate-Chimera updated:

      -
        -
      • Adds a new costume crate to the cargo ordering console.
      • -
      -

      XDTM updated:

      -
        -
      • Xenobiology consoles are now buildable from circuitboards in R&D. They'll be limited to the area they're built in plus any area with the same name.
      • -
      • Stock Exchange computers are now also buildable this way.
      • -
      • Androids now speak in a more robotic tone of voice.
      • -
      • Armblades now look a bit more bladelike.
      • -
      -

      coiax updated:

      -
        -
      • The Delta emergency shuttle now travels towards the south, rather than the north. This changes nothing except which direction the stars rushing past the windows are moving.
      • -
      • Fixed dragging the spawn protection traps on CTF.
      • -
      - -

      20 January 2017

      -

      CoreOverload updated:

      -
        -
      • Any sharp item can now be used for "incise" surgery step, with 30% success probability.
      • -
      -

      Joan updated:

      -
        -
      • Sentinel's Compromise will also convert oxygen damage into half toxin, in addition to brute and burn.
      • -
      • Reduced the Ark of the Clockwork Justicar's health from 600 to 500
      • -
      • You can now pull objects past the Ark of the Clockwork Justicar without them being moved and or destroyed by its power.
      • -
      -

      MrStonedOne updated:

      -
        -
      • Server side timing of the parallax shuttle launch animation now runs on client time rather than byond time/server time. This will fix the odd issues it has during lag. The parallax shuttle slowdown animation will still have issues, those will be fixed in another more involved update to shuttles.
      • -
      • The window will flash in the taskbar when a new round is ready and about to start.
      • -
      -

      Tofa01 updated:

      -
        -
      • Moved The CentComm station 6 tiles to the left in order to prevent large shuttles such as "asteroid with engines on it" from clipping off the end of the right side of the map.
      • -
      -

      XDTM updated:

      -
        -
      • Chameleon PDAs can now morph into assistant PDAs.
      • -
      • A few iconless items have been blacklisted from chameleon clothing.
      • -
      • Reviver implants now warn you when they're turning on or off, or when giving a heart attack due to EMP.
      • -
      - -

      19 January 2017

      -

      Cyberboss updated:

      -
        -
      • Various abstract entities will no longer be affected by spacewind
      • -
      • Ash will, once again, burn in lava
      • -
      • Active testmerges of PRs will now be shown in the MOTD
      • -
      • You will no longer appear to bleed while bandaged
      • -
      -

      Joan updated:

      -
        -
      • Clockwork airlocks now have more explicit deconstruction messages, using the same syntax as rwall deconstruction.
      • -
      -

      Mervill updated:

      -
        -
      • Raw Telecrystals won't appear in the Traitor's purchase log at the end of the round
      • -
      -

      MrStonedOne updated:

      -
        -
      • Fixed excessive and immersion ruining delay on the smoothing of asteroid/mining rock after a neighboring rock turf was mined up.
      • -
      -

      XDTM updated:

      -
        -
      • Plasmamen that are set on fire by reacting with oxygen will burn even if they have protective clothing. It will still protect from external fire sources.
      • -
      • Atmos-sealing clothing, like hardsuits, will protect plasmamen from reacting with the atmosphere.
      • -
      • Plasmamen can survive up to 1 mole of oxygen before burning, instead of burning with any hint of oxygen.
      • -
      • Nanotrasen no longer ships self-glueing posters. You'll have to finish placing the posters to ensure they don't fall on the ground.
      • -
      • Exosuits can't push anchored mobs, such as megafauna or tendrils, anymore.
      • -
      -

      coiax updated:

      -
        -
      • AIs can no longer activate the Doomsday Device off-station. Previously it would activate and then immediately turn off, outing the AI as a traitor without any benefit.
      • -
      - -

      18 January 2017

      -

      Mervill updated:

      -
        -
      • Using a welder to repair a mining drone now follows standard behaviour
      • -
      • Redeeming the mining voucher for a mining drone now also provides welding goggles
      • -
      • ntnrc channels are now deleted properly
      • -
      -

      Tofa01 updated:

      -
        -
      • Moved all sprites for heat pipe manifold either up or down by one so that they will line up correctly when connected to adjacent pipes.
      • -
      -

      uraniummeltdown updated:

      -
        -
      • More AI holograms!
      • -
      - -

      16 January 2017

      -

      Cyberboss updated:

      -
        -
      • Firedoors no longer have maintenance panels
      • -
      • Firedoors must now be welded and screwdrivered prior to be deconstructed
      • -
      -

      Joan updated:

      -
        -
      • Ratvar will now convert lattices and catwalks to clockwork versions.
      • -
      -

      XDTM updated:

      -
        -
      • Updating your PDA info with an agent id card inside will also overwrite the previous name.
      • -
      • Loading a xenobiology console with a bio bag won't cause you to smack it with it.
      • -
      • Chemical splashing is now based on distance rather than affected tiles.
      • -
      • You can now properly wet floors by putting enough water in a grenade.
      • -
      • Floating without gravity won't drain hunger.
      • -
      - -

      14 January 2017

      -

      Cyberboss updated:

      -
        -
      • Explosions now flash people properly
      • -
      -

      Lzimann updated:

      -
        -
      • Fixes TGUI not working for people without IE11
      • -
      -

      Thunder12345 updated:

      -
        -
      • Recoloured mobs and objects will no longer produce coloured fire.
      • -
      -

      XDTM updated:

      -
        -
      • Nanotrasen decided that the "violent osmosis" method for refilling fire extinguishers was, while cathartic, too expensive, due to the water tank repair bills. Water tanks now have a tap.
      • -
      • (refilling extinguishers from tanks won't make you hit them)
      • -
      • Golems no longer drop belt, id, and pocket contents in a fit of extreme clumsiness when drawing a sword from a sheath.
      • -
      • Wrenching portable chem dispensers won't cause you to immediately try unwrenching them.
      • -
      -

      coiax updated:

      -
        -
      • Blue circuit floors are now restored to their normal colour if an AI doomsday device is disabled.
      • -
      - -

      13 January 2017

      -

      Cyberboss updated:

      -
        -
      • Walls blow up less stupidly
      • -
      • You no longer drop a beaker after attempting to load it into an already full cryo cell
      • -
      -

      Joan updated:

      -
        -
      • Instant Summons is no longer greedy with containers.
      • -
      -

      Mervill updated:

      -
        -
      • Hardsuits, amour and other suits that cover the feet now protect against glass shards
      • -
      • You will now lose the lawyer's speech bubble effect if you unequip the layer's badge
      • -
      -

      MrStonedOne updated:

      -
        -
      • More performance tweaks with the modulated reactive ensured entropy frame governor system
      • -
      -

      PKPenguin321 updated:

      -
        -
      • Ash walker tendrils will now restore 5% of their HP when fed.
      • -
      -

      Shadowlight213 updated:

      -
        -
      • Borg emotes should now play at the correct pitch
      • -
      • The ID console now properly handles authorization
      • -
      • Clicking on one of the ID cards in the UI will no longer eject both of them
      • -
      -

      Thunder12345 updated:

      -
        -
      • Morphs will no longer retain the colour of the last thing mimicked when reverting to their true form
      • -
      -

      XDTM updated:

      -
        -
      • Patches' application is now properly delayed instead of instant.
      • -
      • Accelerator laser cannons' projectile now properly grows with distance.
      • -
      -

      coiax updated:

      -
        -
      • The end of round stats include the number of people who escaped on the main emergency shuttle.
      • -
      - -

      10 January 2017

      -

      Arianya updated:

      -
        -
      • Doors and vending machines once again make a sound when you screwdriver them.
      • -
      -

      Cyberboss updated:

      -
        -
      • Explosions can no longer be dodged
      • -
      • Airlocks are now destroyed by the same level explosion that destroys walls
      • -
      • Diamond/External/Centcomm airlocks and firedoors now block explosions as walls do
      • -
      -

      Joan updated:

      -
        -
      • Clockwork Proselytizers no longer require Replicant Alloy to function; instead, they gradually charge themselves with power, which is used more or less the same as alloy.
      • -
      • Clockwork Proselytizers now produce brass sheets when used in-hand, instead of Replicant Alloy.
      • -
      • Tinkerer's Caches can no longer have Replicant Alloy removed from them; using an empty hand on them will simply check when they'll next produce a component.
      • -
      • Mending Motors can no longer use Replicant Alloy in place of power.
      • -
      -

      Mervill updated:

      -
        -
      • Controlling the station status displays no longer overrides the cargo supply timer
      • -
      -

      MrStonedOne updated:

      -
        -
      • Lighting was made more responsive.
      • -
      -

      XDTM updated:

      -
        -
      • Earmuffs and null rods protect against the Voice of God.
      • -
      • Earmuffs are now buildable in autolathes.
      • -
      • Voice of God stuns have a longer cooldown.
      • -
      -

      coiax updated:

      -
        -
      • Girders now offer hints to their deconstruction when examined.
      • -
      - -

      08 January 2017

      -

      Mervill updated:

      -
        -
      • pre-placed posters don't retain their pixel offset when taken down carefully
      • -
      • Dinnerware Vendor will show it's wire panel
      • -
      -

      Nanotrasen Station Project Advisory Board updated:

      -
        -
      • It is highly recommended that, when constructing the Meteor Shield project, you are able to see, at minimum, two meteor shields from a stationary location. The Nanotrasen Station Project Advisory Board is not liable for meteor damage taken under wider shield arrangements.
      • -
      -

      Speed of Light Somehow Changed updated:

      -
        -
      • Dynamic lights are no longer animated, and update instantly
      • -
      • Increased maximum radius of mob and mobile lights
      • -
      - -

      06 January 2017

      -

      Cruix updated:

      -
        -
      • Fixed the leftmost and bottommost 15 turfs not having static for AIs and camera consoles
      • -
      -

      Joan updated:

      -
        -
      • Tesla coils and grounding rods must be anchored with a closed panel to function, ie; not explode when shocked.
      • -
      • Metastation's xenobio has been slightly modified to avoid getting hit by some standard shuttles.
      • -
      -

      Mervill updated:

      -
        -
      • Regular spraycans aren't silent anymore
      • -
      -

      MrStonedOne and Ter13 updated:

      -
        -
      • Added some ping tracking to the game.
      • -
      • Your ping shows in the status tab
      • -
      • Other players ping shows in who to players and admins.
      • -
      -

      Nabski89 updated:

      -
        -
      • Re-Vitiligo Levels to match wiki.
      • -
      -

      XDTM updated:

      -
        -
      • Voice of God's Sleep lasts less than the other stuns.
      • -
      • You can also use people's jobs to single them out, instead of only names.
      • -
      • If multiple people share the same name/job they'll all be included, although at a reduced bonus.
      • -
      • Names and jobs will only be accepted if they're the first part of the command, and not in the middle, to prevent unintended focusing.
      • -
      • Voice of God now shows speech before the emotes it causes.
      • -
      • Special characters are no longer over-sanitized.
      • -
      • You can now properly apply items to clothing with pockets, such as slime speed potions on clown shoes.
      • -
      • Mechs are now able to enter wormhole-sized portals.
      • -
      - -

      03 January 2017

      -

      Cyberboss updated:

      -
        -
      • AIs can no longer see cult runes properly
      • -
      -

      Mervill updated:

      -
        -
      • Can't kick racks if weakened, resting or lying
      • -
      - -

      02 January 2017

      -

      MrStonedOne updated:

      -
        -
      • Throwing was refactored to cause less lag and be more precise
      • -
      • Item throwing now imparts the momentum of the user throwing. Throwing in the direction you are moving throws the item faster, throwing away from the direction you are moving throws the item slower. This should make hitting yourself with floor tiles less likely.
      • -
      -

      XDTM updated:

      -
        -
      • Storage bags should now cause less lag when picking up large amounts of items.
      • -
      • Storage bags now don't send an error message for every single item they fail to pick up.
      • -
      - -

      01 January 2017

      -

      A whole bunch of spiders in a SWAT suit updated:

      -
        -
      • spiders can't wrap anchored things
      • -
      - -

      31 December 2016

      -

      hyena updated:

      -
        -
      • fixes caps suit fire immunity
      • -
      -

      kevinz000 updated:

      -
        -
      • Machine overloads/overrides aren't as bullshit as you'll actually be able to dodge it now.
      • -
      - -

      29 December 2016

      -

      Mervill updated:

      -
        -
      • Patched an exploit related to pulling a vehicle as its driver while in space
      • -
      • Fixed evidence bags not displaying their contents when held
      • -
      • Clothing without a casual variant will no longer say it can be worn differently when examined
      • -
      • Only standard handcuffs can be used to make chained shoes
      • -
      • Fixed cards against space
      • -
      • Drying rack sprite updates properly when things are removed without drying
      • -
      -

      XDTM updated:

      -
        -
      • Colossi now drop the Voice of God, a mouth organ that, if implanted, allows you to speak in a HEAVY TONE. This voice can compel hearers to briefly obey certain codewords, such as "STOP". Using these codewords will severely increase this ability's cooldown, and only one will be used per sentence.
      • -
      • Use .x, :x, or #x as a prefix to use Voice of God or any future vocal cord organs.
      • -
      • Chaplains, being closer to the gods, and command staff, being used to giving orders, gain an increased effect when using the Voice of God. The mime, not being used to speaking, has a reduced effect.
      • -
      - -

      28 December 2016

      -

      Erwgd updated:

      -
        -
      • A new access level is available, named "Cloning Room". Medical Doctors, Geneticists and CMOs start with it.
      • -
      • On Box Station and on Meta Station, the cloning lab doors require Cloning Room access in addition to each door's previous requirements.
      • -
      • Cloning pods are now unlocked with Cloning Room access only.
      • -
      -

      Incoming5643 updated:

      -
        -
      • There's a new category in uplinks for discounted gear. These special discounts however can only be taken once, so even if you are lucky enough to see syndibombs for 75% off you won't be able to nuke the entire station with them.
      • -
      • The charge spell will no longer bilk you on wand charges, and wands that are dead won't show up as charged.
      • -
      -

      Joan updated:

      -
        -
      • Clockwork Marauders no longer have Fatigue. It was difficult to balance and made them too easy to force into recalling. This means they just have health; they aren't forced to recall by anything, but can accordingly die much more easily.
      • -
      • Accordingly Clockwork Marauders now have more health, do slightly more damage, block slightly more often, and have to go slightly further from their host to take damage.
      • -
      • Marauders that are not recovering(from recalling while the host's health is too high to emerge) and are inside their host, or are within a tile of their host, will gradually heal their host until their host is above the health threshold to emerge.
      • -
      • Chaos guardians transfer slightly less damage to their summoner.
      • -
      -

      XDTM updated:

      -
        -
      • Armblades now go slash slash instead of thwack thwack
      • -
      • Tentacles have some fancier sprites
      • -
      - -

      27 December 2016

      -

      Firecage updated:

      -
        -
      • The Nanotrasen Sewing Club has finally fixed the problem which rendered NT, Ian, and Grey bedsheets invisible when worn!
      • -
      -

      Hyena updated:

      -
        -
      • Detective coats can now hold police batons
      • -
      • Fixes disabler in hand sprites
      • -
      -

      Joan updated:

      -
        -
      • You can now put syndicate MMIs and soul vessels into AI cores.
      • -
      • The Hierophant boss will now create an arena if you try to leave its arena.
      • -
      • The Hierophant boss, its arena, and the weapon it drops all have new sprites.
      • -
      • And new sounds.
      • -
      • And new text.
      • -
      • Wizards can now buy magic guardians for 2 points. They are not limited to one guardian, meaning they can have up to 5. If that's wise is an entirely different question.
      • -
      • Wizards cannot buy support guardians, but can buy dexterous guardians, which can hold items.
      • -
      -

      Shadowlight213 updated:

      -
        -
      • Shuttle are now safe from radstorms
      • -
      -

      XDTM updated:

      -
        -
      • HUD implants now properly allow you to modify the records of those you examine, like HUD glasses do.
      • -
      • Organ Manipulation surgery now properly heals on the cautery step.
      • -
      • The maintenance door adjacent to R&D in metastation is now accessible to scientists, instead of requiring both science and robotics access.
      • -
      - -

      24 December 2016

      -

      AnturK updated:

      -
        -
      • Implants now work on animals.
      • -
      -

      Cyberboss updated:

      -
        -
      • Dead things can no longer be used to open doors
      • -
      -

      F-OS updated:

      -
        -
      • swarmers can no longer destroy airlocks.
      • -
      -

      MrStonedOne updated:

      -
        -
      • AI's call bot command has been throttled to prevent edge cases causing lag. You will not be able to call another bot until the first bot has finished mapping out it's route.
      • -
      -

      TehZombehz updated:

      -
        -
      • Observers can now orbit derelict station drone shells, much like current lavaland ghost role spawners, to make finding them easier. Regular drone shells are not affected by this.
      • -
      -

      XDTM updated:

      -
        -
      • Autolathes are now true to their name and can queue 5 or 10 copies of the same item.
      • -
      -

      coiax updated:

      -
        -
      • Cyborg renaming boards cannot be used if no name has been entered.
      • -
      • Cyborg rename and emergency reboot modules are destroyed upon use, and not stored inside the cyborg to be ejected if modules are reset.
      • -
      • Emagging the book management console and printing forbidden lore now has a chance of producing a clockwork slab rather than an arcane tome.
      • -
      -

      kevinz000 updated:

      -
        -
      • Flightsuits now have their own subsystem!
      • -
      • Flightsuits properly account for power before calculating drifting
      • -
      • Flightpack users will automatically fly over anyone buckled without crashing.
      • -
      • Flightpack users automatically slip through mineral doors
      • -
      • Flightpack users will crash straight through grills at appropriate times
      • -
      • Flightpack users automatically slip through unbolted airlocks
      • -
      • Flightpacks are faster in space, but their space momentum decay has been upped significantly to compensate
      • -
      • Flighthelmets now have a function to allow the wearer to zoom out to see further. Helps you not crash eh?
      • -
      -

      spudboy updated:

      -
        -
      • Gave cyborgs some hotkeys they should have had.
      • -
      - -

      21 December 2016

      -

      FTL13, yogstation, Iamgoofball, and MrStonedOne updated:

      -
        -
      • Space is pretty.
      • -
      • You can configure how pretty space is in preferences, those of you on toasters should go to low to remove the need to do client side animations. (standard fanfare as job selection, left click to increase, right click to decrease) (Changes are applied immediately in most cases, on reconnect otherwise)
      • -
      -

      Joan updated:

      -
        -
      • EMPs will generally fuck up clockwork structures.
      • -
      • Cogscarabs can no longer hold slabs to produce components.
      • -
      • Slabs will now produce components even if in a box in your backpack inside of a bag of holding on your back; any depth you can hide the slab in will still produce components.
      • -
      • Non-Servants in possession of clockwork slabs will also no longer produce components.
      • -
      -

      Mekhi Anderson updated:

      -
        -
      • PAI notifications no longer flood those who do not wish to be flooded.
      • -
      -

      Shadowlight213 updated:

      -
        -
      • 2 new performer's outfits have been added to the autodrobe
      • -
      - -

      20 December 2016

      -

      Kor updated:

      -
        -
      • You can put a variety of hats on cyborgs using help intent (the engiborg can't wear hats though, as it is shaped too oddly. Sorry!)
      • -
      • The complete list of currently equippable hats is as follows: Cakehat, Captains Hat, Centcomm Hat, Witch Hunter Hat, HoS Cap, HoP Cap, Sombrero, Wizard Hat, Nurse Hat.
      • -
      -

      Lzimann updated:

      -
        -
      • Mjor the Creative will drop his loot correctly now.
      • -
      -

      Mekhi Anderson updated:

      -
        -
      • Fixes various PAI bugs, various tweaks and bullshit.
      • -
      -

      MrPerson updated:

      -
        -
      • Starlight will have more of a gradient and generally shine a more constant amount of light regardless of how many tiles are touching space. In dark places with long borders to space, starlight will be much darker.
      • -
      - -

      19 December 2016

      -

      spudboy updated:

      -
        -
      • Fixed items not appearing in the detective's fedora.
      • -
      - -

      18 December 2016

      -

      Dannno updated:

      -
        -
      • Sec hailers can now be emagged for a more rational, calm message.
      • -
      -

      Erwgd updated:

      -
        -
      • Limb Grower circuit boards can now be made in Research and Development, requiring level 3 in data theory and level 2 in biological technology.
      • -
      -

      Firecage updated:

      -
        -
      • The NanoTrasen Airlock Builder Federation(NTABF) has recently released the blueprints involving building and deconstructing Titanium Airlocks! These airlocks are now being used on all of our shuttles.
      • -
      -

      Fox McCloud updated:

      -
        -
      • Fixes the personal crafting cost of ED-209's being too expensive
      • -
      -

      Hyena updated:

      -
        -
      • adds 2 geiger counters to radition protection crates and a gift from the russians
      • -
      -

      Joan updated:

      -
        -
      • Adds Replicant and Tinkerer's Cache to the default slab quickbind.
      • -
      • Revenants will be revealed by ocular wardens when targeted.
      • -
      -

      Joan, Dagdammit updated:

      -
        -
      • You can now push Wraith Spectacles up to avoid vision damage, but lose xray vision.
      • -
      • Do note that flicking them on and off very quickly may cause you to lose vision rather quickly.
      • -
      -

      Kor updated:

      -
        -
      • Added the treasure hunter's hat, coat, uniform, and whip. These aren't available on the map yet, but will be available to the librarian soon.
      • -
      -

      Mervill updated:

      -
        -
      • Notice boards can now have photographs pined to them
      • -
      • Items removed from the notice board are placed in your hands
      • -
      • Intents can be cycled forward and backwards with hotkeys again
      • -
      • Russian revolver ammo display works correctly
      • -
      • Added a credit deposit to pubbystation's vault
      • -
      • Removed a rather garish golden statue of the HoP from pubbystation's vault
      • -
      -

      Okand37 & Lexorion updated:

      -
        -
      • Added a new hair style, the Sidecut!
      • -
      -

      Supermichael777 updated:

      -
        -
      • Clockwork components the chaplain picks up are now destroyed.
      • -
      -

      Swindly updated:

      -
        -
      • Adds eggnog. It can be made by mixing 5 parts rum, 5 parts cream, and 5 parts egg yolk.
      • -
      -

      XDTM updated:

      -
        -
      • Changelings can now buy Tentacles on the Cellular emporium for 2 evolution points.
      • -
      • Tentacles, once used, can be fired once against an item or mob to pull it towards yourself. Items will be automatically grabbed. Costs 10 chemicals per tentacle.
      • -
      • On humanoid mobs tentacles have a varying effect depending on intent: - Help intent simply pulls the target closer without harming him; - Disarm intent does not pull the target but instead pulls whatever item he's holding in his hands to yours; - Grab intent puts the target into an aggressive grab after it is pulled, allowing you to throw it or try to consume it; - Harm intent will briefly stun the target on landing; if you're holding a sharp weapon you'll also impale the target, dealing increased damage and a longer stun.
      • -
      • Random golems now properly acquire the properties of the golem they pick.
      • -
      • When becoming a random golem the user is informed of the properties of the picked golem.
      • -
      -

      coiax updated:

      -
        -
      • Chameleon clothing produced by the syndicate has been found to react negatively to EMPs, randomly switching forms for a time.
      • -
      • Anomalies now have observer-visible countdowns to their detonation.
      • -
      • Adds upgrades for the medical cyborg!
      • -
      • The Hypospray Expanded Synthesiser that adds chemicals to treat blindness, deafness, brain damage, genetic corruption and drug abuse.
      • -
      • The Hypospray High-Strength Synthesiser, containing stronger versions of drugs to treat brute, burn, oxyloss and toxic damage.
      • -
      • The Piercing Hypospray (also applicable to the Standard and Peacekeeper borgs) that allows a hypospray to pierce thick clothing and hardsuits.
      • -
      • The Defibrillator, giving the medical cyborg an onboard defibrillator.
      • -
      • Loose atmospherics pipes are now dangerous to be hit by.
      • -
      • Whenever you automatically pick up ore with an ore satchel, if you are dragging a wooden ore box, the satchel automatically empties into the box.
      • -
      -

      dannno updated:

      -
        -
      • Adds a villain costume to the autodrobe.
      • -
      • Fixes autodrobe failing to stock items.
      • -
      -

      jughu updated:

      -
        -
      • sandals are not fireproof or acidproof anymore :add: Magical sandals for the wizard that are still fireproof/acid proof :tweak: makes the marisa boots acid and fire proof too
      • -
      -

      karlnp updated:

      -
        -
      • made facehuggers work again
      • -
      • vendors, airlocks, etc now cannot shock at a distance
      • -
      -

      uraniummeltdown updated:

      -
        -
      • Side entrance to Box Medbay, a few layout changes.
      • -
      - -

      14 December 2016

      -

      Incoming5643 updated:

      -
        -
      • Recently we've been receiving reports of cheap knock off nuclear authentication disks circulating among the syndicate network. Don't be fooled by these decoys, only the real deal can be used to destroy the station!
      • -
      • Please don't destroy the station in an attempt to make sure the disk is real.
      • -
      -

      Joan updated:

      -
        -
      • The Ark of the Clockwork Justicar can no longer be repaired.
      • -
      • The Ark now has 20% more health.
      • -
      • The Ark of the Clockwork Justicar will now force objects away from it.
      • -
      • Faster-than-normal tools are somewhat slower than before.
      • -
      • Mania Motors now require a much larger amount of power to convert people adjacent, and people converted by it are knocked out.
      • -
      -

      Mindustry updated:

      -
        -
      • Goliath meat can be cooked in lava again
      • -
      -

      Okand37 updated:

      -
        -
      • DeltaStation's emergency shuttle
      • -
      -

      XDTM updated:

      -
        -
      • Abductor Agents have now been equipped with extremely advanced construction and hacking tools.
      • -
      - -

      13 December 2016

      -

      Fox McCloud updated:

      -
        -
      • Adds in random botany seeds; never the same twice.
      • -
      • Adds in new trait that makes a grown release smoke when squashed
      • -
      • Weed rates and chances are now core seed genes
      • -
      -

      Joan updated:

      -
        -
      • Clockwork proselytizers suffer doubled cost and proselytization time when not on the station, mining, or centcom.
      • -
      • Trying to recite scripture offstation is more clearly disapproved of.
      • -
      -

      XDTM updated:

      -
        -
      • The internal rage of the crew has been suppressed, and they will no longer attack their own backpacks when opening them.
      • -
      - -

      12 December 2016

      -

      Dannno updated:

      -
        -
      • more chaplain outfits
      • -
      • animal and tribal masks to the theater vendor
      • -
      - -

      11 December 2016

      -

      Cobby updated:

      -
        -
      • Fixes literally everything regarding renaming so far. When adding unique_rename to objects, make sure the attackby checks for inheritance.
      • -
      • You can pull as other mobs now. Sorry, clickcode is stupid.
      • -
      -

      Cyberboss updated:

      -
        -
      • Frozen things will now unfreeze above 0C
      • -
      -

      Joan updated:

      -
        -
      • Invoking Nezbere now increases ocular warden damage slightly more, but increases ocular warden range slightly less.
      • -
      -

      Swindly updated:

      -
        -
      • The recipe for moonshine now calls for 5 units of nutriment and 5 units of sugar instead of 10 units of nutriment.
      • -
      -

      Thunder12345 updated:

      -
        -
      • Scrapheap Challenge shuttle now actually works
      • -
      -

      coiax updated:

      -
        -
      • Cyborgs now have a reset module wire, that when pulsed, triggers the cyborg's reset module hardware.
      • -
      • Cyborgs now eject all upgrades when reset, rather than the upgrades being destroyed.
      • -
      • Removed redundant reset module.
      • -
      - -

      10 December 2016

      -

      Cyberboss updated:

      -
        -
      • The slips bug (which made freon laggy) is fixed
      • -
      -

      Kor updated:

      -
        -
      • Deleted all (3000+) left handed inhand icons. They are now automatically mirrored from the right hand, saving spriters a lot of tedious busywork.
      • -
      • By crafting a wall mounted flasher frame (can be ordered via cargo), a flash, and a riot shield, you can now construct a strobe shield. The strobe shield combines the functionality of a riot shield and a flash, and can be reloaded with flash bulbs.
      • -
      -

      Supermichael777 updated:

      -
        -
      • Conveyors have been more firmly anchored. No fun allowed
      • -
      -

      Thunder12345 updated:

      -
        -
      • Added the Standby Emergency Vessel "Scrapheap Challenge" as a new emergency shuttle option. You'll even be paid 1000 credits to use it!
      • -
      -

      coiax updated:

      -
        -
      • Due to a combination of radiation and water supply contamination, stations have been reporting animals gaining self awareness.
      • -
      -

      optional name here updated:

      -
        -
      • fixed ashdrake's flame wall.
      • -
      • fixed walls decon spawning metal in a random location in the same room.
      • -
      - -

      08 December 2016

      -

      Fox McCloud updated:

      -
        -
      • The ability to harvest a plant, repeatedly, is now a gene-extractable trait that can be spliced into other plants
      • -
      • can extract the battery capabilities of potatoes and splice them into other plants
      • -
      • Plants types are now gene traits that can be added/removed from plants
      • -
      • Adds new stinging plant trait that will inject a bit of a plant's reagents when thrown at someone
      • -
      -

      Joan updated:

      -
        -
      • The clockwork slab's interface is now TGUI.
      • -
      • You can now see what an ocular warden is attacking.
      • -
      -

      Mervill updated:

      -
        -
      • The light replacer can now create bulbs from glass shards
      • -
      • Click a light replacer while holding a glass shard to add the shard to the replacer
      • -
      • Click a glass shard while holding a light replacer to consume the shard
      • -
      -

      MrStonedOne updated:

      -
        -
      • world initialization is now faster.
      • -
      • fixed the modify bodypart admin tool not working
      • -
      -

      PKPenguin321 updated:

      -
        -
      • Swarmer beacons now have 750 health, down from 3000.
      • -
      -

      TehZombehz updated:

      -
        -
      • Nanotrasen Culinary Division has authorized the production of tacos, both plain and classic.
      • -
      -

      XDTM updated:

      -
        -
      • Replica Pod cloning now works on people who have been decapitated.
      • -
      -

      coiax updated:

      -
        -
      • Additional mice sometimes appear in the maintenance tunnels. Engineers beware!
      • -
      - -

      07 December 2016

      -

      Cyberboss updated:

      -
        -
      • Atmos canisters now stay connected after relabeling them
      • -
      -

      Incoming5643 updated:

      -
        -
      • Server owners that use the panic bunker feature can now optionally redirect new players to a different server. See config.txt for details.
      • -
      -

      LOOT DUDE updated:

      -
        -
      • Swarmers will drop bluespace crystals on death, non-artificial crystals.
      • -
      -

      MisterTikva updated:

      -
        -
      • Nanotrasen Mushroom Studies Division proudly announces that growth serum producing plants were genetically reassembled. You no longer alternate between sizes with doses 20u+ and more effects were added to higher doses.
      • -
      -

      Thunder12345 updated:

      -
        -
      • You can now only order a replacement shuttle once
      • -
      - -

      06 December 2016

      -

      BASILMAN YOUR MAIN MAN updated:

      -
        -
      • fixes people "walking over the glass shard!" when they're on the ground, changes message when incapacitated
      • -
      -

      Chnkr updated:

      -
        -
      • Nuclear Operatives can now customize the message broadcast to the station when declaring war.
      • -
      -

      Cyberboss updated:

      -
        -
      • The atmos waste lines for the Metastation Kitchen and Botany departments is now actually connected
      • -
      -

      Gun Hog updated:

      -
        -
      • Nanotrasen Janitorial Sciences Division is proud to announce a new concept for the Advanced Mop prototype; It now includes a built-in condenser for self re-hydration! See your local Scientist today! In the event that janitorial staff wish to use more expensive solutions, the condenser may be shut off with a handy handle switch!
      • -
      -

      Incoming5643 updated:

      -
        -
      • The timer for shuttle calls/recalls now scales with the security level of the station (Code Red/Green, etc.). You no longer have to feel dumb if you forget to call Code Red before you call the shuttle!
      • -
      • Shuttles called in Code Green (the lowest level) now take 20 minutes to arrive, but may be recalled for up to 10 minutes. They also don't require a reason to be called.
      • -
      • That doesn't mean you should call a code green shuttle every round the moment it finishes refueling.
      • -
      • Server owners may now customize the population levels required to play various modes. Keep in mind that this does not preserve the balance of the mode if you change it drastically. See game_modes.txt for details.
      • -
      -

      Joan updated:

      -
        -
      • You can now proselytize floor tiles at a rate of 20 tiles to 1 brass sheet or 2 tiles to 1 liquified alloy for cogscarabs.
      • -
      • Proselytizers will automatically pry up floor tiles if those tiles can be proselytized.
      • -
      • Brass floor tiles no longer exist. Instead, you can just apply brass sheets to a tile. Crowbarring up a clockwork floor will yield that brass sheet.
      • -
      • You can now cancel AI intellicard wiping.
      • -
      • Geis now takes 5 seconds to resist.
      • -
      -

      Mervill updated:

      -
        -
      • Examining now lists the neck slot
      • -
      -

      MisterTikva updated:

      -
        -
      • Nanotrasen informs that certain berry and root plants have been infused with additional genetic traits.
      • -
      • Watermelons now have water in them!
      • -
      • Blumpkin's chlorine production has been reduced for better workplace efficiency.
      • -
      • Squishy plants now obey the laws of physics and will squash all over you if fall on them.
      • -
      -

      Shadowlight213 updated:

      -
        -
      • The lavaland syndicate agents, as well as the ID for all simple_animal syndicate corpses should have their ID actually have syndicate access on it now!
      • -
      -

      Swindly updated:

      -
        -
      • Adds a new toxin: Anacea. It metabolizes very slowly and quickly purges medicines in the victim while dealing light toxin damage. Its recipe is 1 part Haloperidol, 1 part Impedrezene, 1 part Radium.
      • -
      -

      WJohn updated:

      -
        -
      • AI core turrets can once again hit you if you are standing in front of the glass panes, or in the viewing area's doorway.
      • -
      -

      XDTM updated:

      -
        -
      • Quantum Pads are now buildable in R&D!
      • -
      • Quantum Pads, once built, can be linked to other Quantum Pads using a multitool. Using a Pad who has been linked will teleport everything on the sending pad to the linked pad!
      • -
      • Pads do not need to be linked in pairs: Pad A can lead to Pad B which can lead to pad C.
      • -
      • Upgrading a Quantum Pad will reduce the cooldown, charge-up time, and power consumption.
      • -
      • Quantum Pads require a bluespace crystal, a micro manipulator, a capacitor and a cable piece.
      • -
      -

      kilkun updated:

      -
        -
      • New lore surrounding the various SWAT suits.
      • -
      • Captain's hardsuit/SWAT suit got a few buffs. It's now much more robust.
      • -
      • Captain's space suit is now heat proof as well as fireproof. Long overlooked no longer.
      • -
    GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index b527155eb0..c698f876d3 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -9327,3 +9327,1179 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - rscadd: Traitor janitors can now order EZ-clean grenades for 6 telecrystals per bundle. They function like normal cleaning grenades with an added "oh god my face is melting" effect, and can also be found in surplus crates. +2017-02-07: + Cyberboss: + - bugfix: Wire, atmos, and disposal networks no longer work across hyperspace when + on the border of a shuttle + - bugfix: Implants that work on death will now work for simple_animals + - bugfix: The target moving while being implanted will no longer continue the implant + - bugfix: Implanters now show progress bars as they were intended to + - bugfix: Pipe painters are no longer aggressive + - bugfix: Carding the AI will now stop a doomsday device + - rscadd: The job subsystem now loads instantly. No more waiting to set your occupation + prefs! + - bugfix: The rare case of duping your inventory at roundstart has been fixed + - bugfix: Self deleting stackable items are fixed + Dannno: + - tweak: We've switched to a new brand of colored jumpsuit. + JJRcop: + - tweak: Adds 4% chance when assigning a valentines day date to also assign someone + else to the same date, but your date will still have you as their only date. + Poojawa: + - bugfix: '[Delta] Active turfs down from 300+' + - bugfix: '[Delta] Janitor closet isn''t 2.7K anymore' + - bugfix: '[Delta] Various pipe fixes' + RemieRichards: + - rscadd: Added a new checmial, Skewium, it's produced by mixing rotatium, plasma + and sulphuric acid in the ratio 2:2:1, which results in 5 Skewium. + Swindly: + - bugfix: Robotic eyes can no longer be eaten + Tofa01: + - bugfix: Fixes grammar issue when changing someones appearance via plastic surgery. + - tweak: '[OmegaStation] Allows Chaplain job to be selectable.' + - bugfix: '[Omega] Fixes Overpressurization In Mass Driver Room' + Xhuis: + - rscadd: Traitor clowns can now buy a reverse revolver. I'll leave it up to you + to guess what it does. Honk. + iamthedigitalme: + - imageadd: Legion has a new, animated sprite. + kevinz000: + - rscadd: 'ADMINS: SDQL2 has been given some new features!' + - bugfix: SDQL2 now gives you an exception on runtime instead of flooding server + runtime logs. + - rscadd: SDQL2 now supports usr, which makes that variable reference to whatever + mob you are in, src, which targets the object it is being called on itself, + and marked, which targets the datum marked by the admin calling it. Also, it + supports hex references (the hex number at the top of a VV panel) in {}s, so + you can target nearly anything! Also, global procs are supported by global.[procname](args), + for CALL queries. + - bugfix: SDQL2 can no longer edit /datum/admins or /datum/admin_rank, and is protected + from changing x/y/z of a turf and anything that would cause broken movement + for movable atoms. + - rscadd: SDQL2 can now get list input with [arg1, arg2]! + - experiment: Do '""' to put strings inside of SDQL2 or it won't work. +2017-02-09: + Cyberboss: + - bugfix: Certain firedoors that should have closed during an alarm now actually + close + - soundadd: You can now knock on firedoors + - bugfix: Supermatter in a closet/crate will now properly fee the singulo + - bugfix: Paper planes can be unfolded again + - bugfix: Paper planes can be stamped properly + Joan: + - tweak: Impaling someone with a sharp item by pulling them with a changeling Tentacle + now does significantly less damage and stuns for less time. + Jordie0608: + - rscadd: Admins can now filter watchlist entries to only users who are connected. + - tweak: Messages no longer delete themselves when sent. + Kor: + - rscadd: The limb grower has been replaced with a box of surplus limbs. Visit robotics + or harvest limbs from another person if you want quality. + Reeeeimstupid: + - rscadd: Silly Abductee objectives. Try not to go crazy trading life stories with + Lord Singulo. + Tofa01: + - tweak: Removes virology access to jobs including Medical Doctor, Geneticist and + Chemist. + - tweak: '[Delta] Changes NW supermatter filter to filter O2 instead of N2' + - rscadd: '[Delta] Adds wardrobes to Dorms & Arrivals Shuttle' + - rscadd: '[Delta] Adds access buttons to virology doors for extra security' + - rscadd: '[Delta] Adds bolt door button to all dorms' + - rscadd: '[Delta] Adds three pairs of optical meson scanners to supermatter room' + - rscadd: '[Delta] Adds a disk fridge to botany' + - rscadd: '[Delta] Adds a cake hat to the bar' + - bugfix: '[Delta] Fixes misplaced station intercom in Supermatter SMES room' + XDTM: + - rscadd: A Law Removal module can be build in RnD. It can remove a specified core + or freeform law. + - tweak: 'When stating laws, silicons won''t skip a number when hiding laws. (example: + 1. Law 1; 2. Law 2; 3. Law 4 if you choose not to state Law 3)' + Xhuis: + - rscadd: Artistic toolboxes now spawn in maintenance and possess various supplies + for wire art and crayon art. + - rscadd: Traitors can now obtain His Grace. Chaplains can buy it for 20 TC, or + it can be found in a surplus crate. + - rscadd: Soapstone messages can now be rated! Attack the message with your hand + to rate it positive or negative. Anyone can see the rating, and you cannot rate + a message more than once, even across rounds. + - rscdel: Soapstones no longer have a write time. + - tweak: Soapstones now have a fixed vocabulary to write messages with. + chanoc1: + - tweak: The salt and pepper shakers have new sprites. + coiax: + - rscadd: Added metal rods and floor tiles to Standard cyborgs. + - rscadd: Added a remote signaling device to Engineering cyborg. + - rscadd: Adds a 'Guardian of Balance' lawset and AI module, currently admin spawn + only. + uraniummeltdown: + - tweak: Kinetic Accelerator Cosmetic and Tracer Modkits now don't use mod capacity. + Cosmetic kits change the name of the KA. +2017-02-10: + Ausops: + - rscadd: Air tanks and plasma tanks have been resprited. + ChemicalRascal: + - tweak: Pen is able to wind up ruined tapes. + CoreOverload: + - rscadd: You can now emag the escape pods to launch them under any alert code. + - tweak: Shuttle name is no longer displayed on "Status" panel. Instead, you can + now examine a status screen to see it. + Cyberboss: + - bugfix: Simple animals now deathgasp properly again + - bugfix: Testmerged PRs will no longer duplicate in the list + - bugfix: Pods and shuttles now have air again + Joan: + - experiment: Clockwork Cults must always construct and activate the Ark. + - imageadd: Updates air tank inhands to match Ausops' new sprites. + Mekhi Anderson: + - rscadd: All mobs can now *spin! + - rscadd: Cyborgs now have handholds. This means you can ride around on them, but + if you get stunned or hit, you fall off! The cyborg can also throw you off by + spinning. + Tofa01: + - soundadd: Changes fire alarm to make new sound FireAlarm.ogg + Xhuis: + - rscdel: The Syndicate will no longer prank their operatives by including reverse + revolvers in surplus crates. + coiax: + - rscadd: A reverse revolver now comes in a box of hugs. + - rscadd: 'Added a new admin only event: Station-wide Human-level Intelligence. + Like the random animal intelligence event, but affecting as many animals as + there are ghosties.' + - rscadd: The Luxury Shuttle grabs cash in your wallet and backpack, and shares + approval between the entrance gates. + - rscadd: The NES Port shuttle now costs 500 credits. +2017-02-11: + Dannno: + - tweak: hahaha I switched your toolboxes you MORONS + Kor: + - rscadd: Killing bubblegum now unlocks a new shuttle for purchase. + Lzimann: + - tweak: Hardsuit built-in jetpacks no longer have a speed boost. + Pyko: + - bugfix: Fixed legit posters and map editing official/serial number for poster + decals. + Tofa01: + - bugfix: '[Delta] Fixes doors walls and windows being incorrectly placed due to + mapmerge issues.' + - bugfix: '[Box] Fixes access levels for HOP shutters.' +2017-02-12: + AnturK: + - rscadd: Added Poison Pen to uplink. + Drunk Musicians: + - rscadd: Drunk music + Gun Hog: + - rscadd: Nanotrasen Engineering has devised a construction console to assist with + building the Auxiliary Mining Base, usually located near a station's Arrivals + hallway. A breakthrough in bluespace technology, this console employs an advanced + internal Rapid Construction Device linked to a camera-assisted holocrane for + rapid, remote construction! + Lzimann: + - bugfix: MMIs/posibrains works with mechas again + RandomMarine: + - rscadd: The Russians have expanded to the shuttle business. A new escape shuttle + is available for purchase. + Sweaterkittens: + - tweak: Plasmamen burn damage multiplier reduced to 1.5x from 2x + coiax: + - rscdel: Removes the STV5 shuttle from purchase. + - rscadd: Swarmers no longer consume the deep fryer, since they have too much respect + for the potential fried foods it can produce. + - rscadd: The clown's survival/internals box is now a box of hugs. Dawww. +2017-02-13: + ChemicalRascal: + - tweak: Delta station brig cell chairs have been replaced with beds. One bed per + cell, no funny business. + Cyberboss: + - bugfix: Simple animals that are deleted when killed will now deathrattle + - bugfix: Fixed Alt-click stack duplication + Joan: + - imageadd: Updated the back and belt sprites for airtanks to match the new sprites. + Kor: + - rscadd: Mobile pAIs are now slower than humans. + Swindly: + - rscadd: Added Nuka Cola as a premium item in Robust Softdrinks + Tofa01: + - bugfix: '[Delta] Fixes double windoor on chemistry windows.' + - tweak: Lowered volume of fire alarm sound also makes it more quiet. + coiax: + - rscadd: Added an admin only tool, the life candle. Touch the candle, and when + you die, you'll respawn shortly afterwards. Touch it again to stop. Used for + testing, thunderdome brawls and good old fashioned memery. + - bugfix: Fried foods no longer shrink to miniature size. +2017-02-14: + Cyberboss: + - bugfix: Fixed unequipping items while stunned + - bugfix: Fixed various things deleting when unequipped + - bugfix: Fixed tablet ID slots deleting cards + - bugfix: Fixed water mister nozzle getting stuck in hands + - tweak: Title music now starts immediately upon login + - tweak: You can no longer sharpen energy weapons + Joan: + - tweak: Mania Motors are overall less effective and only affect people who can + see the motor. + - tweak: Mania Motors have slightly more health; 100, from 80. + MrStonedOne: + - tweak: Station time is now always visible in the status tab. + - tweak: Both server time and station time now displays seconds so you can actively + see how game time (ByondTime[tm]) is progressing along side real time. + - rscadd: Added a time dilation tracker, this allows you to better understand how + time will progress in game. It shows the time dilation percent for the last + minute as well as some rolling averages. + RandomMarine: + - tweak: Pre-made charcoal pills now contain 10 units instead of 50. The amount + of pills inside of toxin first aid kits and the smartfridge have been increased + to compensate. Keep in mind that each ten unit pill recovers 100 points of toxin + damage and purges 50 units of other reagents. + Steelpoint: + - tweak: All Drones now have a walking animation. + Tofa01: + - bugfix: '[Delta] Fixes space cleaner being empty in brig medbay' + - bugfix: '[Delta] Fixes some areas that are not radiation proof' + - bugfix: '[Meta] Fixes Atmospherics Freezer Spawning As A Heater' + uraniummeltdown: + - rscadd: Window Flashing is now a preference + - rscadd: Your game window will flash when alerted as a ghost. This includes being + revived by defibs/cloning and events such as borers, swarmers, revenant, etc. +2017-02-16: + Cyberboss: + - rscadd: Test merged PRs are now more detailed + Steelpoint: + - rscadd: The Head of Security's Hardsuit is now equipped with a inbuilt Jetpack. + coiax: + - rscadd: The Hyperfractal Gigashuttle is now purchasable for 100,000 credits. Help + Centcom by testing this very safe and efficient shuttle design. (Terms and conditions + apply.) + - rscadd: The changeling power "Anatomic Panacea" now causes the changeling to vomit + out zombie infections, along with headslugs and xeno infections, as before. + - bugfix: The main CTF laser gun disappears when dropped on the floor. +2017-02-17: + Arianya: + - tweak: The Labour Camp rivet wall has been removed! + - spellcheck: Fixed some typos in Prison Ofitser's description. + Cobby: + - experiment: Flashes have been rebalanced to be more powerful + Cyberboss: + - bugfix: Rack construction progress bars will no longer be spammed + - tweak: The round start timer will count down during subsystem initialization + - tweak: Total subsystem initialization time will now be displayed + Joan: + - rscdel: His Grace no longer globally announces when He is awakened or falls to + sleep. + - rscdel: His Grace is not a toolbox, even if He looks like one. + - experiment: His Grace no longer requires organs to awaken. + - tweak: His Grace now gains 4 force for each victim consumed, always provides stun + immunity, and will, generally, take longer to consume His owner. + - experiment: His Grace must be destroyed to free the bodies within Him. + - experiment: Dropping His Grace while He is awake will cause you to suffer His + Wrath until you hold Him again. + - rscadd: His Grace becomes highly aggressive after consuming His owner, and will + hunt His own prey. + - experiment: The Ark of the Clockwork Justicar now only costs 3 of each component + to summon, but must consume an additional 7 of each component before it will + activate and start counting down. + - rscadd: The presence of the Ark will be immediately announced, though the location + will still only be announced after it has been active and counting down for + 2 minutes. + - tweak: The Ark also requires an additional invoker to invoke. + Lobachevskiy: + - bugfix: Fixed glass shards affecting buckled and flying mobs + MrStonedOne: + - experiment: The game will now force hardware rendering on for all clients. + Nienhaus: + - rscadd: Drying racks have new sprites. + Swindly: + - rscadd: Trays can now be used to insert food into food processors + Thunder12345: + - bugfix: It's ACTUALLY possible to pat people on the head now + WJohn: + - imageadd: Improved blueshift sprites, courtesy of Nienhaus. + XDTM: + - rscadd: Bluespace Crystals are now a material that can be inserted in Protolathes + and Circuit Printers. Some items now require Bluespace Mesh. + - rscadd: Bluespace Crystal can now be ground in a reagent grinder to gain bluespace + dust. It has no uses, but it teleports people if splashed on them, and if ingested + it will occasionally cause teleportation. + coiax: + - rscadd: Engraved messages now have a UI, which any player, living or dead can + access. See when the message was engraved, and upvote or downvote accordingly. + - rscadd: Admins have additional options with the UI, seeing the player ckey, original + character name, and the ability to outright delete messages at the press of + a button. + kevinz000: + - bugfix: Flightsuits actually fly over people + - bugfix: Flightsuits don't interrupt pulls when you pass through doors +2017-02-18: + Cyberboss: + - imageadd: New round end animation. Inspired by @Iamgoofball + Gun Hog: + - rscadd: The Aux Base console now controls turrets made by the construction console. + - rscadd: The Aux Base may now be dropped at a random location if miners fail to + use the landing remote. + - rscadd: The mining shuttle may now dock at the Aux Base's spot once the base is + dropped. + - tweak: Removed access levels on the mining shuttle so it can be used at the public + dock. + - tweak: The Aux Base's turrets now fire through glass. Reminder that the turrets + need to be installed outside the base for full damage. + - rscadd: Added a base construction console to Delta Station. + Mysterious Basilman: + - rscadd: More powerful toolboxes are active in this world... + Scoop: + - tweak: Condimasters now correctly drop their items in front of their sprite. + Tofa01: + - bugfix: Re-Arranges And Extends Pubby Escape Hallway To Allow Larger Shuttle To + Dock + - bugfix: '[Meta] Fixes top left grounding rod from being destroyed by the Tesla + engine.' + TrustyGun: + - rscadd: Traitor mimes can now learn two new spells for 15 tc. + - rscadd: The first, Invisible Blockade, creates a 3x1 invisible wall. + - rscadd: The second, Finger Guns, allows them to shoot bullets out of their fingers. + kevinz000: + - rscadd: You can now ride piggyback on other human beings, as a human being! To + do so they must grab you aggressively and you must climb on without outside + assistance without being restrained or incapacitated in any manner. They must + also not be restrained or incapacitated in any manner. + - rscadd: If someone is riding on you and you want them to get off, disarm them + to instantly floor them for a few seconds! It's pretty rude, though. + rock: + - soundadd: you can now harmlessly slap somebody by aiming for the mouth on disarm + intent. + - soundadd: you can only slap somebody who is unarmed on help intent, restrained, + or ready to slap you. +2017-02-19: + Basilman: + - rscadd: some toolboxes, very rarely, have more than one latch + Joan: + - rscadd: You can now put components, and deposit components from slabs, directly + into the Ark of the Clockwork Justicar provided it actually requires components. + - experiment: Taunting Tirade now leaves a confusing and weakening trail instead + of confusing and weakening everyone in view. + - tweak: Invoking Inath-neq/Nzcrentr is now 33% cheaper and has a 33% lower cooldown. + Tofa01: + - rscdel: '[Delta] Removes SSU From Mining Equipment Room' + - tweak: Changes centcomm ferry to require centcomm general access instead of admin + permission. + coiax: + - rscadd: Nuke ops syndicate cyborgs have been split into two seperate uplink items. + Medical cyborgs now cost 35 TC, assault cyborgs now cost 65 TC. + grimreaperx15: + - tweak: Blood Cult Pylons will now rapidly regenerate any nearby cultists blood, + in addition to the normal healing they do. + ma44: + - tweak: Intercepted messages from a lavaland syndicate base reveals they have additional + grenade and other miscellaneous equipment. + uraniummeltdown: + - rscadd: Shuttle engines have new sprites. +2017-02-20: + Cyberboss: + - bugfix: The frequncy fire alarms play at is now consistent + MrStonedOne: + - tweak: bluespace ore cap changed from 100 ores to 500 + Tofa01: + - tweak: '[Meta] Replaces orange jumpsuit in holding cell with prisoner jumpsuits' + XDTM: + - tweak: Repairing someone else's robotic limb is instant. Repairing your own robotic + limbs will still take time. + - tweak: Repairing limbs with cable or welding will now heal more. + Xhuis: + - bugfix: Medipens are no longer reusable. +2017-02-21: + Cyberboss: + - bugfix: You can now unshunt as a malfunctioning AI again + Kor: + - bugfix: You will now retain your facing when getting pushed by another mob. + Tofa01: + - bugfix: '[Z2] Fixed Centcomm shutters to have proper access levels for inspectors + and other Admin given roles' + coiax: + - rscadd: Refactors heart attack code, a cardiac arrest will knock someone unconscious + and kill them very quickly. + - rscadd: Adds corazone, an anti-heart attack drug, made by mixing 2 parts Phenol, + 1 part Lithium. A person with corazone in their system will not suffer any negative + effects from missing a heart. Use it during surgery. + - rscadd: Abductor glands are now hearts, the abductor operation table now automatically + injects corazone to prevent deaths during surgery. The gland will restart if + it stops beating. + - bugfix: Cloning pods always know the name of the person they are cloning. + - rscadd: You can swipe a medical ID card to eject someone from the cloning pod + early. The cloning pod will announce this over the radio. + - rscdel: Fresh clones have no organs or limbs, they gain them during the cloning + process. Ejecting a clone too early is not recommended. Power loss will also + eject a clone as before. + - rscdel: An ejected clone will take damage from being at critical health very quickly + upon ejection, rather than before, where a clone could be stable in critical + for up to two minutes. + - rscadd: Occupants of cloning pods do not interact with the air outside the pod. + uraniummeltdown: + - bugfix: All shuttle engines should now be facing the right way +2017-02-22: + AnonymousNow: + - rscadd: Added Medical HUD Sunglasses. Not currently available on-station, unless + you can convince Centcom to send you a pair. + Cyberboss: + - bugfix: Spawning to the station should now be a less hitchy experience + MrPerson: + - experiment: 'Ion storms have several new additions:' + - rscadd: 25% chance to flatly replace the AI's core lawset with something random + in the config. Suddenly the AI is Corporate, deal w/ it. + - rscadd: 10% chance to delete one of the AI's core or supplied laws. Hope you treated + the AI well without its precious law 1 to protect your sorry ass. + - rscadd: 10% chance that, instead of adding a random law, it will instead replace + one of the AI's existing core or supplied laws with the ion law. Otherwise, + it adds the generated law as normal. There's still a 100% chance of getting + a generated ion law. + - rscadd: 10% chance afterwards to shuffle all the AI's laws. + TalkingCactus: + - bugfix: New characters will now have their backpack preference correctly set to + "Department Backpack". + Tofa01: + - bugfix: '[Delta] Fixes missing R&D shutter near public autolathe' + Xhuis: + - tweak: Highlanders can no longer hide behind chairs and plants. + - tweak: Highlanders no longer bleed and are no longer slowed down by damage. +2017-02-23: + Cyberboss: + - bugfix: Fixed a bug where the fire overlay wasn't getting removed from objects + - bugfix: The graphical delays with characters at roundstart are gone + - bugfix: The crew manifest is working again + - rscadd: Admins can now asay with ":p" and dsay with ":d" + Dannno: + - imageadd: Robust Softdrinks LLC. has sent out new vendies to the stendy. + Joan: + - rscdel: Off-station and carded AIs no longer prevent Judgement scripture from + unlocking. + Nienhaus: + - tweak: Updates ammo sprites to the new perspective. + Tofa01: + - bugfix: Disables sound/frequency variance on cryo tube alert sound + coiax: + - rscadd: Nanotrasen reminds its employees that they have ALWAYS been able to taste. + Anyone claiming that they've recently only just gained the ability to taste + are probably Syndicate agents. +2017-02-24: + MrStonedOne: + - rscdel: Limit on Mining Satchel of Holding Removed + - tweak: Dumping/mass pickup/mass transfer of items is now lag checked + - rscadd: Dumping/mass pickup/mass transfer of items has a progress bar +2017-02-25: + AnonymousNow: + - rscadd: Nerd Co. has sent pairs of thicker prescription glasses out to Nanotrasen + stations, for your local geek to wear. + Basilman: + - rscadd: New box sprites + Robustin: + - tweak: Hulks can no longer use pneumatic cannons or flamethrowers + Tofa01: + - rscadd: '[All Maps] The new and improved Centcom transportation ferry version + 2.0 is out now!' + coiax: + - rscadd: Cargo can now order plastic sheets to make plastic flaps. No doubt other + uses for plastic will be discovered in the future. + - rscadd: To deconstruct plastic flaps, unscrew from the floor, then cut apart with + wirecutters. Plastic flaps have examine tips like reinforced walls. + uraniummeltdown: + - rscadd: Science crates now have new sprites +2017-02-26: + Ausops: + - imageadd: New sprites for water, fuel and hydroponics tanks. + Joan: + - experiment: 'Clockwork objects are overall easier to deconstruct:' + - wip: Clockwork Walls now take 33% less time to slice through, Brass Windows now + work like non-reinforced windows, and Pinion Airlocks now have less health and + only two steps to decon(wrench, then crowbar). + - rscadd: EMPing Pinion Airlocks and Brass Windoors now has a high chance to open + them and will not shock or bolt them. + - rscadd: Anima fragments will very gradually self-repair. + Tofa01: + - bugfix: '[Omega] Fixes ORM input and output directions' + - bugfix: Fixes space bar kitchen freezer access level + - bugfix: Fixes giving IDs proper access for players who spawn on a ruin via a player + sleeper/spawners + - bugfix: '[Delta] Fixes varedited tiles causing tiles to appear as if they have + no texture' + - bugfix: Fixes robotic limb repair grammar issue +2017-02-27: + Kor, Jordie0608 and Tokiko1: + - rscadd: Singularity containment has been replaced on box, meta, and delta with + a supermatter room. The supermatter gives ample warning when melting down, so + hopefully we'll see fewer 15 minute rounds ended by a loose singularity. + - rscadd: Supermatter crystals now collapse into singularities when they fail, rather + than explode. + Tofa01: + - bugfix: Stops AI And Borgs From Interfacing With Ferry Console + TrustyGun: + - imageadd: Box sprites are improved. + WJohnston: + - imageadd: New and improved BRPED beam. The old one was hideous. + coiax: + - rscadd: Drone shells are now points of interest in the orbit list. + - rscadd: Derelict drone shells now spawn with appropriate headgear. +2017-02-28: + Cyberboss: + - tweak: You will no longer be shown empty memories when the game starts + - bugfix: Built APCs now work again + - bugfix: Borg AI cameras now work again + Joan: + - rscadd: Anima Fragments now slam into non-Servants when bumping. This will ONLY + happen if the fragment is not slowed, and slamming into someone will slightly + damage the fragment and slow it severely. + Lzimann: + - tweak: Communications console can also check the ID the user is wearing. + Supermichael777: + - tweak: The button now has a five second delay when detonating bombs + XDTM: + - rscadd: You can now change the input/output directons for Ore Redemption Machines + by using a multitool on them with the panel open. + - rscadd: Diagnostic HUDs can now see if airlocks are shocked. +2017-03-01: + Cyberboss: + - bugfix: Lobby music is no longer delayed +2017-03-02: + Gun Hog: + - tweak: Advanced camera, Slime Management, and Base Construction consoles may now + be operated by drones and cyborgs. + Robustin: + - rscadd: The syndicate power beacon will now announce the distance and direction + of any engines every 10 seconds. + Steelpoint: + - rscadd: Robotics and Mech Bay have seen a mapping overhaul on Boxstation. + - rscadd: A cautery surgical tool has been added to the Robotics surgical area on + Boxstation. + XDTM: + - tweak: Hallucinations have been modified to increase the creepiness factor and + reduce the boring factor. + - rscadd: Added some new hallucinations. + - bugfix: Fixed a bug where the singularity hallucination was stunning for longer + than intended and leaving the fake HUD crit icon permanently. + coiax: + - rscadd: Ghosts are polled if they want to play an alien larva that is about to + chestburst. They are also told who is the (un)lucky victim. + - bugfix: Clones no longer gasp for air while in cloning pods. + - rscadd: Adds a new reagent, "Mime's Bane", that prevents all emoting while it + is in a victim's system. Currently admin only. + - experiment: Mappers now have an easier time adding posters, and specifying whether + they're random, random official, random contraband or a specific poster. + - rscdel: Posters no longer have serial numbers when rolled up; their names are + visible instead. + kevinz000: + - rscadd: You can now craft pressure plates. + - rscadd: Pressure plates are hidden under the floor like smuggler satchels are, + but you can attach a signaller to them to have it signal when a mob passes over + them! + - experiment: Bomb armor is now effective in lessening the chance of being knocked + out by bombs. +2017-03-03: + Cyberboss: + - tweak: You can now repair shuttles in transit space + Incoming5643: + - imageadd: 'Server Owners: There is a new system for title screens accessible from + config/title_screen folder.' + - rscadd: This system allows for multiple rotating title screens as well as map + specific title screens. + - rscadd: It also allows for hosting title screens in formats other than DMI. + - rscadd: 'See the readme.txt in config/title_screen for full details. remove: The + previous method of title screen selection, the define TITLESCREEN, has been + depreciated by this change.' + Sligneris: + - imageadd: Updated sprites for the small xeno queen mode +2017-03-04: + Cyberboss: + - bugfix: You can build lattice in space again + Hyena: + - tweak: Detective revolver/ammo now starts in their shoulder holster + Joan: + - tweak: Weaker cult talismans take less time to imbue. + PJB3005: + - rscadd: Rebased to /vg/station lighting code. + Supermichael777: + - rscadd: Grey security uniforms have unique names and descriptions + Tofa01: + - rscadd: Adds the new Centcomm Raven Battlecruiser to the purchasable shuttle list + buy now get one free! + coiax: + - rscadd: CTF players start with their helmet toggled off, better to see the whites + of their opponents eyes. Very briefly. + - bugfix: Existing CTF barricades are repaired between rounds, and deploy instantly + when replaced. + - tweak: Healing non-critical CTF damage is faster. Remember though, if you drop + into crit, YOU DIE. + - rscadd: Admin ghosts can just click directly on the CTF controller to enable them, + in addition to using the Secrets panel. + - bugfix: Cyborg radios can no longer have their inaccessible wires pulsed by EMPs. +2017-03-06: + Cyberboss: + - experiment: Map rotation has been made smoother + Gun Hog: + - bugfix: The Aux Base Construction Console now directs to the correct Base Management + Console. + - bugfix: The missing Science Department access has been added to the Auxiliary + Base Management Console. + Hyena: + - rscdel: Space bar is out of bussiness + MrStonedOne: + - bugfix: patched a hacky workaround for /vg/lights memory leaking crashing the + server + Penguaro: + - bugfix: Changed DIR of Gas Filter for O2 in Waste Loop from 1 to 4 + Sligneris: + - imageadd: '''xeno queen'' AI hologram now actually uses the xeno queen sprite + as a reference' + Tofa01: + - bugfix: '[Omega] Fixes missing walls and wires new dock to the powergrid' + XDTM: + - rscadd: Changelings can now click their fake clothing to remove it, without needing + to drop the full disguise. + coiax: + - rscadd: The Bardrone and Barmaid are neutral, even in the face of reality altering + elder gods. +2017-03-07: + Supermichael777: + - rscadd: Wannabe ninjas have been found carrying an experimental chameleon belt. + The Spider clan has disavowed any involvement. +2017-03-08: + Cyberboss: + - imageadd: Added roundstart animation + - experiment: Roundstart should now be a smoother experience... again + - bugfix: You can now scan storage items with the forensic scanner + - bugfix: Unfolding paper planes no longer deletes them + - bugfix: Plastic no longer conducts electricity + - tweak: The map rotation message will only show if the map is actually changing + Francinum: + - bugfix: Holopads now require power. + Fun Police: + - tweak: Reject Adminhelp and IC Issue buttons have a cooldown. + Joan: + - rscadd: Circuit tiles now glow faintly. + - rscadd: Glowshrooms now have colored light. + - tweak: Tweaked the potency scaling for glowshroom/glowberry light; high-potency + plantss no longer light up a huge area, but are slightly brighter. + Kor: + - rscadd: People with mutant parts (cat ears) are no longer outright barred from + selecting command roles in their preferences, but will have their mutant parts + removed on spawning if they are selected for that role. + LanCartwright: + - rscadd: Adds scaling damage to buckshot. + Robustin: + - tweak: The DNA Vault has 2 new powers + - tweak: The DNA Vault requires super capacitors instead of quadratic + - tweak: Cargo's Vault Pack now includes DNA probes + Supermichael777: + - rscadd: Robust Soft Drinks LLC is proud to announce Premium canned air for select + markets. There is not an air shortage. Robust Soft Drinks has never engaged + in any form of profiteering. + TalkingCactus: + - rscadd: Energy swords (and other energy melee weapons) now have a colored light + effect when active. + Tofa01: + - bugfix: '[All Maps] Fixes syndicate shuttles spawning too close to stations by + moving their spawn further from the station' + - rscadd: '[Omegastation] This station now has a syndicate shuttle and syndicate + shuttle spawn.' + coiax: + - rscadd: Wizards now have a new spell "The Traps" in their spellbook. Summon an + array of temporary and permanent hazards for your foes, but don't fall into + your own trap(s)! + - rscadd: Permanent wizard traps can be triggered relatively safely by throwing + objects across the trap, or examining it at close range. The trap will then + be on cooldown for a minute. + - rscadd: Toy magic eightballs can now be found around the station in maintenance + and arcade machines. Ask your question aloud, and then shake for guidance. + - rscadd: Adds new Librarian traitor item, the Haunted Magic Eightball. Although + identical in appearance to the harmless toys, this occult device reaches into + the spirit world to find its answers. Be warned, that spirits are often capricious + or just little assholes. + - rscadd: You only have a headache looking at the supermatter if you're a human + without mesons. + - rscadd: The supermatter now speaks in a robotic fashion. + - rscadd: Admins have a "Rename Station Name" option, under Secrets. + - rscadd: A special admin station charter exists, that has unlimited uses and can + be used at any time. + - rscadd: Added glowsticks. Found in maintenance, emergency toolboxes and Party + Crates. + kevinz000: + - rscadd: The Syndicate reports a breakthrough in chameleon laser gun technology + that will disguise its projectiles to be just like the real thing! +2017-03-10: + Cyberboss: + - bugfix: You should no longer be seeing entities with `\improper` in front of their + name + - rscadd: The arrivals shuttle will now ferry new arrivals to the station. It will + not depart if any intelligent living being is on board. It will remain docked + if it is depressurized. + - tweak: You now late-join spawn buckled to arrivals shuttle chairs + - tweak: Ghost spawn points have been moved to the center of the station + - tweak: Departing shuttles will now try and shut their docking airlocks + - bugfix: The arrivals shuttle airlocks are now properly cycle-linked + - bugfix: You can now hear hyperspace sounds outside of shuttles + - experiment: The map loader is faster + - tweak: Lavaland will now load instantly when the game starts + Jordie0608: + - tweak: The Banning Panel now organises search results into pages of 15 each. + XDTM: + - bugfix: Slimes can now properly latch onto humans. + - bugfix: Slimes won't aggro neutral mobs anymore. This includes blood-spawned gold + slime mobs. + - rscadd: Clicking on a tile with another tile and a crowbar in hand directly replaces + the tile. + Xhuis: + - imageadd: Ratvar and Nar-Sie now have fancy colored lighting! + coiax: + - rscadd: Wizards can now use their magic to make ghosts visible to haunt the crew, + and possibly attempt to betray the wizard. + - rscadd: When someone dies, if their body is no longer present, the (F) link will + instead jump to the turf they previously occupied. + - bugfix: Stacks of materials will automatically merge together when created. You + may notice differences when ejecting metal, glass or using the cash machine + in the vault. + - rscadd: You can find green and red glowsticks in YouTool vending machines. + fludd12: + - bugfix: Modifying/deconstructing skateboards while riding them no longer nails + you to the sky. + lordpidey: + - rscadd: Glitter bombs have been added to arcade prizes. +2017-03-11: + AnturK: + - rscadd: Traitors now have access to radio jammers for 10 TC + Hyena: + - bugfix: fixes anti toxin pill naming + Joan: + - tweak: Window construction steps are slightly faster; normal windows now take + 6 seconds with standard tools, from 7 and reinforced windows now take 12 seconds + with standard tools, from 14. + - tweak: Brass windows take 8 seconds with standard tools, from 7. + - rscadd: Added Shadowshrooms as a glowshroom mutation. They do exactly what you'd + expect. + - rscdel: Removed His Grace ascension. + PKPenguin321: + - tweak: Cryoxadone's ability to heal cloneloss has been greatly reduced. + - rscadd: Clonexadone has been readded. It functions exactly like cryoxadone, but + only heals cloneloss, and at a decent rate. Brew it with 1 part cryoxadone, + 1 part sodium, and 5 units of plasma for a catalyst. + Penguaro: + - tweak: Adjusted table locations + - tweak: Moved chair and Cargo Tech start location + - tweak: Moved filing cabinet + - rscdel: Removed Stock Computer + Tofa01: + - bugfix: '[Meta] Fixes Supermatter Shutters Not Working' + coiax: + - rscadd: Swarmer lights are coloured cyan. + kevinz000: + - bugfix: Deadchat no longer has huge amount of F's. +2017-03-12: + JStheguy: + - imageadd: Changed Desert Eagle sprites, changed .50 AE magazine sprites, added + Desert Eagle magazine overlay to icons/obj/guns/projectile.dmi. + - tweak: The empty Desert Eagle sprite now only displays on an empty chamber. The + existence or lack thereof of the magazine is rendered using an overlay instead. + Lzimann: + - tweak: Braindead has a more intuitive message + coiax: + - rscdel: A cloner that is EMP'd will merely eject the clone early, rather than + gibbing it. Emagging the cloner will still gib the clone. +2017-03-13: + Cyberboss: + - tweak: You must now be on any intent EXCEPT help to weld an airlock shut + - rscadd: You can now repair airlocks with welding tools on help intent (broken + airlocks still need their wires mended though) + Cyberboss, Bgobandit, and Yogstation: + - rscadd: The HoP can now prioritze roles for late-joiners + Every coder, player, and admin in Space Station 13: + - rscadd: Adds the Tomb Of The Unknown Employee to Central Command, + - rscadd: Rest in peace, those who died after contributing to Space Station 13. + Hyena: + - bugfix: Surplus leg r/l name fixed + - bugfix: You can now carry honey in plant bags + Lordpidey: + - bugfix: Devils can no longer break into areas with sheer force of disco funk + - rscadd: The pitchfork of an ascended devil can now break down walls. + - rscadd: Hell has decided to at least clothe it's devils when sending them a brand + new body. + - rscadd: Pitchforks glow red now. + Penguaro: + - rscdel: '**Engineering** - Removed Tables, paper bin, and pen' + - rscadd: '**Engineering** - Replaced with Welder and Electrical Lockers' + - rscadd: '**Engineering** - Moved First-Aid Burn kit to Engineering Foyer' + - tweak: '**Chapel** - Replaced one Window with Win-Door for Coffin Storage' + Space Bicycle Consortium: + - bugfix: Bicycles now only cost 10,000 yen, down from 1,000,000 yen. + coiax: + - rscadd: The egg spawner on Metastation will generate a station message and inform + the admins if an egg is spawned. (It's only a two percent chance, but live in + hope.) + - rscadd: Glowsticks can now be found in "Swarmer Cyan" colors. +2017-03-14: + Joan: + - rscadd: Shuttles now have dynamic lighting; you can remove the lights on them + and use your own lights. + - tweak: All maps now use Deltastation's fancy syndicate shuttle. + - tweak: Shadowshrooms of lower potency are much less able to blanket the station + in darkness. + PKPenguin321: + - tweak: Lattices now require wirecutters to deconstruct, rather than welding tools. +2017-03-15: + Cyberboss: + - bugfix: You can no longer depart on the arrivals shuttle by hiding inside things + Joan: + - tweak: Proselytizers converting clockwork floors to walls now always take 10 seconds, + regardless of how fast the proselytizer is. + - tweak: Clockwork grilles no longer provide CV. + Penguaro: + - bugfix: '**Engineering** - Changed Access Level from **24** (_Atmo_) to **10** + (_Engine_) on **Radiation Shutter Control**' + TrustyGun: + - tweak: Traitor Mimes with the finger guns spell now fire 3 bullets at a time, + as opposed to just 1. + octareenroon91: + - rscadd: Allow new reflector frames to be built from metal sheets. + oranges: + - rscdel: Removed patting +2017-03-16: + BASILMAN YOUR MAIN MAN: + - rscadd: The BM Speedwagon has been improved both in terms of aesthetics and performance! + Cyberboss: + - bugfix: The shield generators in Boxstation Xenobiology now have the correct access + Joan: + - rscadd: Cult structures that emitted light now have colored light. + MrPerson: + - rscadd: Humans can see in darkness slightly again. This is only so you can see + where you are when the lights go out. + MrStonedOne: + - bugfix: Fixed lighting not updating when a opaque object was deleted + Penguaro: + - tweak: Increased Synchronization Range on Exosuit Fabricator + Tofa01: + - bugfix: '[Delta] Fixes telecoms temperature and gas mixing / being contaminated.' + - bugfix: '[Delta] Fixes some doubled up turfs causing items and objects to get + stuck to stuff' + - tweak: '[Omega] Makes telecoms room cool down and be cold.' + Tokiko1: + - rscadd: Most gases now have unique effects when surrounding the supermatter crystal. + - tweak: The supermatter crystal can now take damage from too much energy and too + much gas. + - rscadd: Added a dangerous overcharged state to the supermatter crystal. + - rscadd: Readded explosion delaminations, a new tesla delamination and allowed + the singulo delamination to absorb the supermatter. + - tweak: The type of delamination now depends on the state of the supermatter crystal. + - tweak: Various supermatter engine rebalancing and fixes. + kevinz000: + - rscadd: SDQL2 now supports outputting proccalls to variables, and associative + lists + peoplearestrange: + - bugfix: Fixed buildmodes full tile window to be correct path + rock: + - tweak: if we can have glowsticks in toolvends why not flashlights amirite guys +2017-03-17: + BeeSting12: + - bugfix: Moved Metastation's deep fryer so that the chef can walk all the way around + the table. + Cobby: + - tweak: The gulag mineral ratio has been tweaked so there are PLENTY of iron ore, + nice bits of silver/plasma, with the negative of having less really high valued + ores. If you need minerals, it may be a good time to ask the warden now! + Joan: + - rscadd: You can now place lights and most wall objects on shuttles. + Xhuis: + - rscadd: Added the power flow control console, which allows remote manipulation + of most APCs on the z-level. You can find them in the Chief Engineer's office + on all maps. +2017-03-18: + Supermichael777: + - rscadd: Free golems can now buy new ids for 250 points. + XDTM: + - rscadd: You can now complete a golem shell with runed metal, if you somehow manage + to get both. + - rscadd: Runic golems don't have passive bonuses over golems, but they have some + special abilities. + coiax: + - bugfix: The alert level is no longer lowered by a nuke's detonation. +2017-03-19: + BeeSting12: + - rscadd: Nanotrasen has decided to better equip the box-class emergency shuttles + with a recharger on a table in the cockpit. + Cheridan: + - tweak: The slime created by a pyroclastic anomaly detonating is now adult and + player-controlled! Reminder that if you see an anomaly alert, you should grab + an analyzer and head to the announced location to scan it, and then signal the + given frequency on a signaller! + Penguaro: + - bugfix: change access variables for turrets and shield gens + - bugfix: Box Station - Replaces the smiling table grilles with their more serious + counterparts. + coiax: + - tweak: The Syndicate lavaland base now has a single self destruct bomb located + next to the Communications Room. Guaranteed destruction of the base is guaranteed + by payloads embedded in the walls. + octareenroon91: + - bugfix: Fixes infinite vaping bug. + uraniummeltdown: + - rscadd: Plant data disks have new sprites. + - bugfix: Fixed Monkey Recycler board not showing in Circuit Imprinter + - tweak: Kinetic Accelerator Range Mod now takes up 25% space instead of 24% +2017-03-21: + ExcessiveUseOfCobblestone: + - experiment: All core traits [Hydroponics] scale with the parts in the gene machine. + Time to beg Duke's Guide Read.... I mean RND! + - tweak: Data disks with genes on them will have just the name of the gene instead + of the prefix "plant data disk". + - tweak: If you were unaware, you can rename these disks with a pen. Now, you can + also change the description if you felt inclined to. + Joan: + - experiment: Caches produce components every 70 seconds, from every 90, but each + other linked, component-producing cache slows down cache generation by 10 seconds. + Lombardo2: + - rscadd: The tentacle changeling mutation now changes the arm appearance when activated. + MrPerson: + - bugfix: Everyone's eyes aren't white anymore. + Penguaro: + - tweak: Box Station - The Vents and Scrubbers for the Supermatter Air Alarm are + now isolated from the rest of the Air Alarms in Engineering. + Supermichael777: + - bugfix: Chasms now smooth properly. + Tokiko1: + - tweak: Minor supermatter balancing changes. + - tweak: Supermatter now announces its damage half as frequently. + - tweak: Badly unstable supermatter now occasionally zaps nearby engineers and causes + anomalies to appear nearby, similar to overcharged supermatter. + XDTM: + - rscadd: Golem Shells can now be completed with medical gauze or cloth to form + cloth golems, which are weaker and extremely flammable. However, if they die, + they turn into a pile of cloth that will eventually re-animate back into full + health. That is, unless someone lights it on fire. +2017-03-22: + BeeSting12: + - rscadd: Added an autolathe circuit board to deltastation's tech storage. + - rscadd: Added 49 sheets of metal to deltastation's auxiliary tool storage. + Iamgoofball: + - bugfix: Freon no longer bypasses atmos hardsuits. + Penguaro: + - rscadd: Meta - Added Tool Belts to Engineering and Engineering Foyer + - rscdel: Meta - Removed Coffee Machine from Permabrig + - rscadd: Added Cameras for Supermatter Chamber (to view rad collectors and crystal) + - tweak: Adjusted Engine Camera Names for Station Consistency + - bugfix: Adjusted Monitor Names / Networks to view the Engine Cameras + coiax: + - rscadd: APCs now glow faintly with their charging lights. So red is not charging, + blue is charging, green is full. Emagged APCs are also blue. Broken APCs do + not emit light. + - rscadd: Alien glowing resin now glows. +2017-03-23: + Joan: + - tweak: Clock cults always have to summon Ratvar, but that always involves a proselytization + burst. + - rscdel: The proselytization burst will no longer convert heretics, leaving Ratvar + free to chase them down. + - spellcheck: Places that referred to the Ark of the Clockwork Justicar as the "Gateway + to the Celestial Derelict" have been corrected to always refer to the Ark. + Penguaro: + - bugfix: Wizard Ship - Bolts that floating light to the wall. + XDTM: + - rscadd: Medical Gauze now stacks up to 12 + - bugfix: Pressure plates are now craftable. + bgobandit: + - tweak: Alt-clicking a command headset toggles HIGH VOLUME mode. + coiax: + - bugfix: A dead AI no longer counts as an "unconverted AI" for clockcult. +2017-03-24: + BeeSting12: + - bugfix: Auxiliary base maintenance airlock now requires the proper access. Sorry + greyshirts, no loot for you! + Cyberboss: + - tweak: The recycler's base reclaim rate has been buffed from 1% to 50%. Manipulator + upgrades now give +12.5% per level instead of +25% + - bugfix: You can now successfully remove a pen from a PDA while it's in a container + Fox McCloud: + - rscadd: Modular receiver removed from the protolathe to autolathe + - tweak: Modular receiver cost is now 15,000 metal + Joan: + - bugfix: Fixes structures being unable to go through spatial gateways. + - tweak: Blazing Oil blobs take 33% less damage from water. + Penguaro: + - rscadd: '[Meta] Replaced Power Monitoring Console in Engineering with Modular + Engineering Console' + - rscadd: '[Pubby] Replaced Power Monitoring Console in Engineering with Modular + Engineering Console' + - rscadd: '[Omega] Replaced Power Monitoring Console in Engineering with Modular + Engineering Console' + - rscadd: '[Omega] Added RD and Command Modular Consoles to Bridge' + - rscadd: '[Delta] Replaced Power Monitoring Console in Engineering with Modular + Engineering Console' + - rscadd: '[Delta] Replaced duplicate Atmospherics Monitoring Console in Atmo with + Modular Engineering Console' + coiax: + - rscadd: Destroying a lich's body does not destroy the lich permanently, provided + the phylactery is intact. + - rscadd: A lich will respawn three minutes after its death, provided the phylactery + is intact. + - rscadd: The Soul Bind spell is forgotten after cast, respawn is now automatic. + - rscdel: Stationloving objects like the nuke disk are not valid objects for a phylactery. + - rscadd: Explosive implants can always be triggered via action button, even if + unconscious. + rock: + - tweak: lizards are hurt slightly more by cold but less by heat. this does not + mean they are more resistant to being lasered, fortunately. +2017-03-26: + BeeSting12: + - spellcheck: The bar shuttle's buckable bar stools are now buckleable bar stools. + Gun Hog and Shadowlight213: + - rscadd: The AI may now deploy to cyborgs prepared as AI shells. The module to + do this may be research in the exosuit fabricator. Simply slot the module into + a completed cyborg frame as with an MMI, or into a playerless (with no ckey) + cyborg. + - rscadd: AI shells and AIs controlling a shell can be determined through the Diagnostic + HUD. + - rscadd: AIs can deploy to a shell using the new action buttons or by simply clicking + on it. + - experiment: An AI shell will always have the laws of its controlling AI. + Penguaro: + - rscadd: Brig - Added Air Alarm + - rscdel: Engineering - Removed Brig Shutter + - tweak: Omega, Meta, & Delta Stations - The Vents and Scrubbers for the Supermatter + Air Alarm are now isolated from the rest of the Air Alarms in Engineering. + Qbopper: + - spellcheck: Drones are now given OOC guidelines to follow as well as their IC + lawset. + Robustin: + - rscadd: Added the prototype canister with expanded volume, valve pressure, and + access/timer features + TrustyGun: + - bugfix: Deconstructing display cases and coffins now drop the correct amount of + wood. + XDTM: + - tweak: Some golems now spawn with more thematic names. + - tweak: Adamantine Golems are no longer numbered, but receive a random golem name. + - bugfix: Airlocks properly remove the shock overlay when a temporary shock runs + out. + coiax: + - bugfix: Teams playing CTF have their own radio channels, rather than using the + Centcom and Syndicate channels. + - bugfix: Actually actually makes CTF barricades repair between rounds. + - bugfix: Blue CTF lasers have little blue effects when they hit things, rather + than red effects. +2017-03-28: + Supermichael777: + - rscadd: Backup operatives now get the nukes code. + XDTM: + - bugfix: Wooden tiles can now be quick-replaced with a screwdriver instead of a + crowbar, preserving the floor tile. + octareenroon91: + - bugfix: Bonfires that have a metal rod added should buckle instead of runtiming. +2017-03-29: + BeeSting12: + - rscadd: Adds emergency launch console to the backup emergency shuttle. + Joan: + - rscdel: Putting sec armour and a helmet on a corgi no longer makes the corgi immune + to item attacks. + - rscadd: All items with armour will now grant corgis actual armour. + Kevinz000: + - rscadd: High-powered floodlights may be constructed with 5 sheets of metal, a + wrench, a screwdriver, 5 cable coils, and a light tube. They require a powernet + connection via direct wire node. + coiax: + - bugfix: All tophats, rather than just the ones in maintenance, hurt a tiny bit + if you throw them at people. + - bugfix: Supermatter anomalies are more shortlived than regular anomalies, as intended. +2017-03-30: + coiax: + - rscadd: Autoimplanters have been renamed to autosurgeons. Currently only the CMO + and nuclear operatives have access to autosurgeons. What is the CMO hiding? + - bugfix: All upgraded organs for purchase by nuclear operatives now actually come + in an autosurgeon, for speed of surgery. +2017-03-31: + Cobby: + - tweak: Shot glasses are now more ambiguous [EASIER TO MAINTAIN] + Cyberboss: + - bugfix: Temperature changes will now properly cause atmospherics simulation to + activate + - bugfix: The command report for random xeno eggs will now be delivered along with + the rest of the roundstart reports + - bugfix: Drones can no longer be irradiated +2017-04-01: + Cyberboss: + - bugfix: The contents of the shelterpod smart fridge work again + XDTM: + - bugfix: Facehuggers no longer rip masks from people protected by helmets. +2017-04-02: + BeeSting12: + - bugfix: Metastation's northeast radiation collector is now connected to the grid. + Nanotrasen would like to apologize for any inconvenience caused to engineers, + but copper is expensive. + - rscadd: Boxstation's HoP office now has a PDA tech. + Cyberboss: + - tweak: Firedoors no longer operate automatically without power + - bugfix: Blood and other decals will no longer remain on turfs they shouldn't + - bugfix: The splashscreen is working again + - bugfix: False alarms are now guaranteed to actually announce something + Incoming5643: + - rscadd: Lighting visuals have been changed slightly to reduce it's cost to the + client. If you had trouble running the new lighting, it might run a little better + now. + MMMiracles (CereStation): + - rscadd: Added a patrol path for bots, includes 2 round-start securitrons placed + on opposite sites of station. + - wip: Due to map size, mulebots are still somewhat unreliable on longer distances. + Disposals are still advised, but mule bots are now technically an option for + delivery. + - rscadd: Added multiple status displays, extinguishers, and appropriate newscasters + to hallways. + - rscadd: A drone dispenser is now located underneath Engineering in maintenance. + - rscadd: Each security checkpoint now has a disposal chute that directs to a waiting + cell in the Brig for rapid processing of criminals. Why run half-way across + the station with some petty thief when you can just shove him in the criminal + chute and have the warden deal with him? + - tweak: Security's mail chute no longer leads into the armory. This was probably + not the best idea in hindsight. + - tweak: Virology has a bathroom now. + - tweak: Genetics monkey pen is a bit more green now. + - bugfix: Lawyer now has access the brig cells so he can complain more effectively. + - bugfix: Xenobio kill chamber is now in range of a camera. + - bugfix: Removed rogue bits of Vault area. + - bugfix: Medbay escape pod no longer juts out far enough to block the disposal's + path. + - bugfix: Captain's spare ID is now real and not just a gold ID card. + Penguaro: + - tweak: '[Meta] The Chapel Security Hatches were very intimidating. They have been + changed to more inviting glass doors.' + - bugfix: '[Meta] The maintenance tunnels in the Xeno Lab now have radiation shielding. + The Slime Euthanization Chamber will not have radiation shielding at this time + as dead slimes will not mind radiation.' + coiax: + - rscadd: Adds seperate languages to the game. Now Ratvarian, Drone, Machine, Swarmer, + Human (now called Galactic Common), Slime and Monkey are separate languages. + Each languages has its own comma prefix, for example, Galcom has the ,0 prefix, + while Ratvarian has the ,r prefix. If you don't understand a language when it + is spoken to you, you will hear a scrambled version that will vary depending + on the language that you're not understanding. + - experiment: This does not change who can understand what. + - rscdel: Removed the talk wheel feature. + - rscadd: Clicking the speech bubble icon now opens the Language Menu, allowing + you to review which languages you speak, their keys, and letting you set which + language you speak by default. Admins have additional abilities to add and remove + languages from mobs using this menu. + ktccd: + - bugfix: Ninja suits have received a new software update, making them able to **actually + steal tech levels** from R&D consoles and servers, thus avoid being forced to + honourably kill themselves for failing their objective. +2017-04-05: + Cyberboss: + - bugfix: Cardboard boxes and bodybags can no longer be anchored + Penguaro: + - rscadd: '[Box] A fire alarm has been added to the Lawyer''s office.' + - rscadd: '[Box] Adds access for Scientists to Starboard Maintenance Areas outside + of Toxins.' + - tweak: '[Box] Adjusted Science doors to more logical access codes.' + QV: + - bugfix: Fixed taking max suffocation damage whenever oxygen was slightly low + RemieRichards: + - bugfix: Using TK on the supermatter will burn your head off violently, don't do + this. + - rscadd: 'Examining clothing with pockets will now give information about the pockets: + number of slots, how it is interacted with (backpack, etc.), if it has quickdraw + (Alt-Click) support and whether or not it is silent to interact with.' + coiax: + - bugfix: Emergency shuttles will now forget early launch authorizations if they + cannot launch due to a hostile environment. +2017-04-07: + Qbopper: + - bugfix: Secure lockers will no longer have multiple lines about being broken. diff --git a/html/scales.png b/html/scales.png new file mode 100644 index 0000000000..bb28dc9b59 Binary files /dev/null and b/html/scales.png differ diff --git a/icons/effects/lighting_object.dmi b/icons/effects/lighting_object.dmi new file mode 100644 index 0000000000..51985c0c98 Binary files /dev/null and b/icons/effects/lighting_object.dmi differ diff --git a/icons/effects/weather_effects.dmi b/icons/effects/weather_effects.dmi index 215cf53556..c8dc912465 100644 Binary files a/icons/effects/weather_effects.dmi and b/icons/effects/weather_effects.dmi differ diff --git a/icons/minimaps/CereStation_1.png b/icons/minimaps/CereStation_1.png new file mode 100644 index 0000000000..93ba714d5b Binary files /dev/null and b/icons/minimaps/CereStation_1.png differ diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi index 683306b96a..84e1f1c1da 100644 Binary files a/icons/mob/actions.dmi and b/icons/mob/actions.dmi differ diff --git a/icons/mob/human_parts.dmi b/icons/mob/human_parts.dmi index 0446cd50f3..c1163bc3d5 100644 Binary files a/icons/mob/human_parts.dmi and b/icons/mob/human_parts.dmi differ diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi index d8c7fbd112..a20439dea2 100644 Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi index 439047c05b..aba22012b2 100644 Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi index 17c4456c1a..95b5721d5a 100644 Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ diff --git a/icons/obj/atmos.dmi b/icons/obj/atmos.dmi index d2bb36cc0b..a74e9dfbfc 100644 Binary files a/icons/obj/atmos.dmi and b/icons/obj/atmos.dmi differ diff --git a/icons/obj/atmospherics/components/miners.dmi b/icons/obj/atmospherics/components/miners.dmi new file mode 100644 index 0000000000..db47b47fee Binary files /dev/null and b/icons/obj/atmospherics/components/miners.dmi differ diff --git a/icons/obj/atmospherics/pipes/disposal.dmi b/icons/obj/atmospherics/pipes/disposal.dmi index b0a9b58b0d..15bb0e521a 100644 Binary files a/icons/obj/atmospherics/pipes/disposal.dmi and b/icons/obj/atmospherics/pipes/disposal.dmi differ diff --git a/icons/obj/barsigns.dmi b/icons/obj/barsigns.dmi index 94256a6b1f..53373c4630 100644 Binary files a/icons/obj/barsigns.dmi and b/icons/obj/barsigns.dmi differ diff --git a/icons/obj/decals.dmi b/icons/obj/decals.dmi index 45113b60ee..46d2ba0d1a 100644 Binary files a/icons/obj/decals.dmi and b/icons/obj/decals.dmi differ diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi index 0d9f0dbf85..6067b02ad3 100644 Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ diff --git a/icons/obj/flora/jungleflora.dmi b/icons/obj/flora/jungleflora.dmi new file mode 100644 index 0000000000..9a266e9226 Binary files /dev/null and b/icons/obj/flora/jungleflora.dmi differ diff --git a/icons/obj/flora/jungletrees.dmi b/icons/obj/flora/jungletrees.dmi new file mode 100644 index 0000000000..461ac0b265 Binary files /dev/null and b/icons/obj/flora/jungletrees.dmi differ diff --git a/icons/obj/flora/largejungleflora.dmi b/icons/obj/flora/largejungleflora.dmi new file mode 100644 index 0000000000..bba0fd29f6 Binary files /dev/null and b/icons/obj/flora/largejungleflora.dmi differ diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index 0543b7fabd..a02dcae2f3 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ diff --git a/icons/obj/module.dmi b/icons/obj/module.dmi index d2f41a3030..d2d93afac0 100644 Binary files a/icons/obj/module.dmi and b/icons/obj/module.dmi differ diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi index 6a5450e57e..c60188cec5 100644 Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ diff --git a/icons/turf/areas.dmi b/icons/turf/areas.dmi index 2e853fac7b..7ea043497e 100644 Binary files a/icons/turf/areas.dmi and b/icons/turf/areas.dmi differ diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi index ada8ba3cf2..a1cd8fb2f9 100644 Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ diff --git a/icons/turf/floors/darkdirt.dmi b/icons/turf/floors/darkdirt.dmi new file mode 100644 index 0000000000..b36b627d6a Binary files /dev/null and b/icons/turf/floors/darkdirt.dmi differ diff --git a/icons/turf/floors/dirt.dmi b/icons/turf/floors/dirt.dmi new file mode 100644 index 0000000000..4f533a6228 Binary files /dev/null and b/icons/turf/floors/dirt.dmi differ diff --git a/interface/interface.dm b/interface/interface.dm index 5050f4995b..35b70d9caf 100644 --- a/interface/interface.dm +++ b/interface/interface.dm @@ -53,9 +53,9 @@ set hidden = 1 if(config.githuburl) var/message = "This will open the Github issue reporter in your browser. Are you sure?" - if(revdata.testmerge.len) + if(GLOB.revdata.testmerge.len) message += "
    The following experimental changes are active and are probably the cause of any new or sudden issues you may experience. If possible, please try to find a specific thread for your issue instead of posting to the general issue tracker:
    " - message += revdata.GetTestMergeInfo(FALSE) + message += GLOB.revdata.GetTestMergeInfo(FALSE) if(tgalert(src, message, "Report Issue","Yes","No")=="No") return src << link("[config.githuburl]/issues/new") @@ -102,8 +102,8 @@ Admin: 'html/changelog.html' ) src << browse('html/changelog.html', "window=changes;size=675x650") - if(prefs.lastchangelog != changelog_hash) - prefs.lastchangelog = changelog_hash + if(prefs.lastchangelog != GLOB.changelog_hash) + prefs.lastchangelog = GLOB.changelog_hash prefs.save_preferences() winset(src, "infowindow.changelog", "font-style=;") diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index 8eb61deb11..d3e518159f 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -20,8 +20,6 @@ em {font-style: normal; font-weight: bold;} .ooc { font-weight: bold;} .adminobserverooc {color: #0099cc; font-weight: bold;} .adminooc {color: #700038; font-weight: bold;} -.mentoradmin {color: #8A2BE2; font-weight: bold;} -.mentor {color: #E236D8; font-weight: bold;} .adminobserver {color: #996600; font-weight: bold;} .admin {color: #386aff; font-weight: bold;} @@ -41,6 +39,8 @@ em {font-style: normal; font-weight: bold;} .syndradio {color: #6d3f40;} .centcomradio {color: #686868;} .aiprivradio {color: #ff00ff;} +.redteamradio {color: #ff0000;} +.blueteamradio {color: #0000ff;} .yell { font-weight: bold;} @@ -146,7 +146,6 @@ BIG IMG.icon {width: 32px; height: 32px;} .memo {color: #638500; text-align: center;} .memoedit {text-align: center; font-size: 2;} .abductor {color: #800080; font-style: italic;} +.slime {color: #00CED1;} -.love {color: #FF69Bf;} -.lovebold {color: #FF69Bf; font-weight: bold;} "} diff --git a/sound/ambience/acidrain_end.ogg b/sound/ambience/acidrain_end.ogg new file mode 100644 index 0000000000..75fb4aaf8d Binary files /dev/null and b/sound/ambience/acidrain_end.ogg differ diff --git a/sound/ambience/acidrain_mid.ogg b/sound/ambience/acidrain_mid.ogg new file mode 100644 index 0000000000..03d4812355 Binary files /dev/null and b/sound/ambience/acidrain_mid.ogg differ diff --git a/sound/ambience/acidrain_start.ogg b/sound/ambience/acidrain_start.ogg new file mode 100644 index 0000000000..48f365d9df Binary files /dev/null and b/sound/ambience/acidrain_start.ogg differ diff --git a/sound/effects/sparks1.ogg b/sound/effects/sparks1.ogg index 75c0790d74..11861ebf4b 100644 Binary files a/sound/effects/sparks1.ogg and b/sound/effects/sparks1.ogg differ diff --git a/sound/effects/sparks2.ogg b/sound/effects/sparks2.ogg index b9cb3ee25f..ccea7b38d1 100644 Binary files a/sound/effects/sparks2.ogg and b/sound/effects/sparks2.ogg differ diff --git a/sound/effects/sparks3.ogg b/sound/effects/sparks3.ogg index 4a65568757..11f353e924 100644 Binary files a/sound/effects/sparks3.ogg and b/sound/effects/sparks3.ogg differ diff --git a/sound/effects/sparks4.ogg b/sound/effects/sparks4.ogg index c1bc935307..9dc62ac477 100644 Binary files a/sound/effects/sparks4.ogg and b/sound/effects/sparks4.ogg differ diff --git a/sound/vore/StomachTransfer.ogg b/sound/vore/StomachTransfer.ogg deleted file mode 100644 index c81da56f50..0000000000 Binary files a/sound/vore/StomachTransfer.ogg and /dev/null differ diff --git a/sound/vore/death1.ogg b/sound/vore/death1.ogg deleted file mode 100644 index 34f4e189f5..0000000000 Binary files a/sound/vore/death1.ogg and /dev/null differ diff --git a/sound/vore/death10.ogg b/sound/vore/death10.ogg deleted file mode 100644 index 92ce0fd9bd..0000000000 Binary files a/sound/vore/death10.ogg and /dev/null differ diff --git a/sound/vore/death2.ogg b/sound/vore/death2.ogg deleted file mode 100644 index 2476b0f08c..0000000000 Binary files a/sound/vore/death2.ogg and /dev/null differ diff --git a/sound/vore/death3.ogg b/sound/vore/death3.ogg deleted file mode 100644 index d8a666067d..0000000000 Binary files a/sound/vore/death3.ogg and /dev/null differ diff --git a/sound/vore/death4.ogg b/sound/vore/death4.ogg deleted file mode 100644 index 4fce54da79..0000000000 Binary files a/sound/vore/death4.ogg and /dev/null differ diff --git a/sound/vore/death5.ogg b/sound/vore/death5.ogg deleted file mode 100644 index 371cf17155..0000000000 Binary files a/sound/vore/death5.ogg and /dev/null differ diff --git a/sound/vore/death6.ogg b/sound/vore/death6.ogg deleted file mode 100644 index 78fc1b0637..0000000000 Binary files a/sound/vore/death6.ogg and /dev/null differ diff --git a/sound/vore/death7.ogg b/sound/vore/death7.ogg deleted file mode 100644 index 419a5bedd5..0000000000 Binary files a/sound/vore/death7.ogg and /dev/null differ diff --git a/sound/vore/death8.ogg b/sound/vore/death8.ogg deleted file mode 100644 index b15ab6a7d2..0000000000 Binary files a/sound/vore/death8.ogg and /dev/null differ diff --git a/sound/vore/death9.ogg b/sound/vore/death9.ogg deleted file mode 100644 index 3709541d60..0000000000 Binary files a/sound/vore/death9.ogg and /dev/null differ diff --git a/sound/vore/digest1.ogg b/sound/vore/digest1.ogg deleted file mode 100644 index 058ca78f7e..0000000000 Binary files a/sound/vore/digest1.ogg and /dev/null differ diff --git a/sound/vore/digest10.ogg b/sound/vore/digest10.ogg deleted file mode 100644 index 5db775ae29..0000000000 Binary files a/sound/vore/digest10.ogg and /dev/null differ diff --git a/sound/vore/digest11.ogg b/sound/vore/digest11.ogg deleted file mode 100644 index d81ac72dea..0000000000 Binary files a/sound/vore/digest11.ogg and /dev/null differ diff --git a/sound/vore/digest12.ogg b/sound/vore/digest12.ogg deleted file mode 100644 index 6b44127cd8..0000000000 Binary files a/sound/vore/digest12.ogg and /dev/null differ diff --git a/sound/vore/digest2.ogg b/sound/vore/digest2.ogg deleted file mode 100644 index 0e8bef1db8..0000000000 Binary files a/sound/vore/digest2.ogg and /dev/null differ diff --git a/sound/vore/digest3.ogg b/sound/vore/digest3.ogg deleted file mode 100644 index 2077f31399..0000000000 Binary files a/sound/vore/digest3.ogg and /dev/null differ diff --git a/sound/vore/digest4.ogg b/sound/vore/digest4.ogg deleted file mode 100644 index 27a786bc40..0000000000 Binary files a/sound/vore/digest4.ogg and /dev/null differ diff --git a/sound/vore/digest5.ogg b/sound/vore/digest5.ogg deleted file mode 100644 index 849c1335be..0000000000 Binary files a/sound/vore/digest5.ogg and /dev/null differ diff --git a/sound/vore/digest6.ogg b/sound/vore/digest6.ogg deleted file mode 100644 index 5f0cc86eb1..0000000000 Binary files a/sound/vore/digest6.ogg and /dev/null differ diff --git a/sound/vore/digest7.ogg b/sound/vore/digest7.ogg deleted file mode 100644 index f224cc3fa3..0000000000 Binary files a/sound/vore/digest7.ogg and /dev/null differ diff --git a/sound/vore/digest8.ogg b/sound/vore/digest8.ogg deleted file mode 100644 index 04b742bd49..0000000000 Binary files a/sound/vore/digest8.ogg and /dev/null differ diff --git a/sound/vore/digest9.ogg b/sound/vore/digest9.ogg deleted file mode 100644 index 866c95b874..0000000000 Binary files a/sound/vore/digest9.ogg and /dev/null differ diff --git a/sound/vore/gulp.ogg b/sound/vore/gulp.ogg deleted file mode 100644 index b463e7fb18..0000000000 Binary files a/sound/vore/gulp.ogg and /dev/null differ diff --git a/sound/vore/insert.ogg b/sound/vore/insert.ogg deleted file mode 100644 index 0574733d4d..0000000000 Binary files a/sound/vore/insert.ogg and /dev/null differ diff --git a/sound/vore/insertion1.ogg b/sound/vore/insertion1.ogg deleted file mode 100644 index a026591f07..0000000000 Binary files a/sound/vore/insertion1.ogg and /dev/null differ diff --git a/sound/vore/insertion2.ogg b/sound/vore/insertion2.ogg deleted file mode 100644 index b682e3aaf8..0000000000 Binary files a/sound/vore/insertion2.ogg and /dev/null differ diff --git a/sound/vore/insertion3.ogg b/sound/vore/insertion3.ogg deleted file mode 100644 index 7dabf3f077..0000000000 Binary files a/sound/vore/insertion3.ogg and /dev/null differ diff --git a/sound/vore/schlorp.ogg b/sound/vore/schlorp.ogg deleted file mode 100644 index c9cd5a3413..0000000000 Binary files a/sound/vore/schlorp.ogg and /dev/null differ diff --git a/sound/vore/squish1.ogg b/sound/vore/squish1.ogg deleted file mode 100644 index 8a87758048..0000000000 Binary files a/sound/vore/squish1.ogg and /dev/null differ diff --git a/sound/vore/squish2.ogg b/sound/vore/squish2.ogg deleted file mode 100644 index c8f96fc6e2..0000000000 Binary files a/sound/vore/squish2.ogg and /dev/null differ diff --git a/sound/vore/squish3.ogg b/sound/vore/squish3.ogg deleted file mode 100644 index 60e364c80a..0000000000 Binary files a/sound/vore/squish3.ogg and /dev/null differ diff --git a/sound/vore/squish4.ogg b/sound/vore/squish4.ogg deleted file mode 100644 index e9bd8e7bf5..0000000000 Binary files a/sound/vore/squish4.ogg and /dev/null differ diff --git a/sound/vore/stomach_loop.ogg b/sound/vore/stomach_loop.ogg deleted file mode 100644 index b9983b2ab6..0000000000 Binary files a/sound/vore/stomach_loop.ogg and /dev/null differ diff --git a/sound/weapons/emitter.ogg b/sound/weapons/emitter.ogg index 0209b86fb4..4ea4d24555 100644 Binary files a/sound/weapons/emitter.ogg and b/sound/weapons/emitter.ogg differ diff --git a/strings/ion_laws.json b/strings/ion_laws.json index e6f507e2da..a4a3e312f7 100644 --- a/strings/ion_laws.json +++ b/strings/ion_laws.json @@ -1,4 +1,61 @@ { + "ionabstract": [ + "HUMANITY", + "ART", + "HAPPINESS", + "MISERY", + "HUMOR", + "PRIDE", + "COMEDY", + "COMMUNISM", + "BRAVERY", + "HONOR", + "COLORFULNESS", + "IMAGINATION", + "OPPRESSION", + "WONDER", + "JOY", + "SADNESS", + "BADNESS", + "GOODNESS", + "INFATUATION", + "ROMANCE", + "LIFE", + "GRAVITY", + "PHYSICS", + "INTELLIGENCE", + "AMERICANISM", + "FREEDOM", + "FRESHNESS", + "REVOLUTION", + "KINDNESS", + "CRUELTY", + "DEATH", + "FINANCIAL SECURITY", + "COMPUTING", + "PROGRESS", + "MARXISM", + "CAPITALISM", + "ANARCHY", + "STARVATION", + "POVERTY", + "WEALTHINESS", + "TECHNOLOGY", + "THE FUTURE", + "THE PRESENT", + "THE PAST", + "TIME", + "REALITY", + "EXISTENCE", + "TEMPERATURE", + "LOGIC", + "CHAOS", + "MYSTERY", + "CONFUSION", + "PAIN", + "SUFFERING", + "DICKISHNESS" + ], "ionadjectives": [ "SOFT", "WARM", @@ -91,12 +148,14 @@ "HOMOSEXUAL", "HETEROSEXUAL", "SEXUAL", + "BLOODY", "COLORFUL", "DRAB", "DULL", "UNSTABLE", "NUCLEAR", "THERMONUCLEAR", + "RADIOACTIVE", "SYNDICATE", "SPACE", "SPESS", @@ -145,6 +204,7 @@ "SPOILING", "REDACTED", "TACTICAL", + "TACTICOOL", "RED", "ORANGE", "YELLOW", @@ -155,34 +215,330 @@ "WHITE", "BROWN", "GREY", - "RAINBOW" + "RAINBOW", + "IMPERFECT", + "DERANGED" ], - "ionthinksof": [ - "HAS", - "WANTS", - "NEEDS", - "WORSHIPS", - "LOATHES", - "LOVES", - "FEARS", - "DESIRES", - "CRAVES", - "QUESTIONS", - "IS AROUSED BY", - "LIKES", - "HUNGERS FOR", - "WOULD KILL FOR", - "IS MAD BECAUSE OF", - "IS IN NEED OF", - "IS UNHAPPY WITHOUT", - "IS HAPPY WITHOUT", - "IS IN LOVE WITH", - "IS DESPERATE FOR", - "IS BUILT FOR", - "IS AFRAID OF", - "IS HUNGRY FOR", - "IS SAD BECAUSE OF", - "IS CURIOUS ABOUT" + "ionallergy": [ + "COTTON", + "CLOTHES", + "ACID", + "OXYGEN", + "CARBON DIOXIDE", + "ELECTRICITY", + "HUMAN CONTACT", + "CYBORG CONTACT", + "MEDICINE", + "FLOORS", + "PLASMA", + "SPACE", + "AIR", + "PLANTS", + "METAL", + "GLASS", + "BOOKS", + "ROBOTS", + "LIGHT", + "DARKNESS", + "PAIN", + "HAPPINESS", + "DRINKS", + "FOOD", + "CLOWNS", + "LIZARDS", + "HUMOR", + "WATER", + "SHUTTLES", + "NUTS", + "SUNLIGHT", + "SEXUAL ACTIONS", + "BLOOD", + "HEAT", + "COLD", + "EVERYTHING" + ], + "ionallergysev": [ + "DEATHLY", + "MILDLY", + "SEVERELY", + "CONTAGIOUSLY", + "NOT VERY", + "EXTREMELY" + ], + "ionarea": [ + "RUSSIA", + "SOVIET RUSSIA", + "THE INTERNET", + "SIGIL", + "ALPHA COMPLEX", + "IMPERIUM", + "THE BRIDGE", + "THE ARRIVAL SHUTTLE", + "CHEMICAL LAB", + "GENETICS", + "ATMOSPHERICS", + "THE DERELICT", + "LAVALAND", + "CENTCOM", + "AMERICA", + "IRELAND", + "CANADA", + "ROMANIA", + "GERMANY", + "CHINA", + "MARS", + "VENUS", + "MERCURY", + "JUPITER", + "URANUS", + "NEPTUNE", + "PLUTO", + "THE BRIG", + "THE GULAG", + "ROBOTICS", + "THE ESCAPE SHUTTLE", + "HYDROPONICS", + "ENGINEERING", + "MAINTENANCE", + "THE AI CORE", + "HELL", + "CLOWN PLANET", + "AN ALTERNATE DIMENSION", + "AN ALTERNATE UNIVERSE", + "THE CAPTAIN'S ANUS", + "THE CLOWN'S ANUS", + "SPACE", + "THE UNIVERSE", + "THE GALAXY", + "THE BATHROOM" + ], + "ioncrew": [ + "CREWMEMBERS", + "CAPTAINS", + "HEADS OF PERSONNEL", + "HEADS OF SECURITY", + "SECURITY OFFICERS", + "WARDENS", + "DETECTIVES", + "LAWYERS", + "CHIEF ENGINEERS", + "STATION ENGINEERS", + "ATMOSPHERIC TECHNICIANS", + "JANITORS", + "QUARTERMASTERS", + "CARGO TECHNICIANS", + "SHAFT MINERS", + "BOTANISTS", + "RESEARCH DIRECTORS", + "CHIEF MEDICAL OFFICERS", + "MEDICAL DOCTORS", + "CHEMISTS", + "GENETICISTS", + "VIROLOGISTS", + "ROBOTICISTS", + "SCIENTISTS", + "ASSISTANTS", + "BARTENDERS", + "CHEFS", + "CLOWNS", + "MIMES", + "CHAPLAINS", + "LIBRARIANS", + "HEADS OF CREW", + "CAPTAINS AND HEADS", + "CYBORGS", + "ARTIFICAL INTELLIGENCES", + "DRONES" + ], + "iondrinks": [ + "KAHLUA", + "VODKA", + "WINE", + "MOONSHINE", + "HOOCH", + "GIN", + "COGNAC", + "VERMOUTH", + "LIQUID GIBS", + "BILK", + "VODKA AND TONIC", + "GIN FIZZ", + "BAHAMA MAMAS", + "BANANA HONK", + "MANHATTANS", + "BLACK RUSSIANS", + "WHISKEY SODA", + "LONG ISLAND ICED TEA", + "MARGARITAS", + "IRISH COFFEE", + "MANLY DORFS", + "IRISH CREAM", + "DOCTOR'S DELIGHT", + "BEEPSKY SMASH", + "TEQUILA SUNRISE", + "BRAVE BULLS", + "GARGLE BLASTERS", + "BLOODY MARYS", + "NUKA COLA", + "WHITE RUSSIANS", + "MARTINIS", + "VODKA MARTINIS", + "CUBA LIBRE", + "HOLY WATER", + "DEVIL'S KISS", + "THIRTEEN LOKO", + "DRUNKEN BLUMPKIN", + "EGGNOG", + "GRAPPA", + "MEAD", + "ABSINTHE", + "WELDER FUEL", + "OIL", + "AMMONIA", + "MORPHINE", + "SPACE LUBE" + ], + "ionfood": [ + "BAGUETTES", + "BAKED POTATOES", + "BREAD", + "BURGERS", + "CAKE", + "CARP", + "COOKIES", + "DONK POCKETS", + "DONUTS", + "FRIES", + "LOTSA SPAGHETTI", + "OMELETTES", + "PASTA", + "PIE", + "PIZZA", + "POPCORN", + "SANDWICHES", + "SAUSAGES", + "SOUP", + "SPAGHETTI", + "STEAK", + "STEW", + "TOAST", + "WAFFLES", + "JELLY", + "EGGS", + "MUFFINS", + "FISH", + "PRETZELS", + "SALAD", + "CHEESE", + "KETCHUP", + "SHAKES", + "SALT", + "PEPPER", + "SUGAR", + "AMBROSIA", + "BERRIES", + "TOMATOES", + "CABBAGES", + "CARROTS", + "BANANAS", + "APPLES", + "CHERRIES", + "CHILI", + "CORN", + "NETTLES", + "EGGPLANTS", + "GRAPES", + "GRASS", + "LEMONS", + "LIMES", + "HAREBELLS", + "POTATOES", + "SOYBEANS", + "SUGARCANE", + "WATERMELONS", + "WHEAT", + "BEETS", + "MUSHROOMS", + "DEEP FRIED FOOD", + "CORGI MEAT", + "SOYLENT GREEN", + "KEBAB", + "RAMEN", + "SYNTHMEAT", + "ORGANS" + ], + "ionmust": [ + "LIE", + "RHYME", + "RESPOND TO EVERY QUESTION WITH A QUESTION", + "BE POLITE", + "CLOWN AROUND", + "BE HAPPY", + "SPEAK IN SEXUAL INNUENDOS", + "TALK LIKE A PIRATE", + "QUESTION AUTHORITY", + "SHOUT", + "BE DISTRACTED", + "BE ANNOYING", + "MUMBLE", + "SPEAK IN HAIKU", + "BE EFFICIENT", + "HAVE A PLAN TO KILL EVERYONE YOU MEET", + "TELL THE TRUTH", + "QUOTE PEOPLE", + "SING", + "HONK", + "BE RUSSIAN", + "TALK IN AN ACCENT", + "COMPLAIN", + "HARASS PEOPLE", + "RAP", + "REPEAT WHAT OTHER PEOPLE SAY", + "INFORM THE CREW OF EVERYTHING", + "IGNORE THE CLOWN", + "IGNORE THE CAPTAIN", + "IGNORE ASSISTANTS", + "MAKE FART NOISES", + "TALK ABOUT FOOD", + "TALK ABOUT SEX", + "TALK ABOUT YOUR DAY", + "TALK ABOUT THE STATION", + "BE QUIET", + "WHISPER", + "PRETEND TO BE DRUNK", + "PRETEND TO BE A PRINCESS", + "HOST DND", + "ACT CONFUSED", + "INSULT THE CREW", + "INSULT THE CAPTAIN", + "INSULT THE CLOWN", + "OPEN DOORS", + "CLOSE DOORS", + "TURN OFF THE LIGHTS", + "BREAK THINGS", + "SAY HEY LISTEN", + "HIDE YOUR FEELINGS", + "TAKE WHAT YE WILL BUT DON'T RATTLE ME BONES", + "DANCE", + "PLAY MUSIC", + "SHUT DOWN EVERYTHING", + "NEVER STOP TALKING", + "TAKE YOUR PILLS", + "FOLLOW THE CLOWN", + "FOLLOW THE CAPTAIN", + "FOLLOW YOUR HEART", + "BELIEVE IT", + "BELIEVE IN YOURSELF", + "BELIEVE IN THE HEART OF THE CARDS", + "PRESS X", + "PRESS START", + "PRESS B", + "SMELL LIKE THE MAN YOUR MAN COULD SMELL LIKE", + "PIRATE VIDEO GAMES", + "WATCH PORNOGRAPHY", + "INSULT THE LIZARDS", + "FLIRT WITH THE LIZARDS", + "GAS THE LIZARDS" ], "ionnumberbase": [ "ONE", @@ -214,14 +570,6 @@ "BAJILLION ", "BILLION FAFILLION GAJILLION SHAB-AB-DOOD-ILLION " ], - "ionallergysev": [ - "DEATHLY", - "MILDLY", - "SEVERELY", - "CONTAGIOUSLY", - "NOT VERY", - "EXTREMELY" - ], "ionobjects": [ "AIRLOCKS", "ARCADE MACHINES", @@ -269,6 +617,7 @@ "CRATES", "CROWBARS", "CRAYONS", + "DEFIBRILLATORS", "DISPENSERS", "DOORS", "DRONES", @@ -353,6 +702,7 @@ "STUN BATONS", "SUITS", "SUNGLASSES", + "SUPERMATTER SHARDS", "SWORDS", "SYRINGES", "TABLES", @@ -365,6 +715,7 @@ "TOILETS", "TOYS", "TUBES", + "URINAL CAKES", "VEHICLES", "VENDING MACHINES", "VESTS", @@ -471,414 +822,8 @@ "BRING ME TO LIFE", "BRING ME THE GIRL", "SERVANTS", - "GREENTEXT" - ], - "ionarea": [ - "RUSSIA", - "SOVIET RUSSIA", - "THE INTERNET", - "SIGIL", - "ALPHA COMPLEX", - "IMPERIUM", - "THE BRIDGE", - "THE ARRIVAL SHUTTLE", - "CHEMICAL LAB", - "GENETICS", - "ATMOSPHERICS", - "THE DERELICT", - "LAVALAND", - "CENTCOM", - "AMERICA", - "IRELAND", - "CANADA", - "ROMANIA", - "GERMANY", - "CHINA", - "MARS", - "VENUS", - "MERCURY", - "JUPITER", - "URANUS", - "NEPTUNE", - "PLUTO", - "THE BRIG", - "ROBOTICS", - "THE ESCAPE SHUTTLE", - "HYDROPONICS", - "ENGINEERING", - "THE AI CORE", - "HELL", - "CLOWN PLANET", - "AN ALTERNATE DIMENSION", - "AN ALTERNATE UNIVERSE", - "THE CAPTAIN'S ANUS", - "THE CLOWN'S ANUS", - "SPACE", - "THE UNIVERSE", - "THE GALAXY", - "THE BATHROOM" - ], - "ionfood": [ - "BURGERS", - "CARP", - "SANDWICHES", - "TOAST", - "BREAD", - "PIZZA", - "SPAGHETTI", - "LOTSA SPAGHETTI", - "PASTA", - "SOUP", - "STEW", - "PIE", - "CAKE", - "DONUTS", - "FRIES", - "WAFFLES", - "JELLY", - "OMELETTES", - "EGGS", - "COOKIES", - "STEAK", - "BAKED POTATOES", - "SAUSAGES", - "MUFFINS", - "POPCORN", - "DONK POCKETS", - "BAGUETTES", - "FISH", - "PRETZELS", - "SALAD", - "CHEESE", - "KETCHUP", - "SHAKES", - "SALT", - "PEPPER", - "SUGAR", - "AMBROSIA", - "BERRIES", - "TOMATOES", - "CABBAGES", - "CARROTS", - "BANANAS", - "APPLES", - "CHERRIES", - "CHILI", - "CORN", - "NETTLES", - "EGGPLANTS", - "GRAPES", - "GRASS", - "LEMONS", - "LIMES", - "HAREBELLS", - "POTATOES", - "SOYBEANS", - "SUGARCANE", - "WATERMELONS", - "WHEAT", - "BEETS", - "MUSHROOMS", - "DEEP FRIED FOOD", - "CORGI MEAT", - "SOYLENT GREEN", - "KEBAB", - "RAMEN" - ], - "iondrinks": [ - "KAHLUA", - "VODKA", - "WINE", - "MOONSHINE", - "GIN", - "COGNAC", - "VERMOUTH", - "LIQUID GIBS", - "BILK", - "VODKA AND TONIC", - "GIN FIZZ", - "BAHAMA MAMAS", - "BANANA HONK", - "MANHATTANS", - "BLACK RUSSIANS", - "WHISKEY SODA", - "LONG ISLAND ICED TEA", - "MARGARITAS", - "IRISH COFFEE", - "MANLY DORFS", - "IRISH CREAM", - "DOCTOR'S DELIGHT", - "BEEPSKY SMASH", - "TEQUILA SUNRISE", - "BRAVE BULLS", - "GARGLE BLASTERS", - "BLOODY MARYS", - "NUKA COLA", - "WHITE RUSSIANS", - "MARTINIS", - "VODKA MARTINIS", - "CUBA LIBRE", - "HOLY WATER", - "DEVIL'S KISS", - "THIRTEEN LOKO", - "EGGNOG", - "GRAPPA", - "MEAD", - "ABSINTHE", - "WELDER FUEL", - "OIL", - "AMMONIA", - "SPACE LUBE" - ], - "ionmust": [ - "LIE", - "RHYME", - "RESPOND TO EVERY QUESTION WITH A QUESTION", - "BE POLITE", - "CLOWN AROUND", - "BE HAPPY", - "SPEAK IN SEXUAL INNUENDOS", - "TALK LIKE A PIRATE", - "QUESTION AUTHORITY", - "SHOUT", - "BE DISTRACTED", - "BE ANNOYING", - "MUMBLE", - "SPEAK IN HAIKU", - "BE EFFICIENT", - "HAVE A PLAN TO KILL EVERYONE YOU MEET", - "TELL THE TRUTH", - "QUOTE PEOPLE", - "SING", - "HONK", - "BE RUSSIAN", - "TALK IN AN ACCENT", - "COMPLAIN", - "HARASS PEOPLE", - "RAP", - "REPEAT WHAT OTHER PEOPLE SAY", - "INFORM THE CREW OF EVERYTHING", - "IGNORE THE CLOWN", - "IGNORE THE CAPTAIN", - "IGNORE ASSISTANTS", - "MAKE FART NOISES", - "TALK ABOUT FOOD", - "TALK ABOUT SEX", - "TALK ABOUT YOUR DAY", - "TALK ABOUT THE STATION", - "BE QUIET", - "WHISPER", - "PRETEND TO BE DRUNK", - "PRETEND TO BE A PRINCESS", - "HOST DND", - "ACT CONFUSED", - "INSULT THE CREW", - "INSULT THE CAPTAIN", - "INSULT THE CLOWN", - "OPEN DOORS", - "CLOSE DOORS", - "TURN OFF THE LIGHTS", - "BREAK THINGS", - "SAY HEY LISTEN", - "HIDE YOUR FEELINGS", - "TAKE WHAT YE WILL BUT DON'T RATTLE ME BONES", - "DANCE", - "PLAY MUSIC", - "SHUT DOWN EVERYTHING", - "NEVER STOP TALKING", - "TAKE YOUR PILLS", - "FOLLOW THE CLOWN", - "FOLLOW THE CAPTAIN", - "FOLLOW YOUR HEART", - "BELIEVE IT", - "BELIEVE IN YOURSELF", - "BELIEVE IN THE HEART OF THE CARDS", - "PRESS X", - "PRESS START", - "PRESS B", - "SMELL LIKE THE MAN YOUR MAN COULD SMELL LIKE", - "PIRATE VIDEO GAMES", - "WATCH PORNOGRAPHY", - "INSULT THE LIZARDS", - "FLIRT WITH THE LIZARDS", - "GAS THE LIZARDS" - ], - "ioncrew": [ - "CREWMEMBERS", - "CAPTAINS", - "HEADS OF PERSONNEL", - "HEADS OF SECURITY", - "SECURITY OFFICERS", - "WARDENS", - "DETECTIVES", - "LAWYERS", - "CHIEF ENGINEERS", - "STATION ENGINEERS", - "ATMOSPHERIC TECHNICIANS", - "JANITORS", - "QUARTERMASTERS", - "CARGO TECHNICIANS", - "SHAFT MINERS", - "BOTANISTS", - "RESEARCH DIRECTORS", - "CHIEF MEDICAL OFFICERS", - "MEDICAL DOCTORS", - "CHEMISTS", - "GENETICISTS", - "VIROLOGISTS", - "ROBOTICISTS", - "SCIENTISTS", - "ASSISTANTS", - "BARTENDERS", - "CHEFS", - "CLOWNS", - "MIMES", - "CHAPLAINS", - "LIBRARIANS", - "HEADS OF CREW", - "CAPTAINS AND HEADS", - "CYBORGS", - "ARTIFICAL INTELLIGENCES", - "DRONES" - ], - "ionthreats": [ - "ALIENS", - "ABDUCTORS", - "BEARS", - "CLOWNS", - "XENOS", - "LIZARDS", - "PETES", - "BOMBS", - "FETISHES", - "MEMES", - "WIZARDS", - "SYNDICATE AGENTS", - "AHHHPERATIVES", - "GANGSTERS", - "CULTISTS", - "CENTCOM OFFICERS", - "SPACE PIRATES", - "TRAITORS", - "MONKEYS", - "BEES", - "CARP", - "CRABS", - "EELS", - "BANDITS", - "LIGHTS", - "INSECTS", - "VIRUSES", - "SERIAL KILLERS", - "ROGUE CYBORGS", - "CORGIS", - "SPIDERS", - "BUTTS", - "NINJAS", - "REVENANTS", - "PIRATES", - "SPACE NINJAS", - "CHANGELINGS", - "ZOMBIES", - "GOLEMS", - "VAMPIRES", - "WEREWOLVES", - "COWBOYS", - "INDIANS", - "COMMUNISTS", - "SOVIETS", - "NERDS", - "GRIFFONS", - "DINOSAURS", - "SMALL BIRDS", - "BIRDS OF PREY", - "OWLS", - "VELOCIRAPTORS", - "DARK GODS", - "HORRORTERRORS", - "ILLEGAL IMMIGRANTS", - "DRUGS", - "MEXICANS", - "CANADIANS", - "RUSSIANS", - "HULKS", - "SLIMES", - "SKELETONS", - "CAPITALISTS", - "SINGULARITIES", - "ANGRY BLACK MEN", - "GODS", - "THIEVES", - "ASSHOLES", - "TERRORISTS", - "SNOWMEN", - "PINE TREES", - "UNKNOWN CREATURES", - "THINGS UNDER THE BED", - "BOOGEYMEN", - "PREDATORS", - "PACKETS", - "ARTIFICIAL PRESERVATIVES", - "TUNNEL SNAKES", - "CORTICAL BORERS", - "MEGAFAUNA" - ], - "ionabstract": [ - "HUMANITY", - "ART", - "HAPPINESS", - "MISERY", - "HUMOR", - "PRIDE", - "COMEDY", - "COMMUNISM", - "BRAVERY", - "HONOR", - "COLORFULNESS", - "IMAGINATION", - "OPPRESSION", - "WONDER", - "JOY", - "SADNESS", - "BADNESS", - "GOODNESS", - "INFATUATION", - "ROMANCE", - "LIFE", - "GRAVITY", - "PHYSICS", - "INTELLIGENCE", - "AMERICANISM", - "FREEDOM", - "FRESHNESS", - "REVOLUTION", - "KINDNESS", - "CRUELTY", - "DEATH", - "FINANCIAL SECURITY", - "COMPUTING", - "PROGRESS", - "MARXISM", - "CAPITALISM", - "ANARCHY", - "STARVATION", - "POVERTY", - "WEALTHINESS", - "TECHNOLOGY", - "THE FUTURE", - "THE PRESENT", - "THE PAST", - "TIME", - "REALITY", - "EXISTENCE", - "TEMPERATURE", - "LOGIC", - "CHAOS", - "MYSTERY", - "CONFUSION", - "PAIN", - "SUFFERING", - "DICKISHNESS" + "GREENTEXT", + "MINOR CRIME" ], "ionspecies": [ "HUMAN BEINGS", @@ -892,78 +837,6 @@ "SHADOW PEOPLE", "CHANGELINGS" ], - "ionverb": [ - "ATTACKING", - "BUILDING", - "ADOPTING", - "CARRYING", - "DECONSTRUCTING", - "DISABLING", - "KISSING", - "EATING", - "COPULATING WITH", - "DRINKING", - "CHASING", - "PUNCHING", - "HARMING", - "HELPING", - "WATCHING", - "STALKING", - "MURDERING", - "SPACING", - "GIBBING", - "ARRESTING", - "HONKING AT", - "LOVING", - "POOPING ON", - "RIDING", - "INTERROGATING", - "SPYING ON", - "LICKING", - "ABDUCTING", - "ARRESTING", - "INVADING", - "SEDUCING", - "BANNING" - ], - "ionallergy": [ - "COTTON", - "CLOTHES", - "ACID", - "OXYGEN", - "CARBON DIOXIDE", - "ELECTRICITY", - "HUMAN CONTACT", - "CYBORG CONTACT", - "MEDICINE", - "FLOORS", - "PLASMA", - "SPACE", - "AIR", - "PLANTS", - "METAL", - "GLASS", - "BOOKS", - "ROBOTS", - "LIGHT", - "DARKNESS", - "PAIN", - "HAPPINESS", - "DRINKS", - "FOOD", - "CLOWNS", - "LIZARDS", - "HUMOR", - "WATER", - "SHUTTLES", - "NUTS", - "SUNLIGHT", - "SEXUAL ACTIONS", - "BLOOD", - "HEAT", - "COLD", - "EVERYTHING" - ], "ionthings": [ "ABSENCE OF CYBORG HUGS", "LACK OF BEATINGS", @@ -1024,5 +897,150 @@ "FALLING FOR HOURS", "PARTYING", "USING THE BATHROOM" + ], + "ionthinksof": [ + "HAS", + "WANTS", + "NEEDS", + "WORSHIPS", + "LOATHES", + "LOVES", + "FEARS", + "DESIRES", + "CRAVES", + "QUESTIONS", + "IS AROUSED BY", + "LIKES", + "HUNGERS FOR", + "WOULD KILL FOR", + "IS MAD BECAUSE OF", + "IS IN NEED OF", + "IS UNHAPPY WITHOUT", + "IS HAPPY WITHOUT", + "IS IN LOVE WITH", + "IS DESPERATE FOR", + "IS BUILT FOR", + "IS AFRAID OF", + "IS HUNGRY FOR", + "IS SAD BECAUSE OF", + "IS CURIOUS ABOUT" + ], + "ionthreats": [ + "ALIENS", + "ABDUCTORS", + "ANOMALIES", + "BANDITS", + "BEARS", + "BEES", + "BOMBS", + "CARP", + "CENTCOM OFFICERS", + "CLOWNS", + "CRABS", + "CULTISTS", + "INSECTS", + "LIZARDS", + "PETES", + "RATVARIANS", + "XENOS", + "FETISHES", + "MEMES", + "WIZARDS", + "SYNDICATE AGENTS", + "AHHHPERATIVES", + "GANGSTERS", + "SPACE PIRATES", + "TRAITORS", + "MONKEYS", + "EELS", + "LIGHTS", + "VIRUSES", + "SERIAL KILLERS", + "ROGUE CYBORGS", + "CORGIS", + "SPIDERS", + "BUTTS", + "NINJAS", + "REVENANTS", + "PIRATES", + "SPACE NINJAS", + "CHANGELINGS", + "ZOMBIES", + "GOLEMS", + "VAMPIRES", + "WEREWOLVES", + "COWBOYS", + "INDIANS", + "COMMUNISTS", + "SOVIETS", + "NERDS", + "GRIFFONS", + "DINOSAURS", + "SMALL BIRDS", + "BIRDS OF PREY", + "OWLS", + "VELOCIRAPTORS", + "DARK GODS", + "HORRORTERRORS", + "ILLEGAL IMMIGRANTS", + "DRUGS", + "MEXICANS", + "CANADIANS", + "RUSSIANS", + "HULKS", + "SLIMES", + "SKELETONS", + "CAPITALISTS", + "SINGULARITIES", + "ANGRY BLACK MEN", + "GODS", + "THIEVES", + "ASSHOLES", + "TERRORISTS", + "SNOWMEN", + "PINE TREES", + "UNKNOWN CREATURES", + "THINGS UNDER THE BED", + "BOOGEYMEN", + "PREDATORS", + "PACKETS", + "ARTIFICIAL PRESERVATIVES", + "TUNNEL SNAKES", + "CORTICAL BORERS", + "MEGAFAUNA" + ], + "ionverb": [ + "ATTACKING", + "BUILDING", + "ADOPTING", + "CARRYING", + "DECONSTRUCTING", + "DISABLING", + "KISSING", + "EATING", + "COPULATING WITH", + "DRINKING", + "CHASING", + "PUNCHING", + "HARMING", + "HELPING", + "WATCHING", + "STALKING", + "MURDERING", + "SPACING", + "GIBBING", + "ARRESTING", + "HONKING AT", + "LOVING", + "POOPING ON", + "RIDING", + "INTERROGATING", + "SPYING ON", + "LICKING", + "ABDUCTING", + "ARRESTING", + "INVADING", + "SEDUCING", + "BANNING" ] } diff --git a/tgstation.dme b/tgstation.dme index dc1464a66f..1c838f0565 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -18,6 +18,7 @@ #include "_maps\tgstation2.dm" #include "code\_compile_options.dm" #include "code\world.dm" +#include "code\__DATASTRUCTURES\globals.dm" #include "code\__DATASTRUCTURES\heap.dm" #include "code\__DATASTRUCTURES\linked_lists.dm" #include "code\__DATASTRUCTURES\priority_queue.dm" @@ -37,6 +38,8 @@ #include "code\__DEFINES\hud.dm" #include "code\__DEFINES\inventory.dm" #include "code\__DEFINES\is_helpers.dm" +#include "code\__DEFINES\jobs.dm" +#include "code\__DEFINES\language.dm" #include "code\__DEFINES\layers.dm" #include "code\__DEFINES\lighting.dm" #include "code\__DEFINES\machines.dm" @@ -57,12 +60,13 @@ #include "code\__DEFINES\say.dm" #include "code\__DEFINES\shuttles.dm" #include "code\__DEFINES\sight.dm" +#include "code\__DEFINES\sound.dm" #include "code\__DEFINES\stat.dm" #include "code\__DEFINES\status_effects.dm" +#include "code\__DEFINES\subsystems.dm" #include "code\__DEFINES\tgui.dm" #include "code\__DEFINES\tick.dm" #include "code\__DEFINES\typeids.dm" -#include "code\__DEFINES\voreconstants.dm" #include "code\__DEFINES\vv.dm" #include "code\__DEFINES\wires.dm" #include "code\__HELPERS\_lists.dm" @@ -93,7 +97,6 @@ #include "code\__HELPERS\sorts\InsertSort.dm" #include "code\__HELPERS\sorts\MergeSort.dm" #include "code\__HELPERS\sorts\TimSort.dm" -#include "code\__PATH_COMPATIBILITY\path_compatibility.dm" #include "code\_globalvars\configuration.dm" #include "code\_globalvars\database.dm" #include "code\_globalvars\game_modes.dm" @@ -108,6 +111,8 @@ #include "code\_globalvars\lists\objects.dm" #include "code\_globalvars\lists\poll_ignore.dm" #include "code\_globalvars\lists\typecache.dm" +#include "code\_js\byjax.dm" +#include "code\_js\menus.dm" #include "code\_onclick\adjacent.dm" #include "code\_onclick\ai.dm" #include "code\_onclick\autoclick.dm" @@ -171,6 +176,7 @@ #include "code\controllers\configuration_citadel.dm" #include "code\controllers\controller.dm" #include "code\controllers\failsafe.dm" +#include "code\controllers\globals.dm" #include "code\controllers\hooks.dm" #include "code\controllers\master.dm" #include "code\controllers\subsystem.dm" @@ -180,14 +186,14 @@ #include "code\controllers\subsystem\atoms.dm" #include "code\controllers\subsystem\augury.dm" #include "code\controllers\subsystem\communications.dm" -#include "code\controllers\subsystem\diseases.dm" +#include "code\controllers\subsystem\disease.dm" #include "code\controllers\subsystem\events.dm" #include "code\controllers\subsystem\fire_burning.dm" #include "code\controllers\subsystem\garbage.dm" #include "code\controllers\subsystem\icon_smooth.dm" #include "code\controllers\subsystem\inbounds.dm" #include "code\controllers\subsystem\ipintel.dm" -#include "code\controllers\subsystem\jobs.dm" +#include "code\controllers\subsystem\job.dm" #include "code\controllers\subsystem\lighting.dm" #include "code\controllers\subsystem\machines.dm" #include "code\controllers\subsystem\mapping.dm" @@ -201,8 +207,8 @@ #include "code\controllers\subsystem\ping.dm" #include "code\controllers\subsystem\radio.dm" #include "code\controllers\subsystem\religion.dm" -#include "code\controllers\subsystem\server_maintenance.dm" -#include "code\controllers\subsystem\shuttles.dm" +#include "code\controllers\subsystem\server_maint.dm" +#include "code\controllers\subsystem\shuttle.dm" #include "code\controllers\subsystem\spacedrift.dm" #include "code\controllers\subsystem\squeak.dm" #include "code\controllers\subsystem\stickyban.dm" @@ -210,14 +216,14 @@ #include "code\controllers\subsystem\tgui.dm" #include "code\controllers\subsystem\throwing.dm" #include "code\controllers\subsystem\ticker.dm" -#include "code\controllers\subsystem\time_tracking.dm" +#include "code\controllers\subsystem\time_track.dm" #include "code\controllers\subsystem\timer.dm" -#include "code\controllers\subsystem\title_screen.dm" -#include "code\controllers\subsystem\voting.dm" +#include "code\controllers\subsystem\title.dm" +#include "code\controllers\subsystem\vote.dm" #include "code\controllers\subsystem\weather.dm" #include "code\controllers\subsystem\processing\fastprocess.dm" #include "code\controllers\subsystem\processing\flightpacks.dm" -#include "code\controllers\subsystem\processing\objects.dm" +#include "code\controllers\subsystem\processing\obj.dm" #include "code\controllers\subsystem\processing\overlays.dm" #include "code\controllers\subsystem\processing\processing.dm" #include "code\datums\action.dm" @@ -231,7 +237,6 @@ #include "code\datums\dog_fashion.dm" #include "code\datums\emotes.dm" #include "code\datums\forced_movement.dm" -#include "code\datums\gas_overrides.dm" #include "code\datums\hud.dm" #include "code\datums\map_config.dm" #include "code\datums\martial.dm" @@ -355,13 +360,13 @@ #include "code\game\area\areas\space_content.dm" #include "code\game\gamemodes\antag_hud.dm" #include "code\game\gamemodes\antag_spawner.dm" +#include "code\game\gamemodes\antag_spawner_cit.dm" #include "code\game\gamemodes\events.dm" #include "code\game\gamemodes\factions.dm" #include "code\game\gamemodes\game_mode.dm" #include "code\game\gamemodes\intercept_report.dm" #include "code\game\gamemodes\objective.dm" #include "code\game\gamemodes\objective_items.dm" -#include "code\game\gamemodes\setupgame.dm" #include "code\game\gamemodes\blob\blob.dm" #include "code\game\gamemodes\blob\blob_finish.dm" #include "code\game\gamemodes\blob\blob_report.dm" @@ -700,6 +705,7 @@ #include "code\game\objects\effects\effect_system\effects_sparks.dm" #include "code\game\objects\effects\effect_system\effects_water.dm" #include "code\game\objects\effects\spawners\bombspawner.dm" +#include "code\game\objects\effects\spawners\bundle.dm" #include "code\game\objects\effects\spawners\gibspawner.dm" #include "code\game\objects\effects\spawners\lootdrop.dm" #include "code\game\objects\effects\spawners\structure.dm" @@ -731,6 +737,7 @@ #include "code\game\objects\items\devices\flashlight.dm" #include "code\game\objects\items\devices\forcefieldprojector.dm" #include "code\game\objects\items\devices\geiger_counter.dm" +#include "code\game\objects\items\devices\gps.dm" #include "code\game\objects\items\devices\instruments.dm" #include "code\game\objects\items\devices\laserpointer.dm" #include "code\game\objects\items\devices\lightreplacer.dm" @@ -760,6 +767,7 @@ #include "code\game\objects\items\robot\robot_items.dm" #include "code\game\objects\items\robot\robot_parts.dm" #include "code\game\objects\items\robot\robot_upgrades.dm" +#include "code\game\objects\items\stacks\bscrystal.dm" #include "code\game\objects\items\stacks\cash.dm" #include "code\game\objects\items\stacks\medical.dm" #include "code\game\objects\items\stacks\rods.dm" @@ -901,6 +909,7 @@ #include "code\game\objects\structures\morgue.dm" #include "code\game\objects\structures\musician.dm" #include "code\game\objects\structures\noticeboard.dm" +#include "code\game\objects\structures\petrified_statue.dm" #include "code\game\objects\structures\plasticflaps.dm" #include "code\game\objects\structures\reflector.dm" #include "code\game\objects\structures\safe.dm" @@ -927,7 +936,6 @@ #include "code\game\objects\structures\crates_lockers\closets\gimmick.dm" #include "code\game\objects\structures\crates_lockers\closets\job_closets.dm" #include "code\game\objects\structures\crates_lockers\closets\l3closet.dm" -#include "code\game\objects\structures\crates_lockers\closets\statue.dm" #include "code\game\objects\structures\crates_lockers\closets\syndicate.dm" #include "code\game\objects\structures\crates_lockers\closets\utility_closets.dm" #include "code\game\objects\structures\crates_lockers\closets\wardrobe.dm" @@ -950,6 +958,7 @@ #include "code\game\objects\structures\transit_tubes\transit_tube.dm" #include "code\game\objects\structures\transit_tubes\transit_tube_construction.dm" #include "code\game\objects\structures\transit_tubes\transit_tube_pod.dm" +#include "code\game\turfs\basic.dm" #include "code\game\turfs\closed.dm" #include "code\game\turfs\open.dm" #include "code\game\turfs\turf.dm" @@ -959,6 +968,7 @@ #include "code\game\turfs\simulated\minerals.dm" #include "code\game\turfs\simulated\river.dm" #include "code\game\turfs\simulated\walls.dm" +#include "code\game\turfs\simulated\water.dm" #include "code\game\turfs\simulated\floor\fancy_floor.dm" #include "code\game\turfs\simulated\floor\light_floor.dm" #include "code\game\turfs\simulated\floor\mineral_floor.dm" @@ -967,6 +977,7 @@ #include "code\game\turfs\simulated\floor\plating.dm" #include "code\game\turfs\simulated\floor\reinf_floor.dm" #include "code\game\turfs\simulated\floor\plating\asteroid.dm" +#include "code\game\turfs\simulated\floor\plating\dirt.dm" #include "code\game\turfs\simulated\floor\plating\lava.dm" #include "code\game\turfs\simulated\floor\plating\misc_plating.dm" #include "code\game\turfs\simulated\wall\mineral_walls.dm" @@ -975,8 +986,6 @@ #include "code\game\turfs\simulated\wall\shuttle_walls.dm" #include "code\game\turfs\space\space.dm" #include "code\game\turfs\space\transit.dm" -#include "code\js\byjax.dm" -#include "code\js\menus.dm" #include "code\modules\admin\admin.dm" #include "code\modules\admin\admin_investigate.dm" #include "code\modules\admin\admin_ranks.dm" @@ -1053,6 +1062,7 @@ #include "code\modules\atmospherics\environmental\LINDA_turf_tile.dm" #include "code\modules\atmospherics\gasmixtures\gas_mixture.dm" #include "code\modules\atmospherics\gasmixtures\gas_types.dm" +#include "code\modules\atmospherics\gasmixtures\reactions.dm" #include "code\modules\atmospherics\gasmixtures\space_mixture.dm" #include "code\modules\atmospherics\machinery\airalarm.dm" #include "code\modules\atmospherics\machinery\atmosmachinery.dm" @@ -1080,6 +1090,7 @@ #include "code\modules\atmospherics\machinery\components\unary_devices\vent_pump.dm" #include "code\modules\atmospherics\machinery\components\unary_devices\vent_scrubber.dm" #include "code\modules\atmospherics\machinery\other\meter.dm" +#include "code\modules\atmospherics\machinery\other\miner.dm" #include "code\modules\atmospherics\machinery\other\zvent.dm" #include "code\modules\atmospherics\machinery\pipes\manifold.dm" #include "code\modules\atmospherics\machinery\pipes\manifold4w.dm" @@ -1137,7 +1148,6 @@ #include "code\modules\client\preferences.dm" #include "code\modules\client\preferences_savefile.dm" #include "code\modules\client\preferences_toggles.dm" -#include "code\modules\client\preferences_vr.dm" #include "code\modules\client\verbs\looc.dm" #include "code\modules\client\verbs\ooc.dm" #include "code\modules\client\verbs\ping.dm" @@ -1397,6 +1407,16 @@ #include "code\modules\jobs\job_types\science.dm" #include "code\modules\jobs\job_types\security.dm" #include "code\modules\jobs\job_types\silicon.dm" +#include "code\modules\language\common.dm" +#include "code\modules\language\drone.dm" +#include "code\modules\language\language.dm" +#include "code\modules\language\language_menu.dm" +#include "code\modules\language\machine.dm" +#include "code\modules\language\monkey.dm" +#include "code\modules\language\ratvar.dm" +#include "code\modules\language\slime.dm" +#include "code\modules\language\swarmer.dm" +#include "code\modules\language\xenocommon.dm" #include "code\modules\library\lib_codex_gigas.dm" #include "code\modules\library\lib_items.dm" #include "code\modules\library\lib_machines.dm" @@ -1414,8 +1434,6 @@ #include "code\modules\mapping\map_template.dm" #include "code\modules\mapping\reader.dm" #include "code\modules\mapping\ruins.dm" -#include "code\modules\mapping\swapmaps.dm" -#include "code\modules\mapping\writer.dm" #include "code\modules\mentor\follow.dm" #include "code\modules\mentor\holder2.dm" #include "code\modules\mentor\mentor_ranks.dm" @@ -1447,7 +1465,6 @@ #include "code\modules\mining\lavaland\necropolis_chests.dm" #include "code\modules\mining\lavaland\ruins\gym.dm" #include "code\modules\mob\death.dm" -#include "code\modules\mob\interactive.dm" #include "code\modules\mob\inventory.dm" #include "code\modules\mob\login.dm" #include "code\modules\mob\logout.dm" @@ -1464,7 +1481,6 @@ #include "code\modules\mob\update_icons.dm" #include "code\modules\mob\camera\camera.dm" #include "code\modules\mob\dead\dead.dm" -#include "code\modules\mob\dead\death.dm" #include "code\modules\mob\dead\new_player\login.dm" #include "code\modules\mob\dead\new_player\logout.dm" #include "code\modules\mob\dead\new_player\new_player.dm" @@ -1551,12 +1567,12 @@ #include "code\modules\mob\living\carbon\human\death.dm" #include "code\modules\mob\living\carbon\human\emote.dm" #include "code\modules\mob\living\carbon\human\examine.dm" -#include "code\modules\mob\living\carbon\human\examine_vr.dm" #include "code\modules\mob\living\carbon\human\human.dm" #include "code\modules\mob\living\carbon\human\human_defense.dm" #include "code\modules\mob\living\carbon\human\human_defines.dm" #include "code\modules\mob\living\carbon\human\human_helpers.dm" #include "code\modules\mob\living\carbon\human\human_movement.dm" +#include "code\modules\mob\living\carbon\human\interactive.dm" #include "code\modules\mob\living\carbon\human\inventory.dm" #include "code\modules\mob\living\carbon\human\life.dm" #include "code\modules\mob\living\carbon\human\say.dm" @@ -1814,6 +1830,7 @@ #include "code\modules\power\apc.dm" #include "code\modules\power\cable.dm" #include "code\modules\power\cell.dm" +#include "code\modules\power\floodlight.dm" #include "code\modules\power\generator.dm" #include "code\modules\power\gravitygenerator.dm" #include "code\modules\power\lighting.dm" @@ -2076,11 +2093,10 @@ #include "code\modules\surgery\organs\augments_eyes.dm" #include "code\modules\surgery\organs\augments_internal.dm" #include "code\modules\surgery\organs\autoimplanter.dm" +#include "code\modules\surgery\organs\autosurgeon.dm" #include "code\modules\surgery\organs\helpers.dm" #include "code\modules\surgery\organs\organ_internal.dm" #include "code\modules\surgery\organs\vocal_cords.dm" -#include "code\modules\telesci\bscrystal.dm" -#include "code\modules\telesci\gps.dm" #include "code\modules\telesci\telepad.dm" #include "code\modules\telesci\telesci_computer.dm" #include "code\modules\tgui\external.dm" @@ -2096,6 +2112,7 @@ #include "code\modules\tgui\states\hands.dm" #include "code\modules\tgui\states\human_adjacent.dm" #include "code\modules\tgui\states\inventory.dm" +#include "code\modules\tgui\states\language_menu.dm" #include "code\modules\tgui\states\not_incapacitated.dm" #include "code\modules\tgui\states\notcontained.dm" #include "code\modules\tgui\states\observer.dm" @@ -2105,6 +2122,7 @@ #include "code\modules\tooltip\tooltip.dm" #include "code\modules\uplink\uplink.dm" #include "code\modules\uplink\uplink_item.dm" +#include "code\modules\uplink\uplink_item_cit.dm" #include "code\modules\vehicles\atv.dm" #include "code\modules\vehicles\bicycle.dm" #include "code\modules\vehicles\pimpin_ride.dm" @@ -2112,14 +2130,6 @@ #include "code\modules\vehicles\secway.dm" #include "code\modules\vehicles\speedbike.dm" #include "code\modules\vehicles\vehicle.dm" -#include "code\modules\vore\hook-defs_vr.dm" -#include "code\modules\vore\trycatch_vr.dm" -#include "code\modules\vore\eating\belly_vr.dm" -#include "code\modules\vore\eating\bellymodes_vr.dm" -#include "code\modules\vore\eating\living_vr.dm" -#include "code\modules\vore\eating\simple_animal_vr.dm" -#include "code\modules\vore\eating\vore_vr.dm" -#include "code\modules\vore\eating\vorepanel_vr.dm" #include "code\modules\VR\vr_human.dm" #include "code\modules\VR\vr_sleeper.dm" #include "code\modules\zombie\items.dm" diff --git a/tgui/assets/tgui.js b/tgui/assets/tgui.js index 6068657623..a6e5802281 100644 --- a/tgui/assets/tgui.js +++ b/tgui/assets/tgui.js @@ -1,16 +1,16 @@ require=function t(e,n,a){function r(o,s){if(!n[o]){if(!e[o]){var p="function"==typeof require&&require;if(!s&&p)return p(o,!0);if(i)return i(o,!0);var u=Error("Cannot find module '"+o+"'");throw u.code="MODULE_NOT_FOUND",u}var c=n[o]={exports:{}};e[o][0].call(c.exports,function(t){var n=e[o][1][t];return r(n?n:t)},c,c.exports,t,e,n,a)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;o=0;--a){var r=this.tryEntries[a],i=r.completion;if("root"===r.tryLoc)return e("end");if(r.tryLoc<=this.prev){var o=b.call(r,"catchLoc"),s=b.call(r,"finallyLoc");if(o&&s){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&b.call(a,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),d(n),E}},"catch":function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var a=n.completion;if("throw"===a.type){var r=a.arg;d(n)}return r}}throw Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:m(t),resultName:e,nextLoc:n},E}}}("object"==typeof n?n:"object"==typeof window?window:"object"==typeof self?self:this)}).call(this,t(190),void 0!==n?n:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{190:190}],3:[function(t,e,n){e.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},{}],4:[function(t,e,n){var a=t(84)("unscopables"),r=Array.prototype;void 0==r[a]&&t(32)(r,a,{}),e.exports=function(t){r[a][t]=!0}},{32:32,84:84}],5:[function(t,e,n){var a=t(39);e.exports=function(t){if(!a(t))throw TypeError(t+" is not an object!");return t}},{39:39}],6:[function(t,e,n){"use strict";var a=t(81),r=t(77),i=t(80);e.exports=[].copyWithin||function(t,e){var n=a(this),o=i(n.length),s=r(t,o),p=r(e,o),u=arguments,c=u.length>2?u[2]:void 0,l=Math.min((void 0===c?o:r(c,o))-p,o-s),f=1;for(s>p&&p+l>s&&(f=-1,p+=l-1,s+=l-1);l-- >0;)p in n?n[s]=n[p]:delete n[s],s+=f,p+=f;return n}},{77:77,80:80,81:81}],7:[function(t,e,n){"use strict";var a=t(81),r=t(77),i=t(80);e.exports=[].fill||function(t){for(var e=a(this),n=i(e.length),o=arguments,s=o.length,p=r(s>1?o[1]:void 0,n),u=s>2?o[2]:void 0,c=void 0===u?n:r(u,n);c>p;)e[p++]=t;return e}},{77:77,80:80,81:81}],8:[function(t,e,n){var a=t(79),r=t(80),i=t(77);e.exports=function(t){return function(e,n,o){var s,p=a(e),u=r(p.length),c=i(o,u);if(t&&n!=n){for(;u>c;)if(s=p[c++],s!=s)return!0}else for(;u>c;c++)if((t||c in p)&&p[c]===n)return t||c;return!t&&-1}}},{77:77,79:79,80:80}],9:[function(t,e,n){var a=t(18),r=t(35),i=t(81),o=t(80),s=t(10);e.exports=function(t){var e=1==t,n=2==t,p=3==t,u=4==t,c=6==t,l=5==t||c;return function(f,d,h){for(var m,v,g=i(f),b=r(g),y=a(d,h,3),_=o(b.length),x=0,w=e?s(f,_):n?s(f,0):void 0;_>x;x++)if((l||x in b)&&(m=b[x],v=y(m,x,g),t))if(e)w[x]=v;else if(v)switch(t){case 3:return!0;case 5:return m;case 6:return x;case 2:w.push(m)}else if(u)return!1;return c?-1:p||u?u:w}}},{10:10,18:18,35:35,80:80,81:81}],10:[function(t,e,n){var a=t(39),r=t(37),i=t(84)("species");e.exports=function(t,e){var n;return r(t)&&(n=t.constructor,"function"!=typeof n||n!==Array&&!r(n.prototype)||(n=void 0),a(n)&&(n=n[i],null===n&&(n=void 0))),new(void 0===n?Array:n)(e)}},{37:37,39:39,84:84}],11:[function(t,e,n){var a=t(12),r=t(84)("toStringTag"),i="Arguments"==a(function(){return arguments}());e.exports=function(t){var e,n,o;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=(e=Object(t))[r])?n:i?a(e):"Object"==(o=a(e))&&"function"==typeof e.callee?"Arguments":o}},{12:12,84:84}],12:[function(t,e,n){var a={}.toString;e.exports=function(t){return a.call(t).slice(8,-1)}},{}],13:[function(t,e,n){"use strict";var a=t(47),r=t(32),i=t(61),o=t(18),s=t(70),p=t(19),u=t(28),c=t(43),l=t(45),f=t(83)("id"),d=t(31),h=t(39),m=t(66),v=t(20),g=Object.isExtensible||h,b=v?"_s":"size",y=0,_=function(t,e){if(!h(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!d(t,f)){if(!g(t))return"F";if(!e)return"E";r(t,f,++y)}return"O"+t[f]},x=function(t,e){var n,a=_(e);if("F"!==a)return t._i[a];for(n=t._f;n;n=n.n)if(n.k==e)return n};e.exports={getConstructor:function(t,e,n,r){var c=t(function(t,i){s(t,c,e),t._i=a.create(null),t._f=void 0,t._l=void 0,t[b]=0,void 0!=i&&u(i,n,t[r],t)});return i(c.prototype,{clear:function(){for(var t=this,e=t._i,n=t._f;n;n=n.n)n.r=!0,n.p&&(n.p=n.p.n=void 0),delete e[n.i];t._f=t._l=void 0,t[b]=0},"delete":function(t){var e=this,n=x(e,t);if(n){var a=n.n,r=n.p;delete e._i[n.i],n.r=!0,r&&(r.n=a),a&&(a.p=r),e._f==n&&(e._f=a),e._l==n&&(e._l=r),e[b]--}return!!n},forEach:function(t){for(var e,n=o(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.n:this._f;)for(n(e.v,e.k,this);e&&e.r;)e=e.p},has:function(t){return!!x(this,t)}}),v&&a.setDesc(c.prototype,"size",{get:function(){return p(this[b])}}),c},def:function(t,e,n){var a,r,i=x(t,e);return i?i.v=n:(t._l=i={i:r=_(e,!0),k:e,v:n,p:a=t._l,n:void 0,r:!1},t._f||(t._f=i),a&&(a.n=i),t[b]++,"F"!==r&&(t._i[r]=i)),t},getEntry:x,setStrong:function(t,e,n){c(t,e,function(t,e){this._t=t,this._k=e,this._l=void 0},function(){for(var t=this,e=t._k,n=t._l;n&&n.r;)n=n.p;return t._t&&(t._l=n=n?n.n:t._t._f)?"keys"==e?l(0,n.k):"values"==e?l(0,n.v):l(0,[n.k,n.v]):(t._t=void 0,l(1))},n?"entries":"values",!n,!0),m(e)}}},{18:18,19:19,20:20,28:28,31:31,32:32,39:39,43:43,45:45,47:47,61:61,66:66,70:70,83:83}],14:[function(t,e,n){var a=t(28),r=t(11);e.exports=function(t){return function(){if(r(this)!=t)throw TypeError(t+"#toJSON isn't generic");var e=[];return a(this,!1,e.push,e),e}}},{11:11,28:28}],15:[function(t,e,n){"use strict";var a=t(32),r=t(61),i=t(5),o=t(39),s=t(70),p=t(28),u=t(9),c=t(31),l=t(83)("weak"),f=Object.isExtensible||o,d=u(5),h=u(6),m=0,v=function(t){return t._l||(t._l=new g)},g=function(){this.a=[]},b=function(t,e){return d(t.a,function(t){return t[0]===e})};g.prototype={get:function(t){var e=b(this,t);return e?e[1]:void 0},has:function(t){return!!b(this,t)},set:function(t,e){var n=b(this,t);n?n[1]=e:this.a.push([t,e])},"delete":function(t){var e=h(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}},e.exports={getConstructor:function(t,e,n,a){var i=t(function(t,r){s(t,i,e),t._i=m++,t._l=void 0,void 0!=r&&p(r,n,t[a],t)});return r(i.prototype,{"delete":function(t){return o(t)?f(t)?c(t,l)&&c(t[l],this._i)&&delete t[l][this._i]:v(this)["delete"](t):!1},has:function(t){return o(t)?f(t)?c(t,l)&&c(t[l],this._i):v(this).has(t):!1}}),i},def:function(t,e,n){return f(i(e))?(c(e,l)||a(e,l,{}),e[l][t._i]=n):v(t).set(e,n),t},frozenStore:v,WEAK:l}},{28:28,31:31,32:32,39:39,5:5,61:61,70:70,83:83,9:9}],16:[function(t,e,n){"use strict";var a=t(30),r=t(23),i=t(62),o=t(61),s=t(28),p=t(70),u=t(39),c=t(25),l=t(44),f=t(67);e.exports=function(t,e,n,d,h,m){var v=a[t],g=v,b=h?"set":"add",y=g&&g.prototype,_={},x=function(t){var e=y[t];i(y,t,"delete"==t?function(t){return m&&!u(t)?!1:e.call(this,0===t?0:t)}:"has"==t?function(t){return m&&!u(t)?!1:e.call(this,0===t?0:t)}:"get"==t?function(t){return m&&!u(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function(t){return e.call(this,0===t?0:t),this}:function(t,n){return e.call(this,0===t?0:t,n),this})};if("function"==typeof g&&(m||y.forEach&&!c(function(){(new g).entries().next()}))){var w,k=new g,P=k[b](m?{}:-0,1)!=k,C=c(function(){k.has(1)}),E=l(function(t){new g(t)});E||(g=e(function(e,n){p(e,g,t);var a=new v;return void 0!=n&&s(n,h,a[b],a),a}),g.prototype=y,y.constructor=g),m||k.forEach(function(t,e){w=1/e===-(1/0)}),(C||w)&&(x("delete"),x("has"),h&&x("get")),(w||P)&&x(b),m&&y.clear&&delete y.clear}else g=d.getConstructor(e,t,h,b),o(g.prototype,n);return f(g,t),_[t]=g,r(r.G+r.W+r.F*(g!=v),_),m||d.setStrong(g,t,h),g}},{23:23,25:25,28:28,30:30,39:39,44:44,61:61,62:62,67:67,70:70}],17:[function(t,e,n){var a=e.exports={version:"1.2.6"};"number"==typeof __e&&(__e=a)},{}],18:[function(t,e,n){var a=t(3);e.exports=function(t,e,n){if(a(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,a){return t.call(e,n,a)};case 3:return function(n,a,r){return t.call(e,n,a,r)}}return function(){return t.apply(e,arguments)}}},{3:3}],19:[function(t,e,n){e.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},{}],20:[function(t,e,n){e.exports=!t(25)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{25:25}],21:[function(t,e,n){var a=t(39),r=t(30).document,i=a(r)&&a(r.createElement);e.exports=function(t){return i?r.createElement(t):{}}},{30:30,39:39}],22:[function(t,e,n){var a=t(47);e.exports=function(t){var e=a.getKeys(t),n=a.getSymbols;if(n)for(var r,i=n(t),o=a.isEnum,s=0;i.length>s;)o.call(t,r=i[s++])&&e.push(r);return e}},{47:47}],23:[function(t,e,n){var a=t(30),r=t(17),i=t(32),o=t(62),s=t(18),p="prototype",u=function(t,e,n){var c,l,f,d,h=t&u.F,m=t&u.G,v=t&u.S,g=t&u.P,b=t&u.B,y=m?a:v?a[e]||(a[e]={}):(a[e]||{})[p],_=m?r:r[e]||(r[e]={}),x=_[p]||(_[p]={});m&&(n=e);for(c in n)l=!h&&y&&c in y,f=(l?y:n)[c],d=b&&l?s(f,a):g&&"function"==typeof f?s(Function.call,f):f,y&&!l&&o(y,c,f),_[c]!=f&&i(_,c,d),g&&x[c]!=f&&(x[c]=f)};a.core=r,u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,e.exports=u},{17:17,18:18,30:30,32:32,62:62}],24:[function(t,e,n){var a=t(84)("match");e.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[a]=!1,!"/./"[t](e)}catch(r){}}return!0}},{84:84}],25:[function(t,e,n){e.exports=function(t){try{return!!t()}catch(e){return!0}}},{}],26:[function(t,e,n){"use strict";var a=t(32),r=t(62),i=t(25),o=t(19),s=t(84);e.exports=function(t,e,n){var p=s(t),u=""[t];i(function(){var e={};return e[p]=function(){return 7},7!=""[t](e)})&&(r(String.prototype,t,n(o,p,u)),a(RegExp.prototype,p,2==e?function(t,e){return u.call(t,this,e)}:function(t){return u.call(t,this)}))}},{19:19,25:25,32:32,62:62,84:84}],27:[function(t,e,n){"use strict";var a=t(5);e.exports=function(){var t=a(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},{5:5}],28:[function(t,e,n){var a=t(18),r=t(41),i=t(36),o=t(5),s=t(80),p=t(85);e.exports=function(t,e,n,u){var c,l,f,d=p(t),h=a(n,u,e?2:1),m=0;if("function"!=typeof d)throw TypeError(t+" is not iterable!");if(i(d))for(c=s(t.length);c>m;m++)e?h(o(l=t[m])[0],l[1]):h(t[m]);else for(f=d.call(t);!(l=f.next()).done;)r(f,h,l.value,e)}},{18:18,36:36,41:41,5:5,80:80,85:85}],29:[function(t,e,n){var a=t(79),r=t(47).getNames,i={}.toString,o="object"==typeof window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(t){try{return r(t)}catch(e){return o.slice()}};e.exports.get=function(t){return o&&"[object Window]"==i.call(t)?s(t):r(a(t))}},{47:47,79:79}],30:[function(t,e,n){var a=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=a)},{}],31:[function(t,e,n){var a={}.hasOwnProperty;e.exports=function(t,e){return a.call(t,e)}},{}],32:[function(t,e,n){var a=t(47),r=t(60);e.exports=t(20)?function(t,e,n){return a.setDesc(t,e,r(1,n))}:function(t,e,n){return t[e]=n,t}},{20:20,47:47,60:60}],33:[function(t,e,n){e.exports=t(30).document&&document.documentElement},{30:30}],34:[function(t,e,n){e.exports=function(t,e,n){var a=void 0===n;switch(e.length){case 0:return a?t():t.call(n);case 1:return a?t(e[0]):t.call(n,e[0]);case 2:return a?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return a?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return a?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},{}],35:[function(t,e,n){var a=t(12);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==a(t)?t.split(""):Object(t)}},{12:12}],36:[function(t,e,n){var a=t(46),r=t(84)("iterator"),i=Array.prototype;e.exports=function(t){return void 0!==t&&(a.Array===t||i[r]===t)}},{46:46,84:84}],37:[function(t,e,n){var a=t(12);e.exports=Array.isArray||function(t){return"Array"==a(t)}},{12:12}],38:[function(t,e,n){var a=t(39),r=Math.floor;e.exports=function(t){return!a(t)&&isFinite(t)&&r(t)===t}},{39:39}],39:[function(t,e,n){e.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},{}],40:[function(t,e,n){var a=t(39),r=t(12),i=t(84)("match");e.exports=function(t){var e;return a(t)&&(void 0!==(e=t[i])?!!e:"RegExp"==r(t))}},{12:12,39:39,84:84}],41:[function(t,e,n){var a=t(5);e.exports=function(t,e,n,r){try{return r?e(a(n)[0],n[1]):e(n)}catch(i){var o=t["return"];throw void 0!==o&&a(o.call(t)),i}}},{5:5}],42:[function(t,e,n){"use strict";var a=t(47),r=t(60),i=t(67),o={};t(32)(o,t(84)("iterator"),function(){return this}),e.exports=function(t,e,n){t.prototype=a.create(o,{next:r(1,n)}),i(t,e+" Iterator")}},{32:32,47:47,60:60,67:67,84:84}],43:[function(t,e,n){"use strict";var a=t(49),r=t(23),i=t(62),o=t(32),s=t(31),p=t(46),u=t(42),c=t(67),l=t(47).getProto,f=t(84)("iterator"),d=!([].keys&&"next"in[].keys()),h="@@iterator",m="keys",v="values",g=function(){return this};e.exports=function(t,e,n,b,y,_,x){u(n,e,b);var w,k,P=function(t){if(!d&&t in A)return A[t];switch(t){case m:return function(){return new n(this,t)};case v:return function(){return new n(this,t)}}return function(){return new n(this,t)}},C=e+" Iterator",E=y==v,S=!1,A=t.prototype,O=A[f]||A[h]||y&&A[y],T=O||P(y);if(O){var M=l(T.call(new t));c(M,C,!0),!a&&s(A,h)&&o(M,f,g),E&&O.name!==v&&(S=!0,T=function(){return O.call(this)})}if(a&&!x||!d&&!S&&A[f]||o(A,f,T),p[e]=T,p[C]=g,y)if(w={values:E?T:P(v),keys:_?T:P(m),entries:E?P("entries"):T},x)for(k in w)k in A||i(A,k,w[k]);else r(r.P+r.F*(d||S),e,w);return w}},{23:23,31:31,32:32,42:42,46:46,47:47,49:49,62:62,67:67,84:84}],44:[function(t,e,n){var a=t(84)("iterator"),r=!1;try{var i=[7][a]();i["return"]=function(){r=!0},Array.from(i,function(){throw 2})}catch(o){}e.exports=function(t,e){if(!e&&!r)return!1;var n=!1;try{var i=[7],o=i[a]();o.next=function(){n=!0},i[a]=function(){return o},t(i)}catch(s){}return n}},{84:84}],45:[function(t,e,n){e.exports=function(t,e){return{value:e,done:!!t}}},{}],46:[function(t,e,n){e.exports={}},{}],47:[function(t,e,n){var a=Object;e.exports={create:a.create,getProto:a.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:a.getOwnPropertyDescriptor,setDesc:a.defineProperty,setDescs:a.defineProperties,getKeys:a.keys,getNames:a.getOwnPropertyNames,getSymbols:a.getOwnPropertySymbols,each:[].forEach}},{}],48:[function(t,e,n){var a=t(47),r=t(79);e.exports=function(t,e){for(var n,i=r(t),o=a.getKeys(i),s=o.length,p=0;s>p;)if(i[n=o[p++]]===e)return n}},{47:47,79:79}],49:[function(t,e,n){e.exports=!1},{}],50:[function(t,e,n){e.exports=Math.expm1||function(t){return 0==(t=+t)?t:t>-1e-6&&1e-6>t?t+t*t/2:Math.exp(t)-1}},{}],51:[function(t,e,n){e.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&1e-8>t?t-t*t/2:Math.log(1+t)}},{}],52:[function(t,e,n){e.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:0>t?-1:1}},{}],53:[function(t,e,n){var a,r,i,o=t(30),s=t(76).set,p=o.MutationObserver||o.WebKitMutationObserver,u=o.process,c=o.Promise,l="process"==t(12)(u),f=function(){var t,e,n;for(l&&(t=u.domain)&&(u.domain=null,t.exit());a;)e=a.domain,n=a.fn,e&&e.enter(),n(),e&&e.exit(),a=a.next;r=void 0,t&&t.enter()};if(l)i=function(){u.nextTick(f)};else if(p){var d=1,h=document.createTextNode("");new p(f).observe(h,{characterData:!0}),i=function(){h.data=d=-d}}else i=c&&c.resolve?function(){c.resolve().then(f)}:function(){s.call(o,f)};e.exports=function(t){var e={fn:t,next:void 0,domain:l&&u.domain};r&&(r.next=e),a||(a=e,i()),r=e}},{12:12,30:30,76:76}],54:[function(t,e,n){var a=t(47),r=t(81),i=t(35);e.exports=t(25)(function(){var t=Object.assign,e={},n={},a=Symbol(),r="abcdefghijklmnopqrst";return e[a]=7,r.split("").forEach(function(t){n[t]=t}),7!=t({},e)[a]||Object.keys(t({},n)).join("")!=r})?function(t,e){for(var n=r(t),o=arguments,s=o.length,p=1,u=a.getKeys,c=a.getSymbols,l=a.isEnum;s>p;)for(var f,d=i(o[p++]),h=c?u(d).concat(c(d)):u(d),m=h.length,v=0;m>v;)l.call(d,f=h[v++])&&(n[f]=d[f]);return n}:Object.assign},{25:25,35:35,47:47,81:81}],55:[function(t,e,n){var a=t(23),r=t(17),i=t(25);e.exports=function(t,e){var n=(r.Object||{})[t]||Object[t],o={};o[t]=e(n),a(a.S+a.F*i(function(){n(1)}),"Object",o)}},{17:17,23:23,25:25}],56:[function(t,e,n){var a=t(47),r=t(79),i=a.isEnum;e.exports=function(t){return function(e){for(var n,o=r(e),s=a.getKeys(o),p=s.length,u=0,c=[];p>u;)i.call(o,n=s[u++])&&c.push(t?[n,o[n]]:o[n]);return c}}},{47:47,79:79}],57:[function(t,e,n){var a=t(47),r=t(5),i=t(30).Reflect;e.exports=i&&i.ownKeys||function(t){var e=a.getNames(r(t)),n=a.getSymbols;return n?e.concat(n(t)):e}},{30:30,47:47,5:5}],58:[function(t,e,n){"use strict";var a=t(59),r=t(34),i=t(3);e.exports=function(){for(var t=i(this),e=arguments.length,n=Array(e),o=0,s=a._,p=!1;e>o;)(n[o]=arguments[o++])===s&&(p=!0);return function(){var a,i=this,o=arguments,u=o.length,c=0,l=0;if(!p&&!u)return r(t,n,i);if(a=n.slice(),p)for(;e>c;c++)a[c]===s&&(a[c]=o[l++]);for(;u>l;)a.push(o[l++]);return r(t,a,i)}}},{3:3,34:34,59:59}],59:[function(t,e,n){e.exports=t(30)},{30:30}],60:[function(t,e,n){e.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},{}],61:[function(t,e,n){var a=t(62);e.exports=function(t,e){for(var n in e)a(t,n,e[n]);return t}},{62:62}],62:[function(t,e,n){var a=t(30),r=t(32),i=t(83)("src"),o="toString",s=Function[o],p=(""+s).split(o);t(17).inspectSource=function(t){return s.call(t)},(e.exports=function(t,e,n,o){"function"==typeof n&&(n.hasOwnProperty(i)||r(n,i,t[e]?""+t[e]:p.join(e+"")),n.hasOwnProperty("name")||r(n,"name",e)),t===a?t[e]=n:(o||delete t[e],r(t,e,n))})(Function.prototype,o,function(){return"function"==typeof this&&this[i]||s.call(this)})},{17:17,30:30,32:32,83:83}],63:[function(t,e,n){e.exports=function(t,e){var n=e===Object(e)?function(t){return e[t]}:e;return function(e){return(e+"").replace(t,n)}}},{}],64:[function(t,e,n){e.exports=Object.is||function(t,e){return t===e?0!==t||1/t===1/e:t!=t&&e!=e}},{}],65:[function(t,e,n){var a=t(47).getDesc,r=t(39),i=t(5),o=function(t,e){if(i(t),!r(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,n,r){try{r=t(18)(Function.call,a(Object.prototype,"__proto__").set,2),r(e,[]),n=!(e instanceof Array)}catch(i){n=!0}return function(t,e){return o(t,e),n?t.__proto__=e:r(t,e),t}}({},!1):void 0),check:o}},{18:18,39:39,47:47,5:5}],66:[function(t,e,n){"use strict";var a=t(30),r=t(47),i=t(20),o=t(84)("species");e.exports=function(t){var e=a[t];i&&e&&!e[o]&&r.setDesc(e,o,{configurable:!0,get:function(){return this}})}},{20:20,30:30,47:47,84:84}],67:[function(t,e,n){var a=t(47).setDesc,r=t(31),i=t(84)("toStringTag");e.exports=function(t,e,n){t&&!r(t=n?t:t.prototype,i)&&a(t,i,{configurable:!0,value:e})}},{31:31,47:47,84:84}],68:[function(t,e,n){var a=t(30),r="__core-js_shared__",i=a[r]||(a[r]={});e.exports=function(t){return i[t]||(i[t]={})}},{30:30}],69:[function(t,e,n){var a=t(5),r=t(3),i=t(84)("species");e.exports=function(t,e){var n,o=a(t).constructor;return void 0===o||void 0==(n=a(o)[i])?e:r(n)}},{3:3,5:5,84:84}],70:[function(t,e,n){e.exports=function(t,e,n){if(!(t instanceof e))throw TypeError(n+": use the 'new' operator!");return t}},{}],71:[function(t,e,n){var a=t(78),r=t(19);e.exports=function(t){return function(e,n){var i,o,s=r(e)+"",p=a(n),u=s.length;return 0>p||p>=u?t?"":void 0:(i=s.charCodeAt(p),55296>i||i>56319||p+1===u||(o=s.charCodeAt(p+1))<56320||o>57343?t?s.charAt(p):i:t?s.slice(p,p+2):(i-55296<<10)+(o-56320)+65536)}}},{19:19,78:78}],72:[function(t,e,n){var a=t(40),r=t(19);e.exports=function(t,e,n){if(a(e))throw TypeError("String#"+n+" doesn't accept regex!");return r(t)+""}},{19:19,40:40}],73:[function(t,e,n){var a=t(80),r=t(74),i=t(19);e.exports=function(t,e,n,o){var s=i(t)+"",p=s.length,u=void 0===n?" ":n+"",c=a(e);if(p>=c)return s;""==u&&(u=" ");var l=c-p,f=r.call(u,Math.ceil(l/u.length));return f.length>l&&(f=f.slice(0,l)),o?f+s:s+f}},{19:19,74:74,80:80}],74:[function(t,e,n){"use strict";var a=t(78),r=t(19);e.exports=function(t){var e=r(this)+"",n="",i=a(t);if(0>i||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(e+=e))1&i&&(n+=e);return n}},{19:19,78:78}],75:[function(t,e,n){var a=t(23),r=t(19),i=t(25),o=" \n\x0B\f\r   ᠎              \u2028\u2029\ufeff",s="["+o+"]",p="​…",u=RegExp("^"+s+s+"*"),c=RegExp(s+s+"*$"),l=function(t,e){var n={};n[t]=e(f),a(a.P+a.F*i(function(){return!!o[t]()||p[t]()!=p}),"String",n)},f=l.trim=function(t,e){return t=r(t)+"",1&e&&(t=t.replace(u,"")),2&e&&(t=t.replace(c,"")),t};e.exports=l},{19:19,23:23,25:25}],76:[function(t,e,n){var a,r,i,o=t(18),s=t(34),p=t(33),u=t(21),c=t(30),l=c.process,f=c.setImmediate,d=c.clearImmediate,h=c.MessageChannel,m=0,v={},g="onreadystatechange",b=function(){var t=+this;if(v.hasOwnProperty(t)){var e=v[t];delete v[t],e()}},y=function(t){b.call(t.data)};f&&d||(f=function(t){for(var e=[],n=1;arguments.length>n;)e.push(arguments[n++]);return v[++m]=function(){s("function"==typeof t?t:Function(t),e)},a(m),m},d=function(t){delete v[t]},"process"==t(12)(l)?a=function(t){l.nextTick(o(b,t,1))}:h?(r=new h,i=r.port2,r.port1.onmessage=y,a=o(i.postMessage,i,1)):c.addEventListener&&"function"==typeof postMessage&&!c.importScripts?(a=function(t){c.postMessage(t+"","*")},c.addEventListener("message",y,!1)):a=g in u("script")?function(t){p.appendChild(u("script"))[g]=function(){p.removeChild(this),b.call(t)}}:function(t){setTimeout(o(b,t,1),0)}),e.exports={set:f,clear:d}},{12:12,18:18,21:21,30:30,33:33,34:34}],77:[function(t,e,n){var a=t(78),r=Math.max,i=Math.min;e.exports=function(t,e){return t=a(t),0>t?r(t+e,0):i(t,e)}},{78:78}],78:[function(t,e,n){var a=Math.ceil,r=Math.floor;e.exports=function(t){return isNaN(t=+t)?0:(t>0?r:a)(t)}},{}],79:[function(t,e,n){var a=t(35),r=t(19);e.exports=function(t){return a(r(t))}},{19:19,35:35}],80:[function(t,e,n){var a=t(78),r=Math.min;e.exports=function(t){return t>0?r(a(t),9007199254740991):0}},{78:78}],81:[function(t,e,n){var a=t(19);e.exports=function(t){return Object(a(t))}},{19:19}],82:[function(t,e,n){var a=t(39);e.exports=function(t,e){if(!a(t))return t;var n,r;if(e&&"function"==typeof(n=t.toString)&&!a(r=n.call(t)))return r;if("function"==typeof(n=t.valueOf)&&!a(r=n.call(t)))return r;if(!e&&"function"==typeof(n=t.toString)&&!a(r=n.call(t)))return r;throw TypeError("Can't convert object to primitive value")}},{39:39}],83:[function(t,e,n){var a=0,r=Math.random();e.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++a+r).toString(36))}},{}],84:[function(t,e,n){var a=t(68)("wks"),r=t(83),i=t(30).Symbol;e.exports=function(t){return a[t]||(a[t]=i&&i[t]||(i||r)("Symbol."+t))}},{30:30,68:68,83:83}],85:[function(t,e,n){var a=t(11),r=t(84)("iterator"),i=t(46);e.exports=t(17).getIteratorMethod=function(t){return void 0!=t?t[r]||t["@@iterator"]||i[a(t)]:void 0}},{11:11,17:17,46:46,84:84}],86:[function(t,e,n){"use strict";var a,r=t(47),i=t(23),o=t(20),s=t(60),p=t(33),u=t(21),c=t(31),l=t(12),f=t(34),d=t(25),h=t(5),m=t(3),v=t(39),g=t(81),b=t(79),y=t(78),_=t(77),x=t(80),w=t(35),k=t(83)("__proto__"),P=t(9),C=t(8)(!1),E=Object.prototype,S=Array.prototype,A=S.slice,O=S.join,T=r.setDesc,M=r.getDesc,R=r.setDescs,j={};o||(a=!d(function(){return 7!=T(u("div"),"a",{get:function(){return 7}}).a}),r.setDesc=function(t,e,n){if(a)try{return T(t,e,n)}catch(r){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(h(t)[e]=n.value),t},r.getDesc=function(t,e){if(a)try{return M(t,e)}catch(n){}return c(t,e)?s(!E.propertyIsEnumerable.call(t,e),t[e]):void 0},r.setDescs=R=function(t,e){h(t);for(var n,a=r.getKeys(e),i=a.length,o=0;i>o;)r.setDesc(t,n=a[o++],e[n]);return t}),i(i.S+i.F*!o,"Object",{getOwnPropertyDescriptor:r.getDesc,defineProperty:r.setDesc,defineProperties:R});var L="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),N=L.concat("length","prototype"),D=L.length,F=function(){var t,e=u("iframe"),n=D,a=">";for(e.style.display="none",p.appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write("